Tôi đang cố gắng để hiểu rõ hơn những gì sẽ được yêu cầu cho một trình biên dịch để có thể đưa ra các lựa chọn thông minh liên quan đến đồng thời thay mặt cho lập trình viên. Tôi nhận ra rằng có nhiều khía cạnh khó khăn của vấn đề này chẳng hạn:
- Đảm bảo rằng không có điều kiện cuộc đua
Đảm bảo rằng mã được chạy đồng thời sẽ không có tác dụng phụ ảnh hưởng đến ý nghĩa ngữ nghĩa của mã
Quyết định xem liệu chi phí từ việc kéo sợi lên có đáng hay không với mức độ song song có sẵn trong mã
Hiểu biết của tôi là hai biểu diễn trung gian chính được sử dụng trong các trình biên dịch hiện đại là gán đơn tĩnh cho các ngôn ngữ hướng đối tượng và hướng đối tượng và kiểu tiếp tục truyền cho các ngôn ngữ chức năng. Lý do về bất kỳ vấn đề nào được liệt kê ở trên có vẻ khó khăn khi sử dụng các hình thức trung gian này. Ngay cả các ngôn ngữ trong lý thuyết cũng có cơ hội song song tự động tốt nhất (các ngôn ngữ chức năng thuần túy như Haskell với sự đảm bảo không có tác dụng phụ) đã đạt được tiến bộ hạn chế trên mặt trận này.
Vì vậy, câu hỏi của tôi thực sự là những đại diện trung gian nào đã được sử dụng để thử và giải quyết vấn đề này? Có những đại diện khác đã được sử dụng trong nghiên cứu học thuật mà tôi không biết rằng nó phù hợp hơn với nhiệm vụ này? Đây có phải là vấn đề mà về cơ bản phải được giải quyết bởi giao diện người biên dịch bằng cách thao tác cây cú pháp trừu tượng trước khi quá trình biên dịch đạt đến một biểu diễn trung gian?