Rambler's Top100 Service калинин.ru / программирование / c и c++ /  << 23.07.00 >>

Новый язык программирования от Microsoft: C#

Честно говоря, когда я первый раз об этом услышал, я подумал что это чья-то дурацкая шутка. Но нет, действительно, фирма Microsoft создала новый язык программирования, сделанный на основе C и C++ (и, как выяснится позже, Java), который она назвала C# (C sharp).

  Цитата
 

C# is a modern, object-oriented language that enables programmers to quickly build a wide range of applications for the new Microsoft .NET platform, which provides tools and services that fully exploit both computing and communications.

Очень оригинально, не правда ли? Что бы реально посмотреть язык программирования, я возьму программу "Hello, world!" из C# Language Reference:

using System;
class Hello
{
   static void Main() {
      Console.WriteLine("Hello, world");
   }
}
    

Все-таки, что-то это очень сильно напоминает... я так думаю, что читатель этих строк уже догадался, что. Да --- Java, и никаких сомнений. Итак, что имеется в наличии:

  • Убрали селектор ->, впрочем это, возможно и правильно: и "точка" и "стрелка" выполняют, в принципе, одни и те же функции с точки зрения ООП, так что в этом есть намеки на концептуальность. В принципе, это стало возможным благодаря тому, что в C# есть типы "значения" (такие как, int, char, структуры и перечисления) и типы "ссылки", которыми являются объекты классов, массивы.
  • Точно так же, как и в Java, перенесли метод main внутрь класса.
  • Точно так же, как и в Java, в программах на C# теперь нет необходимости в декларациях без дефиниций, т.е. компилятор многопроходный.
  • Конечно же, не смогли обойтись без автоматического сборщика мусора, так что в C#, так же как и в Java, не требуется заботиться об удалении памяти из-под объектов. Тем не менее, введена такая возможность, под названием "unsafe code", используя которую можно работать с указателями напрямую.
  • Появился тип object с понятными последствиями: все типы (включая типы "значения"!) являются потомками object.
  • Между bool и integer нет кастинга по умолчанию. Тип char --- это Unicode символ (так же, как и в Java).
  • Есть поддержка настоящих многомерных массивов (а не массивов массивов).
  • В отличе от Java, в C# выжил оператор goto.
  • Появился оригинальный оператор foreach:
    static void WriteList(ArrayList list) {
     foreach (object o in list)
      Console.WriteLine(o);      
    }
    
    который позволяет обойти контейнер.
  • Есть еще два интересных оператора: checked и unchecked. Они позволяют выполнять арифметические операции с проверкой на переполнение и без него.
  • Поддержка многопоточности при помощи оператора lock.
  • Отсутствует множественное наследование --- вместо него, как и в Java, введена поддержка интерфейсов. Кстати сказать, структуры теперь совсем не тоже самое, что и классы. В частности, структуры не могут быть наследованы.
  • Введена поддержка свойств (property). Совсем не понимаю, почему это так популярно?
  • На языковом уровне введена поддержка отклика на события.
  • Введены определяемые пользоваетлями аттрибуты, насколько я понимаю, для поддержки систем автодокументации.

Принципиальное, на мой взгляд, отличие от Java --- наличие компилятора в машинный код. То есть, можно предположить, что программы на C# будут выполняться несколько быстрее, чем написанные на Java (я знаю о том, что в GNU Compiler Collection входит компилятор Java, но это немного не то).

Вообще, можно говорить о том, что Microsoft учла традиционные нарекания в сторону Java в своем новом языке. Например, оставлена от C++ перегрузка операторов.

Компания Microsoft утверждает, что создала язык для написания переносимых web-приложений и пытается всячески показать свою собственнную активность в этом направлении. В частности, компания Microsoft направила запрос на стандартизацю C#.

В принципе, понятно, зачем все это нужно. Компании Microsoft, несомненно, понадобился свой язык программирования такого же класса, как и Java. Пускать же Java к себе в Microsoft никто не собирался, вот и получился C#. Понятно, что в данном случае язык программирования сам по себе представляет достаточно малую ценность, потому что Java хороша своей переносимостью, а переносимость ей обеспечивает мощная и обширная стандартная библиотека, используя которую нет необходимости вызывать какие-то системно- или аппаратно-зависимые куски кода. Поэтому на текущий момент ничего определенного сказать о судьбе C# нельзя --- хотя бы потому, что у него пока что нет подобной библиотеки.

Тем не менее, в ближайшие несколько лет будет очень интересно следить за развитием C# и Java. В принципе, еще недавно казалось, что уже невозможно вытеснить Java из своей ниши инструмента для относительно простого создания переносимых приложений, но вот, Microsoft решилась на эту попытку. Учитывая то, что в свое время было очевидно главенство Netscape на рынке броузеров, ожидать можно всего.

