среда, 26 сентября 2007 г.

Разработка российской ОС - так с нуля или где?

17 сентября в Компьюленте (http://soft.compulenta.ru/332541) появилось
такое сообщение (цитирую только часть; все выделения цветом, жирностью и курсивом - мои):

На разработку российской ОС будут выделены 70 миллионов рублей
17 сентября 2007 года, 15:42
Текст: Владимир Парамонов

Исполняющий обязанности министра информационных технологий и связи России Леонид Рейман во время заседания Совета при Президенте РФ по реализации приоритетных нацпроектов заявил, что из бюджета страны планируется выделить 70 миллионов рублей на разработку операционной системы и набора прикладных программ.

Как сообщает "РБК daily" со ссылкой на заявления Реймана, в 2008 году российские программные продукты пройдут тестирование в Томской области, Пермском крае и Республике Татарстан. К в 2009 году отечественное программное обеспечение планируется установить на все школьные компьютеры.

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

Возникает ряд естественных недоумений и вопросов:

- Сообщается, что разработчик будет определен в сентябре, а уже к 2009 году ОС должна быть установлена на все школьные компьютеры. То есть, эта операционная система будет создана (то есть спроектирована, реализована и оттестирована) менее чем за полтора года. Вопрос: это они серьезно?

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

НО: в тексте явно же сказано, что создаваться ОС будет с ноля! То есть, речь идет о совершенно новом продукте! Причем, это, похоже, не оговорка и не домысел журналиста: последняя фраза в приведенном выше тексте явно указывает на наличие альтернативы в виде опенсорсной платформы. То есть, все-таки, своя ОС и "с ноля"?..

Если это не ошибка, и они действительно думают, что меньше чем за полтора года (и, между прочим, меньше чем за 3 млн долларов!) можно сделать новую ОС с нуля и довести ее до реального использования , то уважаемому господину министру и его экспертам хочется просто отказать в наличии элементарного разума (или, напротив, предположить наличие особо изощренных расчетов, направленных, правда, не на "ослабление зависимости от зарубежных разрабочиков", а на что-то более интересное).

- За этот же срок должны быть созданы: "пакет офисных приложений, антивирус, графический редактор, решение по автоматизации управления школой и некоторые другие продукты". Опять же, для случая Линукса все это вполне реально, если за основу берется OpenOffice, Gimp и что там есть еще готового.

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

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

Постскриптум

После этого самого первого сообщения повалили повторные, уже не хочется их цитировать. Кроме того, сообщалось, что Рейман/Медведев провели встречу с представителями российских софтверных фирм, где обсуждалось это решение. Бог с ними со всеми.

Интересно другое: ни в одной последующей заметке на эту тему, ни в одной из новостных лент и сайтов новостей - слов "российская ОС с нуля" уже не встречалось. Напротив, речь шла только о том, какую именно ипостась Линукса взять за основу (каждый производитель, естественно, проталкивает свою, как будто они чем-нибудь друг друга лучше...)

Так что же: есть решение о создании российской ОС с нуля, или нет? Будет ли проведен конкурс "до конца текущего месяца"? Действует ли еще срок "к 2009 году"?

четверг, 20 сентября 2007 г.

Синтаксис и семантика, простота и сложность

Этот пост - нечто вроде ответа на комментарии (см. "О сайте compilerjobs.com") насчет синтаксической сложности C++ и трудностях его освоения.

Очевидно, при разработке C++ перед Страусом стояли два неотменимых предусловия. Во-первых, обеспечить совместимость с Си и, в частности, добиться стилистической преемственности с языком-предшественником (впрочем, я вполне допускаю, что эта самая стилистическая преемственность подразумевалась по умолчанию - складывается впечатление, что эта братия из AT&T просто не могла представить, что можно придумать что-то получше, чем их птичий язык...) И во-вторых, отразить в языке как можно больше потребностей программистов и - что даже важнее - постараться предупредить все возможные ситуации, когда то, что они придумали, окажется в противоречии с обстоятельствами реального программирования. В этом смысле очень интересно сравнить первоначальные, абсолютно умозрительные наброски "шаблонных" конструкций из "Зеленой книги" (Язык Си++ с комментариями, "Мир", 1991), когда никто, включая Страуса, даже не пробовал их использовать, и окончательный вид главы 14 Стандарта... После того, как было решено включить в Стандарт STL Степанова, в шаблоны было сделано громадное количество усовершенствований и поправок - от принципиальных до самых что ни на есть мелких, которые вот именно пытались учесть и предвосхитить все возможные будущие проблемы. Еще и не все внесли, можно было кое-что добавить...

(С моей точки зрения, оба предусловия достаточно надуманы, но я сейчас не буду обсуждать, что бы произошло, если бы проект C++ исходил изболее серьезных предпосылок.)

Так вот, я утверждаю, что находясь в рамках указанных предусловий, было попросту невозможно придумать синтаксис, хоть немного более простой и элегантный, нежели мы имеем сейчас. Попробуйте хоть что-нибудь упростить в шаблонах! Получится либо отсечение функциональности (в противоречии со вторым предусловием), либо проблемы с STL, либо отход от стилистики Си.

В этом смысле очевидно, что философия Страуса не просто радикально отличается от философии Вирта - они лежат в разных плоскостях. Если Вирт стремился сделать язык изначально ясным и простым, пусть ценой отсутствия тех или иных возможностей, то Страус, наоборот, пытался предусмотреть все мыслимые потребности (включая вкусовые пристрастия "цвета программистской элиты" в лице упертых юниксоидов) и предугадать всевозможные проблемы реального программирования.

Я, кстати, вовсе не считаю, что кто-то из них безусловно прав, и не принадлежу ни к какому "лагерю". Для меня вполне очевидно, что C++ спроектирован в целом неудачно, он несбалансирован, избыточно сложен и стилистически безвкусен. При этом я считал и продолжаю считать, что эта самая сложность есть не какой-то умственный заскок неких злонамеренных извращенцев, а адекватное отражение объективной сложности программирования. Прошу прощения за самоцитату, но "Задачи, решаемые современными программными системами, очень и очень сложны. Для их создания приходится использовать адекватные инструменты, которые не могут не соответствовать сложности и ответственности задач и потому объективно не могут быть простыми".

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

Так что ни один из этих подходов я в полной мере не разделяю. И если когда-нибудь наступит период хотя бы относительного финансового благополучия, и надо мной не будет висеть срочная работа, и другие обстоятельства сложатся благоприятным образом (я капризен, к сожалению и стыду...), то я обязательно попытаюсь описать и, возможно, реализовать язык, который кажется мне оптимальным компромиссом между чрезмерной сложностью C++ и чрезмерной же простотой Оберона. И, конечно, мой язык будет гораздо элегантнее обоих :-). Я даже название ему придумал: Zeppelin. И логотип: контур двухгрифовой гитары Джимми Пейджа в овале, повторяющем форму дирижабля. (много смайликов)

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

