Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в ЖЖ Хакер в Twitter
Журналы Новости Форум Видео Life Xakep
Bugtrack Статьи Блог Поиск English
Конкурс Radmin КОНКУРС RADMIN
09.03.2010

Правильно ответь на предлагаемые вопросы и выиграй лицензию!...
Конкурс Jetbalance: полноценный Hi-Fi КОНКУРС JETBALANCE: ПОЛНОЦЕННЫЙ HI-FI
08.03.2010

Задача нашего конкурса - нарисовать как работает твой звук...

C мёртв

Обучение программированию с помощью Си эквивалентно развращению малолетних
А.А.Берс

 

Sмена парадигмы

Будущее всегда наступает медленно и незримо. Подкрадывается, словно ниндзя, подступает на мягких лапках. Нельзя проснуться однажды утром и осознать – вот он, технотронный скачок, ведь вместо чашки кофе я возьму шприц и вколю прямо в сердце смесь таурина с чистым адреналином. Человек сильно ограничен в понимании окружающего мира, и пусть он хоть трижды огнекрылая валькирия компьютерного андеграунда и неистовый апологет духа робоцивилизации, смену технопарадигмы ему не заметить.

Даже самым прогрессивным из нас свойственен консерватизм и любые, порой незначительные изменения к лучшему мы готовы встретить в штыки. Особо мы недолюбливаем, когда мир меняется не вокруг нас, а внутри, в собственном сознании. Многие люди мнят себя глубоко законспирированными «живыми воплощениями бога» (в простонародье: экспертами), которым трудно, подчас невозможно, выкинуть из головы накопленные знания и опыт и начать всё заново.

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

Cага о трёх яzыках

«На каком языке программировать?» - едва ли не ключевой вопрос в IT-сфере за последние 30 лет, особенно актуальный для российской консервативной индустрии программирования. «Правильный» язык должен максимально способствовать «техничному» программированию, помогать развивать хороший стиль и т.п. Определенные вещи «язык адекватного программирования» должен и запрещать (например, оператор безусловного перехода), а другие гарантировать (сокращенное вычисление логических выражений для грамотной организации циклов).

В 1970 г. Никлаус Вирт опубликовал свой первый язык, спроектированный именно с учетом весьма жестких требований, широко известный язык Паскаль. После изобретения Паскаля понимание технологий программирования углубилось (модульные и объектные методы). Сам Вирт учёл это последовательно в двух языках, прямых потомках Паскаля, - это Модула-2 (1980) и Оберон (1988). Модула-2, появившаяся одновременно с другим паскалеобразным языком Ада, разработанным по заказу министерства обороны США, но более простая и эффективная, естественным образом пришла на смену Паскалю в российской космической и оборонной индустрии.

Оберон - наиболее совершенный наследник старого Паскаля, спроектированный с тщательнейшим учетом требований эффективной профессиональной работы. Однако научно-исследовательские разработки Вирта по углублению и расширению возможностей языков были погребены жёсткой маркетинговой политикой фирмы Борланд, производителя Турбо Паскаля. Поэтому часть программистов ушла с Турбо Паскаля на более «современный», «настоящий», «промышленный» продукт фирмы Борланд - Дельфи. Система Дельфи, однако, основана на версии Паскаля, в которую было бездумно добавлено множество модных наворотов, резко усложнивших язык. Для сравнения: язык Оберон, в который Вирт также ввёл ключевые элементы объектно-ориентированного программирования, сравнительно с Паскалем и Модулой-2 выглядит значительно проще, а не сложнее старого Паскаля. Но Оберон качественно мощнее «дельфийского» Паскаля, несмотря на всю сложность последнего (благодаря механизму автоматического управления памятью, до Оберона остававшегося прерогативой интерпретируемых языков). На будущее заметим, что Оберон существует в нескольких мало отличающихся вариантах, одному из которых ученики Вирта дали название Компонентный Паскаль, чтобы подчеркнуть близость и прямую преемственность со старым Паскалем.

В самой индустрии ПО наибольшую популярность стали приобретать проекты Java и C#, сделанные, хотя и на другой синтаксической основе, но под сильнейшим влиянием именно Оберона. Можно сказать, что индустрия ПО под давлением объективной реальности сумела лучше разобраться в глубинной природе процесса создания ПО, чем программисты, соблазнившиеся поверхностной синтаксической преемственностью «дельфийского» Паскаля с первоначальным вариантом языка.

Тирания мозга веrсии С

