вторник, 18 ноября 2008 г.

Интерстрон: ближайшие планы

Этот текст (см. ниже) на днях появится на сайте компании Интерстрон (www.interstron.ru). Возможно, он окажется интересен и тем, кто время от времени меня читает. Там, в частности, говорится и о состоянии дел с переводом нового стандарта Си++.


Коллеги и друзья!

В последнее время в фирме проводилась довольно серьезная «скрытая» работа, связанная с нашим флагманским продуктом – компилятором переднего плана Си++. Эта работа – а она полным ходом продолжается и сейчас – направлена на то, чтобы адекватно и на высоком уровне соответствовать современной и динамичной ситуации в сфере инструментов разработки.

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

- Развитие языка Си++ и его реализация
- Создание новых инструментов разработки

А теперь чуть подробнее.

Новый стандарт Си++ и его реализация

Многие знают, что совсем недавно была опубликована «бета-версия» нового Международного Стандарта Си++ (октябрьский драфт). Формального принятия этого стандарта можно ожидать примерно через полтора года, однако по правилам ISO нынешняя версия уже не должна претерпеть существенных изменений (кроме стилистических и редакторских), так что ее можно рассматривать как практически окончательную.

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

Для компании Интерстрон это означает, что впереди большая работа по приведению компилятора Си++ в соответствие новому стандарту. Эта работа уже началась, и мы надеемся, что наш компилятор будет одним из первых в мире, поддерживающих новый стандарт в полном объеме – так же, как десять лет назад этот компилятор обгонял многие западные реализации по полноте поддержки тогдашнего стандарта 1998 года.

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

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

Наш перевод мы собираемся снабдить комментариями, которые будут пояснять некоторые не слишком ясно написанные или просто важные моменты определения языка. Идейным вдохновителем и образцом для нас послужил в первую очередь текст книги Страуструпа, который написал такое комментированное описание языка в 1990 году, к началу процесса стандартизации. Для стандарта языка Ада выпущена отдельная книга с обоснованием всего дизайна языка и его конструкций («Rationale»). Похожая книга имеется и для C# (C# Annotated Standard, Morgan Kaufmann, 2007), так что полезность комментариев подтверждается реальной практикой.

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

Помимо выпуска печатной версии перевода, мы обсуждаем перспективы и online-версии текста. Идея заключается в том, чтобы программист, зайдя на наш сайт, немедленно получил бы в свое распоряжение гипертекстовую версию перевода, со всем необходимым справочным аппаратом, включая примеры, комментарии и ссылки на соответствующие места оригинального текста.

Новые инструменты проектирования и разработки

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

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

Однако и объективные потребности индустрии ПО претерпели к настоящему времени определенную эволюцию. Теперь «просто компиляторов» или даже мощных сред программирования в традиционном понимании явно недостаточно. Центр внимания смещается от средств генерации качественного кода к многофункциональным системам, реализующим широкий спектр самых разных операций над программами, и в этом спектре генерация кода – далеко не единственный и иногда даже не самый важный аспект.

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

И вот в этой сравнительно новой области у компании достаточно выигрышные и перспективные позиции. Дело в том, что ядро наших средств разработки – компилятор переднего плана Си++ – обладает уникальными свойствами, основное из которых – наличие развитого семантического представления с мощным и удобным программным интерфейсом (API). Существо дела заключается в том, что семантическое представление Интерстрона содержит всю информацию из исходной программы, необходимую практически для любых манипуляций с ней. Можно сказать, что это та же исходная программа, но представленная в регулярном единообразном виде (с выявленной скрытой семантикой, полностью разрешенными именами и явно представленными структурными отношениями между программными сущностями), удобном для создания на ее основе того самого широкого спектра операций, потребность в которых ощущаются все более отчетливо.

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

