Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой язык программирования выбрать 
:(
    Опции темы
Medved
Дата 13.1.2006, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154



Идея данной заметки родилась при чтении многочисленных обсуждений «Какой язык из .NET лучше использовать или начать изучать».

Сам автор по роду своей деятельности сталкивался с достаточно большим количеством языков. Некоторые вызывали приятные ощущение, некоторые вызывали сильное неприятие. Программисты – все люди, разные, со своими пристрастиями и предпочтениями. Кроме того разные задачи требуют разных языков – в одном случае может быть использован алгоритмический язык типа С++, для других – функциональные языки (автор не сталкивался с такими, но идеология таких языков по моему мнению очень подходит к некоторым задачам).
Поэтому хотелось бы заострить внимание программистов, которые еще в процессе выбора языка, на следующей идее: 
«Каждая задача, кроме того, что имеет всегда не одно решение, такое решение может быть реализовано на нескольких языках программирования»

В принципе взаимодействие разных языков уже существует не один год. Все мы вызываем библиотечные функции, подгружаем динамические библиотеки, в которые мы передаем какие-то параметры и получаем оттуда ответы. Для вызова такого рода функций нам необходимо только правильно передать данные в функцию и правильно интерпретировать ответ. Более поздний вид взаимодействия – Common Object Model (COM/DCOM). Здесь  та же ситуация. Вы могли писать на разных языках и даже определять свои типы. Надо было только объяснить, как работать с этим типом клиенту и серверу. 

Как видите самое важное – ЭТО ДОГОВОРИТСЯ О ТИПАХ.

Так вот, .NET предлагает ту же идею, только работать можно не просто с числами и строками. В рамках CLR (Смотри заметку «Что такое .NET») Вы можете работать с более сложными типами, которые являются уже классами и объектами.
Все возможные варианты записи типов определяются Common Type System (CTS) – «Общей системой типов». Данная система является системой типов, в рамках которой работает MSIL (Смотри заметку «Что такое .NET»). Т.е. MSIL поддерживает CTS в полном объеме. Если Вы научитесь работать напрямую с MSIL, то Вам будет доступен полный объем всех вариантов определения типов данных.

Автор позволит себе небольшой экскурс в CTS. Итак, CTS определяет все возможные варианты описания типов данных. У каждого класса может быть описано 0 и более членов, которые могут быть следующие: 
Поле – описывает какую-то часть состояния объекта
Метод – функция, которая определяет какое-то поведение объекта
Свойство – для вызывающей стороны это кажется полем, но для вызываемой стороны есть возможность проверить какие-либо условия, т.к. это для нее вызов метода.
Событие – обеспечивает механизм уведомлений объектов.

Кроме этого CTS определяет правила для видимости объектов и доступа к их членам. Т.е. не всем и не всегда можно получить доступ к объекту и к его членам. CTS определяет следующие варианты доступа:
Закрытый – метод может быть вызван только внутри самого типа. (Для C# это private)
Родовой – метод может быть вызван внутри класса и всеми производными классами (Для C# это protected)
Сборочный  – метод может быть вызван каким угодно объектом внутри одной сборки. О сборках мы погорим в другой раз. Пока думайте о сборке как об одном проекте на Visual Studio. (Для C# это internal)
Открытый – метод доступен любому коду из любой сборки. (Для C# это public)
Родовой или сборочный – метод может быть вызван любым кодом из той же сборки и любым производным типом (наследником) из любой сборки. (Для C# это protected internal)
Родовой и сборочный – метод может быть вызван ТОЛЬКО производным типом и ТОЛЬКО в той же сборке. И вот почему я поставил этот вариант в конце. В C# нет такого модификатора.

Как видите, даже такой приличный язык, как C#, не может обеспечить полное соответствие CTS. Visual Basic еще беднее: у него, например, нет системы перегрузки операторов, которая есть в C#. Что же говорить о (IMHO) еще более простых языках, для которых, тем не менее, уже сделаны компиляторы для .NET (Fortran, Perl, Python).

Оказывается, что Microsoft определила как максимально возможный набор типов (CTS), так и минимальный набор типов, который обеспечит взаимодействие разных языков – Common Language Specification (CLS) «Общая языковая спецификация».

Таким образом, для того, чтобы обеспечить взаимодействие модулей на разных языках внутри Вашего проекта необходимо, чтобы все Ваши модули создавали описания типов в соответствии с CLS. В этом случае Вам гарантируется, что все Ваши модули будут прекрасно взаимодействовать между собой. Полный набор тех правил, которым Вы должны следовать в этом случае, приведен в MSDN – «Cross-Language Interoperability».
Например, для того же C# существует специальная опция, которая будучи установлена, дает команду компилятору проверять совместимость описания типов со спецификацией CLS. Если Ваше описание совместимо с CLS, то с Вашей библиотекой сможет взаимодействовать любое другое приложение под .NET написанное на ЛЮБОМ другом языке. Если нет – Вы получите предупреждение. Такое предупреждение говорит только о том, что Вашей библиотекой не смогут воспользоваться модули, написанные на других языках. Если Вас вполне устраивает какой-либо один язык, то Вы можете использовать его, не обращая внимания на такое предупреждение.

Т.к. CLS это минимальный набор, то практически все языки для .NET не только поддерживают данную спецификацию, но и несколько расширяют ее. Само собой расширение не может выходить за рамки CST.

Если графически показать отношение между CTS, CLS и языками под .NET, то получится приблизительно вот такая картинка (можно посмотреть в самом низу)

Читатель наверно подумал «Ну так и что? Где же ответ на мой вопрос о выборе языка?»
На этот вопрос мне представляется самым разумным ответить следующим образом:
- Исходите из требования Вашей задачи. Кроме Вас самих никто не сможет лучше решить, на каком языке выполнять приложение. Наверняка у Вас есть какие-то предпочтения. Скорее всего в Вашей команде работают разные люди и все они предпочитают разные языки. Автор знает немало очень приличных программистов, которые работают на Visual Basic и создают очень высокопрофессиональные приложения. Тем более, что если рассматривать приложения клиент-сервер, например, для складского учета, то в такого рода задачах клиент является достаточно простым приложением, для которого в 95% случаев вполне достаточно использовать набор библиотечных компонентов, которые предоставляет .NET.
Если же Вы только начинаете изучение .NET, то мой совет – посмотрите все языки. Их там ведь не так уж много – Basic, C# и J#. Для просмотра спецификации языка достаточно максимум недели. Потратьте месяц на ознакомление, а потом начинайте изучать тот язык, который больше всего Вам нравится.

Как Вы сами скорее всего догадались, библиотека классов для .NET отвечает требования CLS и может быть использована в программах на любом языке.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.