Tại sao mọi người sẽ đầu tư thời gian vào Microsoft ngay Roslyn '?


37

Tôi mới đọc qua một số sách trắng và ví dụ từ Microsoft "Roslyn" và khái niệm này có vẻ rất thú vị. Từ những gì tôi có thể nói, nó mở ra hộp đen là trình biên dịch và cung cấp một giao diện mà chúng ta có thể sử dụng để lấy thông tin và số liệu về mã được viết trong Visual Studio.

Roslyn dường như cũng có khả năng "viết mã" và biên dịch / thực thi nó một cách nhanh chóng (tương tự như CodeDom) nhưng tôi chỉ gặp phải những hạn chế sử dụng cho loại chức năng đó theo kinh nghiệm của tôi.

Trong khi yếu tố phân tích & số liệu mã là một không gian thú vị ... đó là một thứ đã có từ rất lâu và có rất nhiều nhà cung cấp đã đầu tư rất nhiều tiền vào các công cụ phân tích & tái cấu trúc mã (ví dụ ReSharper, CodeRush , nCover, v.v.) và họ làm rất tốt công việc đó!

Tại sao bất kỳ công ty nào sẽ cố gắng thực hiện một cái gì đó có thể được cung cấp với một phần chi phí thông qua việc mua giấy phép cho một trong những công cụ hiện có?

Có lẽ tôi đã bỏ lỡ một số chức năng chính của dự án Roslyn đặt nó bên ngoài miền của các công cụ được đề cập ...


4
Điểm chính của Roslyn là Microsoft thực tập nhiều hơn - làm cho trình biên dịch C # được quản lý mở rộng dễ dàng. Bằng cách này, nhóm có thể dễ dàng thực hiện và thử các tính năng ngôn ngữ mới. Ngoài ra thực hiện các thuật toán tối ưu hóa mới sẽ trở nên dễ dàng hơn.
JustAntherUserYouMayKnowOrNot

1
Có Penprint - Tôi nghi ngờ bạn có thể đã bỏ lỡ một vài điều. Bạn đã xem cuộc phỏng vấn của Dustin Campbell trên Channel9 chưa? channel9.msdn.com/Events/Ch9Live/ khăn
James Snell

3
Đây là rủi ro phát triển các tiện ích bổ sung thành công / có lợi nhuận cho các sản phẩm của Microsoft, họ có thể đưa nó vào phiên bản tiếp theo.
JeffO

10
Ngoài ra, bạn có thể chắc chắn rằng những kẻ đứng sau ReSharper đang làm ướt mình với những suy nghĩ về chức năng bổ sung mà họ có thể cắm vào. Vâng, họ đã viết một trình phân tích / phân tích C #, nhưng chi phí cho mỗi tính năng sẽ giảm đáng kể nếu họ có thể tận dụng động cơ MS C # thực tế.
Nhị phân nhị phân

2
Kiểm tra scriptcs để sử dụng Roslyn thú vị. github.com/scriptcs/scriptcs
Ashley Davis

Câu trả lời:


53

Roslyn dường như cũng có khả năng "viết mã" và biên dịch / thực thi nó một cách nhanh chóng (tương tự như CodeDom) nhưng tôi chỉ gặp phải những hạn chế sử dụng cho loại chức năng đó theo kinh nghiệm của tôi.

Biên soạn và thực hiện nhanh chóng là lợi ích chính của Roslyn. Tôi nghĩ rằng bạn có thể đánh giá thấp lợi ích của tính năng này bởi vì bạn chưa bao giờ gặp trường hợp sử dụng trong trải nghiệm của bạn khi nó thực sự tỏa sáng. Và điều này có ý nghĩa; nhu cầu biên dịch động có lẽ là một tính năng thích hợp, nhưng việc cung cấp nó cho một số ứng dụng mạnh mẽ sẽ khó khăn hơn nhiều nếu không có nó.