Резюме

Конечно же, ожидать того, что прямо сейчас C# наберет какую-то популярность достаточно глупо. Во-первых, пока что этот компилятор входит только в MS Developer Studio 2000, которой еще нет, и не факт, что владельцы Developer Studio 98 будут обрадованы тому, что им придется покупать DevStudio 2000 для работы с новым языком программирования. Во-вторых, Java существует уже достаочно долго, что бы вокруг нее образовался достаточно сильный конгломерат заинтересованных в ее благополучии фирм и компании Microsoft будет очень сложно что-то изменить в этом. В-третьих, ничего не понятно с переносимостью приложений, написанных на этом языке программирования --- ведь кроме заявлений MS больше ничего нет. Я обязательно попытаюсь попробовать компилятор C# как только он попадет ко мне в руки, но пока что я со скептицизмом отношусь к подобным заявлениям.


Версия для печати


  Ссылки по теме:
http://msdn.microsoft.com/vstu
   C# Introduction and Overview --- страничка на MSDN.
http://msdn.microsoft.com/libr
   C# Reference --- предварительная документация.
  Рядом в разделе:
За что я не люблю C++ Builder (26.07.00)
   Сначала оговорюсь, что в данной статье я буду рассматривать C++ Builder именно как "builder", т.е. программный инструмент класса RAD (Rapid Application...   >>>>
STLport 4.0 (20.07.00)
   14 июля 2000 года наконец-то вышла новая версия библиотеки 4.0. Для тех, кто еще не в курсе, что это такое, объясняю:...   >>>>
  Рядом по дате:
Так о чем же рассказать на собственной страничке? (23.07.00)
   Недавно натолкнулся на следующую страничку (она находится ), на которой расположен текст следующего содержания (скопирован без изменений): Меня зовут Мгер.Я живу...   >>>>
www.redactor.ru, тексты в Интернете: опыт критического анализа (22.07.00)
   Вот, наконец-то, сайт, в котором пересеклось забавное и поучительное. Правда, забавное оно тоже как-то странно: начинаешь немного "забавляться", как вдруг вспоминаешь:...   >>>>
  Содержание:
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
   C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Просто так
Студенческое
Туризм
  Байки
Фотографии
Комментарии
   Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Благодарности
Форум
Хронология
 
  В этом разделе:
Простой, но полезный аллокатор памяти (18.02.03)
   Эта заметка --- продолжение "Postfix изнутри" в том смысле, что в качестве примера опять берется postfix. Но если в прошлый раз...   >>>>
C или C++? (09.07.01)
   Существуют два диаметрально противоположенных, но одинаково распространенных мнения, которые можно выразить как "C++ это C с классами" и "C++ и C...   >>>>
Религия и goto (14.04.01)
   Начнем несколько издалека. В программировании существует тенденция к алгоритмизации самого процесса программирования. То есть, выведение некоторых универсальных правил, использование которых в...   >>>>
ploticus (16.10.00)
   Есть такая программа, предназначенная для создания графиков различных видов из командной строки, называется ploticus. Программа сама по себе достаточно удобная ---...   >>>>
Шаманство, или ошибки работы с памятью (25.09.00)
   Когда программа становится внушительной по своему содержанию (то есть, не по количеству строчек, а по непонятности внутренних связей), то ее поведение...   >>>>
Библиотека консорциума W3, libwww (20.09.00)
   Популярный нынче термин "веб-программирование" обычно подразумевает под собой программирование, в лучшем случае, на perl, в худшем --- на PHP, в совсем...   >>>>
Инварианты внутри программы (18.09.00)
   Вы когда-нибудь задумывались, над тем, как вы пишите программы? Если нет, то, я думаю, сегодняшняя заметка будет вам полезна. Итак, как...   >>>>
Содержание раздела полностью...
   Примерно в тоже время
Так о чем же рассказать на собственной страничке? (23.07.00)
   Недавно натолкнулся на следующую страничку (она находится ), на которой расположен текст следующего содержания (скопирован без изменений): Меня зовут Мгер.Я живу...   >>>>
www.redactor.ru, тексты в Интернете: опыт критического анализа (22.07.00)
   Вот, наконец-то, сайт, в котором пересеклось забавное и поучительное. Правда, забавное оно тоже как-то странно: начинаешь немного "забавляться", как вдруг вспоминаешь:...   >>>>
Хронология полностью...
   Содержание
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
  C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Туризм
  Байки
Фотографии
Комментарии
  Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Студенческое
Просто так
Благодарности
Форум
Хронология
© 2000-2008, Andrey L. Kalinin
mailto:andrey@kalinin.ru
Rambler's Top100