Tôi đang xây dựng một ứng dụng giống bảng tính, nơi có rất nhiều tính toán nhỏ cần được ghép lại với nhau trong một cấu trúc cây. Những tính toán này do người dùng xác định và tôi cần một cách để người dùng nhập chúng vào thời gian chạy.Căn cứ một biểu thức DSL nhỏ trên DLR hoặc giữ cho nó cuộn bằng tay trong F #?
Cách tiếp cận hiện tại của tôi là viết một "biểu thức DSL" nhỏ trong F #, nơi tôi phân tích đầu vào bằng FParsec, xây dựng cây cú pháp dựa trên một công đoàn phân biệt và sau đó có thể đánh giá biểu thức. Điều này hoạt động khá tốt.
Tuy nhiên, tôi đang nghĩ đến việc tìm kiếm cơ sở ngôn ngữ trên DLR thay thế. Có bất kỳ upsides nào để đi xuống con đường này hay không (phân tích cú pháp đầu vào, tạo AST bằng cách sử dụng các công cụ Scripting.AST thay vì của riêng tôi, và để cho DLR xử lý việc thực hiện phép tính)?
Mỗi phép tính có thể sẽ khá nhỏ. Sự phụ thuộc giữa các tính toán sẽ được thực hiện ở mức độ cao hơn.
Tôi có thể mong đợi hiệu suất tốt hơn vì DLR sẽ tạo mã CIL cho biểu thức hoặc chi phí sẽ tăng lên không?
(như đối với việc sử dụng một ngôn ngữ hiện có như IronPython, nó có thể sẽ rất khó vì tôi đang lập kế hoạch để thêm rất nhiều nhà khai thác lát-và-con xúc xắc và các công cụ chiều-khắc phục với cú pháp ngôn ngữ)
Cảm ơn thông tin chi tiết của bạn. Tôi hoàn toàn bỏ qua các cây biểu hiện linq. Tôi sẽ cố gắng sửa đổi trình phân tích cú pháp của mình để tạo cây bằng API này và thực hiện một số kiểm tra hiệu suất về đánh giá của họ để so sánh với cách diễn giải/đánh giá ngây thơ mà tôi đang làm trong F #. – Rickard
Lưu ý rằng bạn có thể sử dụng F # Báo giá và trong thư viện FSharp.PowerPack.Linq bạn có thể chuyển đổi biểu thức báo giá F # thành một cây biểu thức LINQ.Không có một tấn tài liệu về điều này, tuy nhiên nhưng bạn có thể quan tâm. –