Chúa tôi ghét thuật ngữ "mã ngửi", nhưng tôi không thể nghĩ ra bất cứ điều gì chính xác hơn.Sử dụng trạng thái Haskell monad một mã có mùi không?
Tôi đang thiết kế một ngôn ngữ cấp cao & trình biên dịch sang Whitespace trong thời gian rảnh rỗi để tìm hiểu về xây dựng trình biên dịch, thiết kế ngôn ngữ và lập trình hàm (trình biên dịch được viết bằng Haskell).
Trong giai đoạn tạo mã của trình biên dịch, tôi phải duy trì dữ liệu "trạng thái" khi tôi duyệt qua cây cú pháp. Ví dụ, khi biên dịch các câu lệnh kiểm soát dòng chảy, tôi cần phải tạo các tên duy nhất cho các nhãn để nhảy tới (các nhãn được tạo ra từ một bộ đếm được cập nhật, cập nhật, & trả về và giá trị cũ của bộ đếm không bao giờ được sử dụng lại). Một ví dụ khác là khi tôi bắt gặp các chuỗi ký tự trong dòng trong cây cú pháp, chúng cần được chuyển đổi vĩnh viễn thành các biến heap (trong khoảng trắng, các chuỗi được lưu trữ tốt nhất trên vùng heap). Tôi hiện đang gói toàn bộ mô-đun tạo mã trong trình đơn trạng thái để xử lý việc này.
Tôi đã nói rằng việc viết trình biên dịch là một vấn đề rất phù hợp với mô hình chức năng, nhưng tôi thấy rằng tôi đang thiết kế nó theo cùng cách tôi sẽ thiết kế nó trong C (bạn thực sự có thể viết C trong bất kỳ ngôn ngữ nào - ngay cả Haskell w/tiểu bang monads).
Tôi muốn tìm hiểu cách suy nghĩ trong Haskell (đúng hơn, trong mô hình chức năng) - không phải trong C với cú pháp Haskell. Tôi có nên thực sự cố gắng để loại bỏ/giảm thiểu việc sử dụng các đơn nguyên trạng thái, hoặc nó là một chức năng hợp pháp "mẫu thiết kế"?
Wtf man, khoảng trống ... –
Tôi có nên viết trình biên dịch cho mips hoặc x86 asm không? Điều đó sẽ phức tạp hơn một chút. – Cybis
C++, Cybis. Đặc tả năm 1999. Và chúng tôi muốn nó vào thứ sáu. –