Уход в «дельфийский» Паскаль вместо «правильного» Оберона - это лишь одна сторона проблемы программирования. В хаосе последних 10-15 лет проявилась ещё более тревожная и опасная тенденция: распространение C-образных языков.

В середине 1970-х была создана и в дальнейшем широко распространилась в разных вариациях (в т.ч. знаменитый Linux) весьма мощная операционная система Unix. Вместе с ней в мир программирования «въехал» и получил распространение язык C, использованный для её написания. В дальнейшем на его основе был построен (как и «дельфийский» Паскаль, бездумным прямым добавлением множества новомодных, зачастую непроверенных средств) язык C++.

Язык C был сочинен (именно сочинен, т.к. проектированием это назвать нельзя) из бесхитростно проинтерпретированных практических соображений как замена ассемблеру в написании операционной системы Unix (которая сама по себе явилась, безусловно, прорывной разработкой). При создании C была проигнорирована вся накопленная к тому времени мудрость создания высоконадежных языков программирования. В результате на C легко написать совершенно нечитаемые конструкции. Приведу цитату с форума:

{Известны 10 преимуществ Паскаля перед Си:) Я приведу только одно, но самое важное:
На Си Вы можете написать:
for(;P("\n").R-;P("\ "))for(e=3DC;e-;P("_ "+(*u++/8)%2))P("| "+ (*u/4)%2);
На Паскале Вы НЕ МОЖЕТЕ такого написать.}

При таком аморфном синтаксисе программист совершенно не защищен от случайных ошибок (причем в C рассыпано и множество других «граблей»).

Было обнаружено, что плотность ошибок в больших программных текстах на языке C при прочих равных (квалификация разработчиков, объем и сложность ПО, время разработки и т.п.) в 16 раз превышает плотность ошибок в программах на наиболее совершенном потомке Паскаля BlackBox’е (об этом языке речь пойдет ниже).

Тем не менее, именно те свойства языка C, которые делают его использование источником дыр в больших программах, привели к его популярности среди незрелых киддисов от программирования, рассматривающих его как игру, соревнование, арену демонстрации собственного «интеллекта». Важно понимать, что подобные явления не являются специфичными для программирования: в филологии и детской психологии хорошо известно аналогичное явление «детского фольклора» (страшилки и т.п.), демонстрирующее устойчивость на протяжении многих десятилетий. Таким образом, можно говорить о стихийном распространении своеобразной мифологии вокруг языка C и его производных, коренящейся в естественном недостатке знаний и опыта, а также в особенностях психики юных программеров - желания самоутвердиться среди сверстников («настоящие программеры пишут на C») и т.д.

Возникновение монструозно сложного языка C++, сочиненного путем тупого добавления к C без исправления его многочисленных дефектов модных конструкций объектно-ориентированного программирования (о недостатках C++ написаны целые трактаты), только усугубило ситуацию: многие по наивности путают сложность и мощь языка, об ошибочности чего постоянно говорил Н. Вирт.

Стихийное распространение в среде юных партизан от программирования порочной мифологии, возникшей вокруг языков C/C++, имеет резоны в примитивных архетипах подростковой психологии. К этому стихийному явлению нельзя относиться пренебрежительно по следующим причинам. Во-первых, на примере программистов, учившихся на фортране еще в 1960-х г., мы видим, как долго и упорно сохраняются в зрелом возрасте эмоциональные предпочтения и привычки программистского мышления, зафиксировавшиеся в юности (это явление отражено в старом анекдоте: «Пожилому программисту требуется домработница, говорящая на фортране»). Обучать современным эффективным методам программистов с уже сложившимися привычками почти невозможно, и такие программисты постоянно «тащат» в серьезные проекты эти негодные инструменты. Во-вторых, масса фанатов C/C++ создает стадный эффект: с одной стороны, на него ориентируются коммерческие издательства (которые, как показывает опыт, функционируют как мощный усилитель любого мракобесия, если только находится достаточно покупателей; напомним, что изначально потребность знать C была создана распространением операционной системы Unix, а теперь и Linux). С другой стороны, новички-самоучки (коих множество) не имеют другого ориентира, кроме правила «иди за толпой». Наконец, менеджеры под давлением сиюминутных обстоятельств вынуждены ориентироваться на «предложение» рынка рабочей силы. Возникает порочный замкнутый круг, который разрывается только в относительно специфических классах приложений (встроенные системы управления и т.п.), где в игру вступает неумолимая объективная реальность, разрушающая мифологию. В-третьих (и это самое главное), продолжающий расти массив программ, написанных на C/C++, есть постоянный источник проблем - от потерь времени пользователей (современные версии Windows продолжают регулярно падать, как и 15 лет назад, хотя и научились лучше сохранять работу), до дыр безопасности, связанных с дефектами программ (переполнение буфера, утечки памяти и др.). Дефекты, порожденные использованием таких опасных языков программирования, как C/C++, очень трудно устранять.