И вот сейчас, наряду с описанной сферой нашей деятельности, мы собираемся открыть новое для нас стратегическое направление, направленное на создание серии инструментов моделирования, анализа и синтеза программ. Ядром всех этих инструментов будет служить наш компилятор, стабильность, надежность и высокое качество которого гарантирует десятилетний опыт его практического использования. Профильная функциональность продуктов будет реализована на основе использования семантического представления, порождаемого компилятором. При этом сам компилятор будет упрятан глубоко «под капот» этих продуктов, так что пользователю будет «видна» только нужная ему функциональность, и ему не придется даже гадать о том, что находится внутри инструмента…

Первым продуктом из этой серии будет инструмент моделирования и инжиниринга программ, реализующий широкое подмножество графической нотации UML и использующий Си++ в качестве входного и целевого языка. Рабочее название инструмента – Визуализатор, однако собственно «визуализация» программ, то есть представление их в наглядном структурном виде – только очень небольшая часть его функциональных возможностей. Если говорить коротко, то этот продукт обеспечивает достаточно полный спектр типичных операций по моделированию ПО согласно методике, поддерживаемой графическим языком UML (Unified Modeling Language). К числу таких операций относятся обратный и прямой инжиниринг, а также средства документирования и визуализации. Язык UML, реализованный в продукте, соответствует последней на настоящий момент версии 2.1.

Конечно, наш Визуализатор – не первая система подобной направленности. Хорошо известны, в частности, изделия фирмы Rational Rose, которые реализуют сходную функциональность. Однако, мы уверены, что наш продукт будет выгодно отличаться от изделий уважаемых конкурентов – прежде всего, более низким «порогом вхождения», обусловленным его удачным дизайном, простотой и русскоязычностью. Кроме того, он будет попросту существенно дешевле.

Визуализатор – отдельный «коробочный» продукт, который, как мы надеемся, будет интересен и полезен как разработчикам, так и всем, изучающим программирование и моделирование ПО. Однако мы не собираемся ограничиваться выпуском отдельного инструмента. В наших планах – создание мощной среды проектирования программ, которая будет включать большой ассортимент операций, поддерживающих все этапы жизненного цикла ПО. В этой системе, ориентированной прежде всего на платформу Intel, будет и наш компилятор, и полная поддержка UML, и много других полезных свойств.

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

Книга рассчитана на тех, кто хотя бы немного знаком с Си++ и хочет освоить принципы и методы работы с UML. Во второй части книги будут детально описаны последовательности шагов типичных операций моделирования, реализованных в нашем продукте. Вообще, мы стараемся писать эту книгу очень простым и ясным языком, сознательно оставляя за ее рамками некоторые сложные аспекты языка Си++ и нотации UML.

Ориентировочный срок выпуска книги и Визуализатора – весна-лето будущего года.

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

Следите за новостями!

 

10 комментариев:

valexey комментирует...

Да. Спасибо за новость. Очень интересно. Несколько вопросов:

Каковы планы по выпуску комментированного перевода стандарта? Будут ли доступны (онлайн например) его промежуточные версии?

Практикуется ли Интерстроном выпуск демо и/или бесплатных бета-версий продуктов?

Правильно ли я понимаю что "семантическое представление с мощным и удобным программным интерфейсом (API)" это некий аналог адского ASIO?

valexey комментирует...

Пардон. Ada ASIS конечно же.

zouev комментирует...

Для valexey:
Перевод готов почти полностьью, за исключением самых проследних частей, которые появились в октябрьском драфте. Это дело пары недель, при благоприятных обстоятельствах. Правда, как писать комментарии к свойствам языка, которые еще никто никогда не использовал,- совершенно непонятно...

Выкладывать промежуточные версии смысла нет, да и технически сложно: все находится в работе.

Насчет демо-версий: основные продукты Интерстрона сейчас - заказные системы программирования, и понятие "демо-версии" для таких продуктов смысла особого не имеет.

Когда Визуализатор подойдет к нужной степени готовности, то вполне возможно, что его демка появится.