Dưới đây là một vài ví dụ ngoài đỉnh đầu của tôi, nơi biên dịch động sẽ khá hữu ích. Có nhiều cách khác để thực hiện tất cả những điều này, nhưng Roslyn làm cho chúng dễ dàng hơn.

  • Có các tệp plugin được tải trong thời gian chạy, được biên dịch và được bao gồm trong quá trình thực thi ứng dụng "cha mẹ".
  • Tạo DSL sau đó được dịch sang C # khi chạy và được biên dịch bằng Roslyn.
  • Tạo một ứng dụng định hướng lập trình viên lấy C #, phân tích nó, dịch nó, v.v.
  • So sánh hai đoạn mã cho sự khác biệt của chúng sau khi biên dịch, trái ngược với sự khác biệt chỉ "bề mặt" như khoảng trắng. Điều này được gọi là khác biệt ngữ nghĩa .

Vì vậy, để tóm tắt, bạn có thể không bao giờ tìm thấy việc sử dụng cho Roslyn, tùy thuộc vào phần mềm bạn dành thời gian để viết. Tuy nhiên, có rất nhiều trường hợp sử dụng mà Roslyn mang lại rất nhiều cho bàn. Không có công cụ nào bạn đề cập cung cấp tính năng này. Họ cũng không thể dựa trên kiến ​​trúc và mục đích của họ.


+1 cho khác biệt về ngữ nghĩa. Đối với mối quan tâm ở đây, một liên kết đến một sản phẩm thương mại đang được phát triển sử dụng Roslyn cho khác biệt về ngữ nghĩa. (Tiết lộ đầy đủ - Tôi không có kết nối với họ. Tôi chỉ thấy sản phẩm của họ được đề cập trên blog của Jon Skeet )
MarkJ

@RationalGeek - Cảm ơn các ví dụ, tôi đã không xem xét ví dụ về tuyến DSL => C # ... Tôi có thể tưởng tượng một vài kịch bản có thể rất mạnh trong các ứng dụng kinh doanh. Rất nhiều ví dụ khác mà tôi đã thấy (không chỉ của bạn) trùng lặp rất nhiều với các công cụ tái cấu trúc mà tôi đã đề cập trước đây. Một phần khác trong câu hỏi ban đầu của tôi là tại sao một người nào đó đầu tư tiền vào việc phát triển các công cụ để thực hiện phân tích này khi có một số xuất sắc được đưa ra trước với một phần chi phí ... nhưng tôi cho rằng luôn có chỗ cho người khác (hy vọng tốt hơn) bộ công cụ! :)
Richard Hooper

@Penprint luôn có chỗ cho các công cụ dành cho nhà phát triển mới ... :-)
RationalGeek