{В августе 2001 г. вице-президент Microsoft Джим Олчин объявил во время доклада на открытии конференции Intel Developers Forum в Сан Хосе, что в новой операционной системе Windows XP все возможные проблемы из разряда переполнение буфера были устранены посредством специального анализа исходных текстов на предмет безопасности (security audit). Но в декабре того же года была найдена «дыра» в одной из программ в составе Windows XP (в программах поддержки стандарта подключения внешних устройств Universal Plug and Play), причем, дыра оказалась именно из категории «переполнение буфера».}

The stanд…

Вообще, вся ситуация здесь выглядит совершеннейшим абсурдом: то, чего можно без труда добиться просто выбором качественного и простого языка программирования, решается... невообразимо сложным и дорогостоящим способом, а главной причиной, в конечном счете, оказывается умственная инерция программистов, в начале карьеры подвергшихся «заражению холерой C». Отсюда понятно, почему серьезные специалисты употребляют такие сильные выражения как «развращение малолетних», «интеллектуальная зараза» и т.п., говоря о языках C/C++.

Разумеется, проблемы C/C++ ощущаются и в индустрии (не все же там, в конце концов, «программные анархисты» или менеджеры), даже несмотря на то что конкуренция здесь ослаблена из-за быстрого расширения сферы IT. Именно поэтому возник язык Java, представляющий из себя попытку сделать то, что не сумели сделать авторы C++, а именно - не просто бездумно добавить на предательски ненадежную основу C все возможные новомодные средства, но и сделать какой-то осмысленный отбор, а также перепроектировать «основание» языка, исключив коварные ловушки, которыми знаменит C. При этом сильнейшее влияние оказал виртовский Оберон (компилятор которого, по сообщению Вирта, команда создателей Java изучила в исходниках, дав ему высокую оценку за несколько лет до выпуска Java) - строгая типизация, автоматическое управление памятью, отказ от множественного наследования - фактически, это отказ от главных культовых свойств C, делающих его столь опасным («полная свобода программисту, включая свободу делать любые ошибки»). Разумеется, чтобы убедить фанатов C согласиться с таким отказом, нужен был сильный способ отвлечь их внимание, и средство для этого было найдено в анти-майкрософтовских движениях, широко распространенных в мире IT. Дорогостоящая маркетинговая кампания, в значительной степени построенная на эксплуатации этой «обманки», имела успех.

Успех маркетинга Java привлек достаточно разработчиков, чтобы преимущества Java в плане производительности из-за отказа от культовой «свободы» C моли себя проявить. Вслед за Java возник и ее «близнец» С#. Однако, оба этих языка - это, прежде всего, инструменты конкурентной борьбы соответствующих корпораций за удержание разработчиков: именно поэтому эти языки постоянно усложняются - это делает почти невозможным перенос больших массивов программных текстов на другие языки, прочно привязывая разработчиков к соответствующей платформе. Разработчики же, исходя из мифических соображений «эффективности» и т.п. и не понимая долгосрочную цену своих решений, стремятся использовать все средства, предоставляемые языком, «увязая» в ловушке.

Выход zдесь

Блэкбокс (BlackBox) - весьма удачный и наиболее популярный вариант Оберона, реализующий язык программирования Компонентный Паскаль.

Авторы Блэкбокса - небольшая группа учеников Н.Вирта, объединившаяся в компанию Oberon Microsystems Inc.. Один из них - Клеменс Шиперский - является ведущим авторитетом актуальной методологии компонентно-ориентированного программирования, в настоящее время сотрудник стратегического исследовательского подразделения Майкрософт (!). Блэкбокс доступен бесплатно и с полными исходными текстами, защищен одной из стандартных лицензий «открытого кода», аналогично системе Linux (по настоянию пользователей, Блэкбокс использует одну из стандартных лицензий SleepyCat, в которых смягчен экстремистский характер лицензии GPL). Блэкбокс представляет собой полноценную операционную среду, «погруженную» в другие операционные системы и допускающую взаимодействие с ними. В настоящее время полная версия Блэкбокса работает под MS Windows, а полноценная серверная версия работает под Linux.

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

