2010-06-04 3 views
10

Trong bản trình bày .NET 4.0 của Anders Hejlsberg, ông đã thảo luận trong NET 5.0 ("hoặc một số bản phát hành trong tương lai") họ đang làm việc trên mô hình "Dịch vụ như một Dịch vụ".Những lợi ích của Trình biên dịch dưới dạng Dịch vụ

Trạng thái của Anders Hejlsberg: [source] [1] "Chúng tôi muốn mở trình biên dịch của mình để nó trở thành API bạn có thể gọi để biên dịch một đoạn mã và lấy lại các biểu thức cây và/hoặc IL. toàn bộ các kịch bản, chẳng hạn như khả năng lập trình ứng dụng, lời nhắc tương tác, các phép tái cấu trúc do người dùng viết và các ngôn ngữ cụ thể của miền có ít đảo C# được nhúng vào chúng. "

Tôi đang đấu tranh để tìm một ví dụ thế giới thực, nơi điều này thực sự hữu ích. Tôi có thiếu khái niệm chính ở đây không? hoặc điều này thực sự sẽ mang lại lợi ích cho ngôn ngữ?

[1]: http://www.simple-talk.com/opinion/geek-of-the-week/anders-hejlsberg-geek-of-the-week/ biên dịch như một dịch vụ

+2

Làm thế nào về thuật toán di truyền đệ quy tự sửa đổi? Tôi vừa mới ném một số buzzwords? Có lẽ. Hoặc có lẽ chúng ta đang tiến gần hơn tới Skynet .... – Randolpho

Trả lời

4

Đối với một số vấn đề, việc viết chương trình có thể tạo ra một chương trình sẽ giải quyết được vấn đề thực tế là dễ dàng hơn. Một lĩnh vực mà điều này đặc biệt hữu ích là để xây dựng các trình phân tích cú pháp cho trình biên dịch.

Trong các trường hợp khác, bạn có thể tạo mã có thể được điều chỉnh để cung cấp hiệu suất tối ưu khi làm việc với một kiểu dữ liệu cụ thể, về các thuộc tính mà bạn vừa học trong thời gian chạy bằng cách phản ánh siêu dữ liệu của nó. Một ví dụ tôi có thể cung cấp cho bạn đó là dự án Modelshredder của tôi. Những gì nó về cơ bản làm là lấy tất cả các lĩnh vực và tài sản của một đối tượng và gói giá trị của họ vào một mảng đối tượng.

Cách tiếp cận đầu tiên của tôi đối với vấn đề đó là tiêm MSIL được mã hóa bằng tay bằng cách sử dụng Reflection.Emit. Cách tiếp cận thứ hai là năng động hơn một chút và dựa vào các cây biểu thức, có thể được xây dựng và biên dịch một cách hiệu quả trong thời gian chạy để cung cấp chức năng tương tự như việc tiêm MSIL được mã hóa bằng tay của tôi. Bạn có thể thấy rằng thực hiện trong thân cây MoreLinq (chỉ cần có một cái nhìn tại trang web Modelshredder, có một liên kết cho điều đó). Có trình biên dịch như một dịch vụ thực sự sẽ cho phép tôi nâng mức trừu tượng và phát ra mã C# mà sau đó sẽ được biên dịch thành MSIL.

Trường hợp cho Ngôn ngữ cụ thể tên miền đã được thực hiện, tôi cũng nghĩ rằng ngôn ngữ bắt buộc như C# không phù hợp với kịch bản "dòng lệnh" nhưng thay vì cho tập lệnh lớn hơn. Có một hệ thống làm gọn gàng dựa trên một F # DSL gọi là FAKE, vốn vay rất nhiều khái niệm về Trình biên dịch dưới dạng Dịch vụ. Các khái niệm tương tự được sử dụng bởi cửa sổ tương tác F # (được gọi theo cách đó?) Bên trong VisualStudio.

4

Một ví dụ thế giới thực như thế nào điều này có thể hữu ích là cho người dùng khả năng mở rộng cho các trò chơi. Hầu hết các trò chơi hiện đại cho phép một số loại người dùng mở rộng thông qua ngôn ngữ kịch bản, có thể tương đối chậm hoặc thông qua các DLL được biên dịch yêu cầu nền tảng phát triển (và kiến ​​thức để sử dụng nó). Điều này sẽ cho phép người dùng viết các phần mở rộng cho trò chơi bằng C#, sẽ được biên dịch bởi trò chơi khi chạy, mà không yêu cầu người dùng tự biên dịch nó. Nó cũng sẽ cho phép thử nghiệm các ý tưởng mới bằng cách nhập, ví dụ, mã C# trong cửa sổ bảng điều khiển trong trò chơi mà không phải khởi động lại trò chơi cho từng thay đổi nhỏ. Hiện tại, loại điều này chỉ thực sự có thể thực hiện với các ngôn ngữ kịch bản được dịch nhúng.

+1

Không chỉ trò chơi. Nhiều logic kinh doanh có thể được nhúng dưới dạng mã C# thô và nếu bạn muốn bạn có thể thay đổi chúng khi chạy. –

2

Tôi nghĩ một ví dụ khác là bảo vệ bản sao. Bạn có thể có một đoạn mã duy nhất trên máy của mình, được tạo khi cài đặt để buộc chương trình vào ID CPU.

Giả sử tôi sử dụng số sê-ri làm thông số trong tính toán thuế. Một bản sao của chương trình rất dễ làm và hoàn toàn vô dụng.

0

Ngoài ra, chương trình viết cũng có chức năng tương tự với Linqpad thực sự dễ dàng.

Một trường hợp sử dụng khác có thể được thực hiện để sử dụng khối mã nguồn được lưu trữ trong cơ sở dữ liệu và được gọi dựa trên cấu hình, tương tự như cách Workflow Foundation có thể được gọi ngay bây giờ. Điều này có thể giúp tự động hóa quy trình làm việc cho các CRM, ERP và các ứng dụng kho dữ liệu khác (mặc dù nếu lạm dụng điều này sẽ tạo thành một antipatern sử thi).