И благодарите Бога, что мы говорим сейчас о "нормальных" языках: попытайтесь хотя бы отделить синтаксис от семантики, скажем, в языке Haskell...

Вдогонку

К вопросу об "элегантности" C++ и о стиле программирования, им навязываемом.
Вспомнил, как несколько лет назад (в 2002 году, кажется) в ETH случился "симпозиум по языкам программирования". Под этим громким названием скрывались всего три доклада, однако они и их авторы стоили иной многодневной конференции: выступали Страуструп, Дал (автор Симулы) и Вирт.

Так вот, Страуструп в своем выступлении на нескольких простых примерах показывал специфические приемы программирования с использованием шаблонов. Это было что-то связанное с выявлением семантических ошибок в шаблонах на этапе компиляции (известно, что шаблоны в нынешнем виде не предусматривают почти никакого статического контроля правильности подстановок: вместо типового параметра может подставляться, вообще говоря, любой тип.) Примеры были просто чудовищно корявые: при "неправильной" настройке шаблона компилятор должен был выдавать некую диагностику, совершенно не относящуюся к существу допущенной ошибки, и предлагалось именно по появлению этой диагностики судить об ошибке. У меня где-то остались слайды, если найду - выложу парочку.

(Уж не говоря о том, что примеры эти, как и в его книге, были набраны пропорциональным шрифтом и вдобавок курсивом. Как хотите, но в этом одном мне видится явное извращение...)

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

Ну что тут скажешь...