Благодаря сочетанию эффективности, автоматического управления памятью и легкости создания специальной интерактивной графики Блэкбокс оказался весьма привлекательным для сложных научных расчетов синтетического характера («умные» численные алгоритмы, символическая алгебра большого объема, системы обработки данных и моделирования). Например, на Блэкбоксе создано ПО для расчета бортовых фазированных решеток истребителя Eurofighter; полный объем ПО - около миллиона строк. На Блэкбоксе сделана система управления крупнейшего каскада ГЭС на Амазонке (корпорация Astom Power), a также целый ряд других приложений, в т.ч. для экспериментальной и теоретической ядерной физики.

Все Обероны отличаются замечательной переносимостью, но Блэкбокс еще обеспечивает средства хорошей интеграции с операционной системой, в которую он погружен. Блэкбокс может быть поставлен и на «голое железо», а также использоваться как основа системы кросс-разработки (например, компонент Denia).

Подчеркнем, что BlackBox, хотя и аналогичен виртуальным машинам Java и .NET, но работает с эффективным компилируемым кодом. Благодаря этому программы, написанные на Компонентном Паскале в Блэкбоксе, качественно более эффективны, чем программы на Java и С#. В то же время сохраняется возможность компилировать Компонентный Паскаль как в Java, так и в MSIL (известный компилятор GPCP - Gardens Point Component Pasca).



Теги: программирование



СЛЕДУЮЩИЕ СТАТЬИ
Подслушиваем Skype: хакерский подход к резервному копированию VoIP-разговоров
Кодинг для Maemo 5: пишем Bluetooth-сканнер для Nokia N900
Delphi 2010
Геймдев для iPhone: как чужой движок помогает сделать свою игру
Упаковка сложных типов данных в Delphi
KIS 2010: версия новая, баги старые
Windows 7 для разработчика: технологические нововведения в новой ОСи
Global Positioning Trojan: следим за местоположением жертв продвинутого телефона
Термальная угроза: мифы и реальность №2
Разработка виджетов в Windows Mobile 6.5
ПРЕДЫДУЩИЕ СТАТЬИ
Создаем PE-вирус №3
Delphi 2007: первые впечатления
Создаем PE-вирус №2
Создаем PE-вирус №1
Декоративная обфускация PERL-кода: JAPH
Автоматизация оповещений Snort
Система закачки файлов, управляемая через ICQ
Периметр безопасности при помощи Bluetooth
Безыгольные Инъекторы: эксплоиты на Perl
Управление сервисами через менеджер Windows
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Регистрации на сервере не требуется, вы можете использовать гостевой доступ.
Если у вас есть форумный логин, вы можете использовать его.
Если нет, то вы можете зарегистрироваться на forum.xakep.ru
Обсуждение этой статьи на forum.xakep.ru
ВСЕ ПОСТЫ ПРОХОДЯТ ПРЕМОДЕРАЦИЮ, не ждите их мгновенного появления в списке комментариев.
Для отправки сообщения введите код, указанный на картинке
Заголовок
Сообщение

Guest Отправлено: 30.05.2007 17:55:59
RE: C мёртв
КГ/АМ Афтар ничего не смыслит в програмировании и в C/C++, говорю это как тот, кто програмирует на С (до этого в школе пробовал на Паскале, но после знакомства с С понял, что Паскаль - лажа). Афтар плохо представляет изящьность и естественность языка С. Возможность в языке строк, невозможных в других языках, - это преимущество С, посколку с помощью их можно существенно упростить кодинг и ускорить выполнение программы.
Guest Отправлено: 30.05.2007 17:59:07
RE: C мёртв
Даже мир устроен по принципу альтернативы... Чтобы получить одно, нужно отказаться от другого
Guest Отправлено: 30.05.2007 18:01:12
RE: C мёртв
Довольно интересно есть очем поспорить и послушать
интересно
постоянный подписчик журнала хакер
Guest Отправлено: 30.05.2007 18:12:18
RE: C мёртв
C жил, жив и будет жить. Руки прочь от C! :-)
Guest Отправлено: 30.05.2007 18:15:28
RE: C мёртв
Когда перешёл на C, осознал, что всё остальное - детские игрушки. Руки прочь от C!
Guest Отправлено: 30.05.2007 18:50:16
RE: C мёртв
1. Автор уподобляется пидорам-журналистам, выдумывающие заголовки погромче. Данный случай даже хуже - автор написал в заголовке откровенный бред.
2. Автор проявил некомпетентность в раскрываемом вопросе. Приведена куча неверных фактов. Автор видно не знает ни одного не C-подобного языка, кроме Java.
Guest Отправлено: 30.05.2007 18:51:20
RE: C мёртв
1. Автор уподобляется пидорам-журналистам, выдумывающие заголовки погромче. Данный случай даже хуже - автор написал в заголовке откровенный бред.
2. Автор проявил некомпетентность в раскрываемом вопросе. Приведена куча неверных фактов. Автор видно не знает ни одного не C-подобного языка, кроме Java.

