2011-01-09 46 views
6

Trình đọc thời gian dài, câu hỏi đầu tiên. fsi.exe là một tệp thực thi .NET và do đó chứa toàn bộ assembly riêng của nó với tất cả các phương thức yummy và whatnot fsi sử dụng để thực thi các script F #.fsi.exe Hội: Bất cứ ai biết cách nhúng nó?

Nhìn vào assembly trong .NET Reflector (chọn lớp của bạn, nhưng Shell là ví dụ tốt nhất) cho thấy một loạt các tên rác giống như các hàm C++ được trang trí (ví dụ, từ Dependency Walker). Ngẫu nhiên và hơi bên cạnh điểm, F # hội đồng biên dịch theo cùng một cách, với rất nhiều rác * tên, dẫn tôi nghĩ fsi.exe được viết bằng F #, có lẽ như là một bằng chứng về khả năng sử dụng?

Dù sao, đây là câu hỏi của tôi: có ai đã truy cập vào fsi.exe và tìm ra cách nhúng nó vào ứng dụng .NET không? Bởi vì tôi muốn sử dụng F # như một ngôn ngữ kịch bản, nhưng các chương trình biên dịch thành các chương trình (ngạc nhiên), và các kịch bản phải được thực thi bởi fsi.exe, không thể chấp nhận được trong miền của tôi (tôi cần một máy ảo liên tục). Tôi không mong đợi một hướng dẫn làm thế nào để sử dụng fsi.exe, nhưng tôi tò mò muốn biết nếu có ai chơi với nó và, nếu có, bạn đã phát hiện ra nó hoạt động như thế nào?

Cảm ơn thời gian của bạn.

* Rác một cách bình thường. Rõ ràng chúng được định dạng theo cách đặc biệt này cho một lý do cụ thể mà là bên dưới mui xe.

+1

Vì vậy, về cơ bản, bạn muốn [eval] (http://en.wikipedia.org/wiki/Eval)? –

+1

Tôi tự hỏi, liệu giấy phép của F # có cho phép nhúng fsi ngay từ đầu không? – Juliet

+0

@Juliet: Tại sao nó lại là vấn đề cấp phép? – leppie

Trả lời

6

Theo như tôi biết, fsi.exe không hiển thị bất kỳ API nào bạn có thể sử dụng để nhúng vào ứng dụng của mình (ví dụ: để triển khai tập lệnh). Tôi nghĩ rằng về cơ bản có hai lựa chọn:

  • Nếu bạn muốn sử dụng hiện fsi.exe trực tiếp, cách duy nhất là để bắt đầu sử dụng nó NET Process lớp và giao tiếp với nó bằng cách nào đó. Điều này có thể thực hiện được - bạn có thể gửi các lệnh tới quy trình bằng cách sử dụng đầu vào tiêu chuẩn. Để đọc kết quả đầu ra, bạn có thể sử dụng đầu ra tiêu chuẩn, nhưng điều này chỉ cung cấp cho bạn thông tin giới hạn. Có thể sử dụng .NET Remoting để liên lạc giữa fsi.exe và ứng dụng của bạn (ví dụ: đối tượng của bạn được tải trong ngữ cảnh tập lệnh trong FSI sẽ gửi thông tin đến ứng dụng của bạn qua Remoting).

  • Một cách khác là sử dụng số open-source release của F # và sửa đổi fsi.exe để hiển thị tất cả thông tin bạn cần làm API. Điều này đòi hỏi nhiều nỗ lực hơn để hiểu cách hoạt động của fsi.exe nhưng có thể thực hiện được. Có thể bạn không cần nhiều bổ sung đó - trạng thái được FSI lưu giữ chứa những thứ như biến toàn cầu.

Về giấy phép - bạn có thể không sử dụng được fsi.exe được phân phối với Visual Studio. Tôi không chắc chắn về fsi.exe đi kèm với bản phát hành CTP. Biên dịch từ nguồn (có sẵn here) chắc chắn sẽ ổn (vì nó có bản phát hành mã nguồn mở).

+0

Cảm ơn bạn đã nhập, Tomas.Sau khi nhìn vào bộ nguồn F #, tôi thực sự thấy rằng nó được viết bằng F #, thật là mỉa mai. Tôi đang trong quá trình poring over the source. Điều này có lẽ là quá cao đối với tôi để thích nghi, nhưng nó vẫn thú vị. Tôi rất muốn đánh giá bạn về phản ứng toàn diện, nhưng tôi không có đại diện cho nó. – Tom

+0

Có thể bằng cách nào đó nhúng nó vào một AppDomain khác không? Bằng cách đó bạn sẽ không có chi phí của một quá trình .net và có thể dễ dàng hơn để quản lý kiến ​​trúc. –

+0

@ashley - Thật không may, tại thời điểm nó phải được bắt đầu như là một quá trình riêng biệt. –

Các vấn đề liên quan