COMPULENTA | 29.10.03 |
Похоже, что Microsoft хочет сделать язык C# самым удобным, совершенным, быстрым, надежным. Иными словами, компания не останавливается на достигнутом и продолжает совершенствовать C#.
Как известно, C# обязан своим появлением скандалу между Sun и Microsoft по поводу несоответствия языка J++, входящего в состав MS Visual Studio 6.0 (а кажется, это было совсем недавно...), спецификациям на язык Java от фирмы Sun. В результате этих действий в следующей версии Visual Studio язык J++ был основательно переработан и представлен общественности под новым именем С#, дабы исключить всякие поводы для судебных трений с Sun.
Сейчас C# является одним из наиболее популярных среди разработчиков языков программирования, ибо сочетает в себе простоту и безопастность Java по работе с классами и огромные возможности по взаимодействию с уже написанным на многих языках программным кодом.
Сейчас уже ходят слухи, что С# version 2.0 выйдет уже в начале следующего года. В спецификации, которую удалось раскопать в залежах сайта Microsoft, описываются основные нововведения, которые разработчики увидят в новой версии.
Судя по этой спецификации, Microsoft планирует встроить в C# все полезные наработки, которые уже встречались ранее в других языках программирования, по тем или иным причинам сейчас уже позабытых или использующихся для решения узкоспециализированных задач. Как сообщается, в качестве источника полезных идей были взяты Ada и Lisp, при этом стояла непростая задача сохранить совместимость с уже наработанным для C# програмным кодом. Сообщается, что для сохранения совместимости, в С# 2.0 не появится новых ключевых слов, которые могли использоваться ранее в качестве идентификаторов переменных.
Напомню, что Ada - язык повышенной надежности, разработанный по заказу министерства обороны США. Это чисто процедурный язык программирования, в котором отсутствует даже определение класса. Язык задает очень жесткие требования к правилам оформления кода, в результате, первые версии программы, которые удается скомпилировать, с высокой вероятностью могут вообще не содержать ошибок. Lisp - язык, основу которого составляют не операции с числами, а символьные преобразования. На нем естественным образом реализуются алгоритмы искуственного интеллекта и программы для символьных решений уранений, логическое программирование и т.п. Очевидно, что языки эти совершенно разные, и при этом не имеют почти ничего общего с наиболее распространенными сегодня С, Delphi, Java и Vb.
Итак, какие же нововведения ждут нас в следующей версии C#? В вышеупомянутой спецификации подробно расписаны четыре из них:
1. Generics
Это понятие пришло из Ada, где существует понятие generic unit - настраиваемый сегмент.
В сегодняшнем С# есть одна назойливая проблема - возможность создавать массивы объектов типа object, позволяющие хранить в них вперемежку экземпляры любых классов. Это придает языку дополнительную гибкость, но при этом создается вероятность по ошибке записать в массив объект совершенно непредусмотренного заранее класса, который не может быть впоследствии правильно обработан. Особая неприятность такой ошибки заключается в том, что она не будет замечена в ходе компиляции, а может спонтанно проявиться в уже откомпилированной и, казалось бы, работающей программе.
Для решения этой проблемы в C# 2.0 появится возможность создавать типизированные структуры, классы, делегаты, интерфейсы и методы, которые могут получать на вход параметры заранее определенных типов, иначе выдавая ошибку на этапе компиляции.
2. Iterators
Итераторы - это средство, позволяющее облегчить использование оператора foreach. Оператор этот, пришедший на смену циклам, очень удобен, так как позволяет легко проделать какую-либо операцию с набором (коллекцией) объектов. Недостаток его заключается в том, что эти объекты должны содержать реализацию интерфейса IEnumerable, для чего программисту приходится самостоятельно писать реализацию трех методов, позволяющих оператору foreach перебирать все объекты из коллекции.
По сути, итератор представляют собой заготовку, призванную заменить написание этих трех методов буквально парой строчек кода.
3. Partial types
Сегодняшние классы могут достигать гигантских размеров. Нередки случаи, когда разрабатываемый класс имеет сотни методов. Даже учитывая, что описание класса хранится в одном файле, можно легко запутаться в получающихся нагромождениях кода. Отчасти эту проблему позволяют решить Case-средства, позволяя сренерировать описание интерфейса, и в дальнейшем реализовывать его. Однако описания интерфейсов в ходе работы над проектом часто меняются, что заставляет вносить изменения в уже наполовину готовый код, добавляя в работу элемент бардака.
Решить эту проблему как раз и призваны partial types ("разделяемые типы"). Стоит, например, объявить класс как partial, и вы получите возможность хранить его члены в нескольких раздельных файлах. При этом есть возможность разделить код написанный человеком и полученный в результате автоматической генерации. Поддерживается возможность раздельной комипляции элементов такого класса.
4. Anonymous methods
Безымянные методы призваны упростить механизм обработки событий и, по-видимому, способны снискать немалую популярность.
В С# вся обработка событий завязана на делегатах (delegates), заменивших привычные в С и С++ callback-функции. Например, для того чтобы нажатием кнопки на форме сложить 2+2, надо написать метод, проделывающий эти вычисления и создать делегат, который связал бы нажатие кнопки с вызовом метода. В данном случае, вся конструкция получится достаточно громоздкой, так как для выполнения одного простого арифметического действия приходится создавать лишний экземпляр объекта.
С помощью же безымянных методов все необходимые действия можно записать в одну строку, в которой мы создаем делегат и объявляем необходимый метод. По смыслу, это очень напоминает безымянные классы в Java, или вложенные (nested) типы в С#.
Так что в новой версии C# мы точно увидим много новых возможностей. Похоже, что вышеописанные новинки являются уже окончательно утвержденными, и вполне возможно, что в финальной версии спецификации C# 2.0 их список еще пополнится.
Дополнительная информация
INTERFACE Ltd. |
|