// satmech
rgo Отправлено: 30.05.2007 18:52:19
RE: C мёртв
статья явно писалась со слов вирта. а он очень субъективен в данном вопросе...

у паскаля и C разные исходные положения. в паскале имеют место быть ограничения синтаксиса, которые введены специально, чтобы программисту надо было специально выпендриваться чтобы совершить определённого рода ошибку. в C же, идея в том, чтобы писать было удобнее. что лучше? я думаю, подход C, тк где совершить ошибку программер найдёт и в паскале, а чтобы не совершать ошибок, от которых предостерегает паскаль, используя C, надо просто знать эти ошибки. разговоры же о том, что в программах на паскале по статистике меньше ошибок, прошу не поднимать. по крайней мере, без объяснений того, каким образом эта статистика считалась.

опять же эти слова про непереносимую сложность C++... сложно? не справиться? ну и не связывайся с этим языком, кто ж заставляет? на самом же деле, две-три книжки, пара лет активного кодинга на C++ с разбирательствами в чужих программах. и после этого, дельфи/ада/жаба будут утомлять своими ограничениями.

вот оно слово -- "ограничение"! в паскале на программера ограничения накладывает язык. в C/C++ -- программист сам должен накладывать на себя ограничения, чтобы получить читабельную и безбажную программу. при этом при отсутствии навыка, получить нечитабельную и безумно бажную программу в паскале не сложнее чем в C.

вирт -- теоретик, причём упёртый. да, говорят он на каком-то из своих клонов паскаля написал ось, но это не сделало из него практика. меня лично достаёт в паскале, например, после объявления какого-нибудь enumeration с именем Direction, потом для того чтобы реализовать повороты left и right, _явно_ приводить enumeration к integer, добавлять/вычитать единичку по модулю, и потом _явно_ приводить обратно к enumeration. это бред. ещё надо примеров? символ `;'... то он нужен, то он не нужен... не, это-то ладно, несложно разобраться и запомнить где он нужен, где его _можно_ ставить, а где его нельзя ставить. но, когда начинаешь переделывать программу, копируя и вставляя строчки, приходиться следить ещё и за тем, чтобы в одни места добавлять `;', а из других убирать. это лишний источник ошибок. да, половина из них, вылезет на этапе компиляции, зато другая половина даёт ошибки в логике программы. дальше, многословность паскаля. пресловутые begin/end/from/to/then... чем меньше места занимает конструкция, тем больше влезает в окошко текстового редактора, тем проще её воспринять одним взглядом. паскаль этого не учитывает нисколько. проблемы с объявлением данных в программе, ну, например, приспичило мне создать массив каких-нибудь структур (или указателей на структуры), ещё и вложенных. чтобы в программе не делать кучу switch'ей. в C/C++, это делается в полтычка, в паскале же реально умучаешься. и вот так вот по мелочи, в паскале набирается достаточно. казалось бы всё хорошо, но когда на практике свяжешься, умучаешься.

и слова насчёт C мёртв... как минимум преувеличение. он не умрёт до тех пор, пока существует *nix. венда ещё может от C уйти (на прикладном уровне), но *nix -- нет, не уйдёт, ибо как только паскаль/жаба и пр, так сразу следом за какой-нибудь программкой типа аськоклиента начнут тянуться хвосты из депендансов типа jre, или компилятора pascal и библиотек к нему, и тд, и та. хотя нет, на C++, пожалуй уйдёт часть софта. уже ушла.

ps. я тут чего-то много понаписал... но, на самом деле, про философию C очень неплохо написал Раймонд, в своей taoup. но там реально философия -- я-то в отличие от раймонда ограничился парой примеров.
DEimoSStrentaLL Отправлено: 30.05.2007 18:57:34
RE: C мёртв
http://haskell.org/papers/NSWC/jfp.ps
http://www.excelsior-usa.com/xds.html
http://ooc.sf.net use 2.1.20 version optimizing oberon-2 compiler, open source
Страницы: < 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 >






Keywords: zPOSTz zSOFTz, zHOWz, zINFOz, zYANDEXz z38388z
Для Авторов: edit Lock delete Lock



    Rambler's Top100