Что такое язык первого класса .NET? - PullRequest
8 голосов
/ 25 июня 2009

Итак, я слушал Hanselminutes Podcast 158 ​​, где Джоэл Спольски упоминает, что Васаби - это язык первого класса .NET. Что это значит?

Ответы [ 8 ]

5 голосов
/ 25 июня 2009

Описание языка как первоклассного языка .NET является субъективным описанием. Он относится к языку .NET, который поддерживает все функции .NET CLR (в реальном мире, я считаю, это означает, что он поддерживает большинство функций).

Он также традиционно использовался для описания языка, который помогает формировать .NET CLR, что означает, что я сомневаюсь, что Васаби - настоящий первоклассный язык.


Обновление

Цитата из статьи , описывающей, как F # является языком .NET первого класса.

"Это означает, что F # работает в среде CLR, охватывает объектно-ориентированное программирование и обладает функциями, обеспечивающими плавную интеграцию с .NET Framework."

3 голосов
/ 25 июня 2009

«Язык первого класса .NET» не является официальным термином.

Официально язык может быть Спецификация общего языка (CLS) -совместим и, таким образом, может взаимодействовать с другими CLS-совместимыми языками.

(Примечание. Конечно, совместимость с CLS является свойством программного обеспечения , которое вы пишете, и, следовательно, вашей сборки. A Язык CLI позволит вам писать CLS-совместимый код, но не заставит вас сделать это * 1014. * Вы можете написать не-CLS-совместимую сборку в C #, например, используя неподписанные типы в своем открытом API.)

Однако, поскольку (опять же) не существует официального определения «первоклассного языка .NET», некоторые люди могут не считать, что они работают на «первоклассном» языке .NET, если они не могут использовать WPF или (завтра) Code Contracts, что явно намного сложнее, чем требование соответствия CLS.

3 голосов
/ 25 июня 2009

Насколько я знаю, не существует четкого определения «первоклассного языка .NET». Я думаю, что это просто относится к тем языкам, которые поддерживают большинство функций, предлагаемых CLR.

2 голосов
/ 26 июня 2009

Как уже было упомянуто пару раз, официального определения не существует, но язык .NET первого класса - это, по сути, язык, который может создавать CLS-совместимые сборки, а также использовать их.

Если вам скучно и вы хотите прочитать спецификации CLI ECMA , вы обнаружите, что они различают CLS Frameworks (CLS-совместимые сборки), CLS Consumers (компиляторы, которые могут использовать CLS Frameworks) и CLS Extenders (компиляторы, которые могут создавать CLS Frameworks).

В спецификации CLI говорят на языке .NET 1-го класса, поэтому язык, компилятор которого может выступать в качестве потребителя CLS и расширителя CLS.

1 голос
/ 25 июня 2009

часть из ILAsm. Язык .NET не поддерживает все функции CLR

В моей книге язык первого класса - это язык, который компилируется в IL и создает проверяемый код, т.е. вы можете разобрать сборку обратно в исходный код, например, используя Reflector ("round-tripping").

1 голос
/ 25 июня 2009

Это означает, что он полностью поддерживается .net и наоборот поддерживает все функции .nets. На это нет никаких ограничений. Все, что может быть сделано на одном «языке первого класса», может быть одинаково хорошо сделано и на другом.

C #, VB.net, IronPython и т. Д. - все языки первого класса. XAML однако нет. Он используется в некоторых частях .net, но вы определенно не могли бы в нем все делать.

0 голосов
/ 25 июня 2009

Я думаю, что в этом контексте это означало не только наличие wasabi для компилятора IL, но и поддержку Visual Studio / инструмента.

Это также может означать, что все типы и т. Д. Являются типами .Net, а не сопоставлены с объектами .Net во время компиляции?

Я полагаю, что у языка первого класса традиционно были бы все игрушки (рефлексия, генерация кода и т. Д.), Где 2-й класс мог бы компилироваться в IL, и больше ничего.

0 голосов
/ 25 июня 2009

Я бы понял, что означает "компилируется непосредственно в байт-код .NET" (а не генерирует код в C #), а также что он будет способен использовать стандартные библиотеки .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...