1
Semantic diff không chỉ dành cho mục đích biên dịch. Mỗi hệ thống kiểm soát phiên bản cần một khác biệt, và hầu hết sử dụng một khác biệt ngu ngốc. Chỉ cần hoán đổi 2 chức năng và xem mớ hỗn độn được tạo ra, khi diff nghĩ rằng nó có thể khớp với một vài (và {.
MSalters

Đây là một vấn đề lớn: tự động biên dịch lại khi viết ứng dụng ASP.NET mà không cần phải xây dựng lại và triển khai lại ứng dụng web. Cuối cùng được công bố trong ASP.NET vNext, nó hoàn toàn sẽ làm việc trong C # giống như một ngôn ngữ kịch bản ... ngoại trừ nó là cả hai loại an toàn và biểu diễn. Tôi thấy đây là sự khởi đầu của phương pháp chung này, cuối cùng sẽ tìm đường vào các ứng dụng khách giàu (di động, máy tính để bàn) để bạn có thể thay đổi mã của mình khi chạy. Nó dễ dàng hơn nhiều với các ứng dụng web vì theo định nghĩa, mỗi yêu cầu là không trạng thái - nhưng theo thời gian, nó cũng sẽ đi vào các kiến ​​trúc ứng dụng khác.
Marchy

12

Tôi chắc rằng các công ty cung cấp dụng cụ (ví dụ: JetBrains *) rất quan tâm đến Roslyn. Microsoft muốn làm cho nó dễ dàng để tạo ra công cụ, bởi vì công cụ tốt khuyến khích việc sử dụng hệ sinh thái của Microsoft.

* Theo blog JetBrains ( mục này ), JetBrians đã thông báo rằng họ sẽ không sử dụng Roslyn. Tuy nhiên, tôi tưởng tượng rằng bất kỳ đối thủ cạnh tranh mới nào với JetBrains (những người không có cơ sở mã sẵn có để làm việc) sẽ sử dụng Roslyn; nó cho họ một khởi đầu.

Câu hỏi 6 trong 10 câu hỏi, 10 câu trả lời trên Roslyn :

6: một số sử dụng thực tế cho Roslyn là gì? Làm thế nào nó sẽ giúp tôi như một nhà phát triển?

Một trong những ứng dụng đầu tiên của Roslyn xuất hiện trong tâm trí là công cụ quy tắc kinh doanh. Trước Roslyn, việc đánh giá các macro người dùng thường liên quan đến việc triển khai Visual Basic for Application (VBA), gọi ra DLR bằng các biểu thức Ruby hoặc trình bày ra trình biên dịch dòng lệnh bằng mã Visual Basic hoặc C # được tạo động và nhận được kết quả chạy mã đó Những phương pháp này ít hơn lý tưởng.

Roslyn sẽ dễ dàng cho phép biên dịch động và thực thi mã C # và (cuối cùng) Visual Basic với chức năng Evalu (), như bài viết của Eric Vogel đã trình bày "Sử dụng API Roslyn Scripting trong C #". Các macro người dùng được viết bằng cùng ngôn ngữ với ứng dụng sẽ giúp các nhà phát triển hỗ trợ các macro người dùng đại diện cho các quy tắc kinh doanh dễ dàng hơn.

Tái cấu trúc mã trở nên dễ dàng hơn nhiều với Roslyn. Trước Roslyn, các nhà phát triển của các công cụ như DevExpress CodeRush và Refactor Pro và JetBrains ReSharper đã phải tạo lại nhiều hoạt động của trình biên dịch làm nền tảng cho các sản phẩm của họ. Với Roslyn, các nhà phát triển tái cấu trúc có thể trực tiếp tận dụng các khả năng của trình biên dịch hiện có. Tôi có thể tưởng tượng sự xuất hiện của các gói NuGet để cài đặt các quy tắc tái cấu trúc riêng lẻ một khi Roslyn được phổ biến rộng rãi.


4
"Các macro người dùng được viết bằng cùng ngôn ngữ với ứng dụng sẽ giúp các nhà phát triển dễ dàng hơn trong việc hỗ trợ các macro người dùng đại diện cho các quy tắc kinh doanh." - cái gì có thể đi sai!
gbjbaanb

10

Tôi háo hức chờ đợi ngày mà tất cả các trình biên dịch thường xuyên cung cấp Trình biên dịch dưới dạng Dịch vụ (CaaS). Chúng ta cần ngừng suy nghĩ rằng trình biên dịch chỉ phát ra mã liên kết trước và bắt đầu nghĩ rằng trình biên dịch phát ra các cây có thể chuyển đổi thành nhiều mục tiêu. Tất cả các trình biên dịch nên có một tính năng để phát ra cây và tùy chọn JSON / XML. Đầu ra sau đó có thể được chuyển đổi thành nhiều loại mục tiêu như ngôn ngữ được làm đẹp, nguồn C, IL, nhị phân IL, Java, Javascript, LLVM, thực thi PIC và thậm chí mã liên kết trước.

Tôi viết trình biên dịch để kiếm sống. Khách hàng của tôi được bán trên CaaS vì nó mở ra cơ hội cho tính linh hoạt, tính di động và phân tích tuyệt vời.

Tôi thực sự thất vọng vì Microsoft đã không triển khai CaaS từ lâu. Ví dụ, nó có thể đã được sử dụng làm đường dẫn di chuyển cho VB6 sang một thứ khác, hoặc .Net sang C ++.


1

Câu trả lời đơn giản cho lý do tại sao MSFT đầu tư vào Roslyn là cơ sở mã hiện tại của họ cho trình biên dịch C # hiện có 5 phiên bản - 11 năm nay. Đó là một thời gian dài cho bất kỳ cơ sở mã hóa nào vẫn có thể quản lý được. Thêm vào đó, vì họ đang viết lại, họ đã quyết định đầu tư vào việc đó để tất cả các phần bên trong của nó được hiển thị dưới dạng API.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.