Наше семантическое представление можно считать аналогом ASISа (по крайней мере, цели примерно одинаковые) - с поправками на разницу между языками, и на то, что наше СП сделано позже и с учетом знания ASISа.

Какое-то время назад мы думали выложить описание интерфейса в открытый доступ. Может быть, вернемся к этой идее.

Между прочим, тут один интересный парадокс: все понимают, Ада как язык спроектирован более систематически и более аккуратно, чем Си++; в то же время семантический API для Ады - наоборот, менее удобен в работе, чем наш интерфейс для Си++. По крайней мере, нам так какжется. :-)

zouev комментирует...

Для valexey:
Перевод готов почти полностьью, за исключением самых проследних частей, которые появились в октябрьском драфте. Это дело пары недель, при благоприятных обстоятельствах. Правда, как писать комментарии к свойствам языка, которые еще никто никогда не использовал,- совершенно непонятно...

Выкладывать промежуточные версии смысла нет, да и технически сложно: все находится в работе.

Насчет демо-версий: основные продукты Интерстрона сейчас - заказные системы программирования, и понятие "демо-версии" для таких продуктов смысла особого не имеет.

Когда Визуализатор подойдет к нужной степени готовности, то вполне возможно, что его демка появится.

Наше семантическое представление можно считать аналогом ASISа (по крайней мере, цели примерно одинаковые) - с поправками на разницу между языками, и на то, что наше СП сделано позже и с учетом знания ASISа.

Какое-то время назад мы думали выложить описание интерфейса в открытый доступ. Может быть, вернемся к этой идее.

Между прочим, тут один интересный парадокс: все понимают, Ада как язык спроектирован более систематически и более аккуратно, чем Си++; в то же время семантический API для Ады - наоборот, менее удобен в работе, чем наш интерфейс для Си++. По крайней мере, нам так кажется. :-)

zouev комментирует...

Черт... Прошу прощения, два раза отправил один и тот же текст...

valexey комментирует...

> Между прочим, тут один интересный
> парадокс: все понимают, Ада как язык
> спроектирован более систематически и
> более аккуратно, чем Си++; в то же
> время семантический API для Ады -
> наоборот, менее удобен в работе, чем
> наш интерфейс для Си++. По крайней
> мере, нам так кажется. :-)

Было бы весьма интересно почитать статью в которой описывались и сравнивались бы эти два API. Их достоинства/недостатки.

zouev комментирует...

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

valexey комментирует...

Есть ли какие-то новости относительно перевода стандарта?

Анонимный комментирует...

Здравствуйте Евгений.
1. Ваш новый компилятор Си будет использовать UML. Есть такой графический язык Дракон (http://forum.oberoncore.ru/viewforum.php?f=62) - Ваше мнение о нём. Стоит на Ваш взгляд делать Дракон-редактор, а на его основе генератор кода?? Или лучше использовать UML??

2. Новый компилятор С++ будет поддерживать русские кодовые слова хотя бы в качестве опции?? (на моём форуме http://rus.24bb.ru - есть раздел посвящённый русификации Си, там используется команда препроцессора #define + Ваш вариант перевода служебных слов Си).
3. Не сделает ли Интерстрон какую либо сборку компилятора Си для ВУЗов/школ с поддержкой ТОЛЬКО русских операторов и обрезанными функциями. Ведь те кто сейчас научится программировать на языке на котором думает, потом программировать на англоязычных компиляторах не будут точно!!

PS тех кого интересует программирование на русском языке приходите на форум http://rus.24bb.ru

Василий комментирует...

Евгений, добрый день. Ссылку на твой блог передал Алексею Бирюкову (отковыривает очередные последние ошибки в продукте "Интерстрон"-а). Сам сейчас далёк от плюсов, но, видимо, через блог с тобой легче всего связаться. Играю с стихи - http://www.stihi.ru/2009/04/10/1341
Василий.