Vì vậy, tôi hiện đang làm việc trên một ngôn ngữ lập trình mới. Lấy cảm hứng từ những ý tưởng từ lập trình đồng thời và Haskell, một trong những mục tiêu chính của ngôn ngữ là quản lý các tác dụng phụ. Nhiều hơn hoặc ít hơn, mỗi mô-đun sẽ được yêu cầu để xác định tác dụng phụ nào nó cho phép. Vì vậy, nếu tôi đang thực hiện một trò chơi, mô-đun đồ họa sẽ không có khả năng làm IO. Mô-đun đầu vào sẽ không có khả năng vẽ lên màn hình. Mô-đun AI sẽ được yêu cầu phải hoàn toàn thuần khiết. Các tập lệnh và plugin cho trò chơi sẽ có quyền truy cập vào một tập hợp con rất hạn chế của IO để đọc các tệp cấu hình. Vân vân.Tôi nên quản lý các tác dụng phụ trong thiết kế ngôn ngữ mới như thế nào?
Tuy nhiên, những gì cấu thành một tác dụng phụ không rõ ràng. Tôi đang tìm kiếm bất kỳ suy nghĩ hoặc đề xuất nào về chủ đề mà tôi có thể muốn xem xét bằng ngôn ngữ của mình. Đây là suy nghĩ hiện tại của tôi.
Một số tác dụng phụ là trắng trợn. Cho dù việc in ấn vào bảng điều khiển của người dùng hoặc khởi chạy tên lửa của bạn, bất kỳ hành động nào đọc hoặc ghi vào tệp do người dùng sở hữu hoặc tương tác với phần cứng bên ngoài đều là tác dụng phụ. Đây là những thứ như nhận được một số ngẫu nhiên, nhận được thời gian hệ thống, ngủ một sợi, thực hiện bộ nhớ giao dịch phần mềm, hoặc thậm chí một cái gì đó rất cơ bản như vậy như phân bổ bộ nhớ.
Không giống như các ngôn ngữ khác được xây dựng để kiểm soát các tác dụng phụ (nhìn vào bạn Haskell), tôi muốn thiết kế ngôn ngữ của tôi là thực dụng và thiết thực. Các hạn chế về tác dụng phụ phải phục vụ hai mục đích:
- Để hỗ trợ trong việc phân tách các mối quan tâm. (Không một mô-đun nào có thể làm được mọi thứ).
- Để sandbox từng mô-đun trong ứng dụng. (Bất kỳ mô-đun nào cũng có thể được sử dụng làm plugin)
Với điều này, tôi nên xử lý các hiệu ứng "giả" như số ngẫu nhiên và ngủ như tôi đã đề cập ở trên? Tôi có thể bỏ lỡ những gì khác? Tôi có thể quản lý việc sử dụng bộ nhớ và thời gian làm tài nguyên theo cách nào?
+1 Wow. Tôi đã thực sự chỉ hỏi một câu hỏi tương tự. Tôi đang thiết kế một ngôn ngữ giống lai FP/OOP. – Zifre