От двоичного кодирования к системам автоматической генерации кода

Вид материалаДокументы

Содержание


VRML: трехмерный язык Интернета
VRML по сути ничем не отличалась от языка HTML
MPEG-4 и Java3D.
Лисп: история одного преступления в отношении языка программирования
Windows часто пишут на языке Visual Basic.
LISP (LISt Processing
Xerox и Texas Instruments.
CL сильно отличается от языка LISP 1.5
Allegro Lisp
Smalltalk: идет волна...
Xerox, а закончились спустя десять лет, воп­лотившись в окончательном варианте Smalltalk-80
Подобный материал:
1   2   3   4   5   6

VRML: трехмерный язык Интернета

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

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

Проблема перехода из плоскостной модели статичных WWW-страничек в третье измерение — в трехмерный и полностью интерактивный виртуальный мир, стоит сегодня перед Интернетом, пожалуй, на одном из первых мест. В начале 1994 года был разработан язык VRML (Virtual Reality Modeling Language), предназначенный специально для организации виртуального трехмерного интерфейса в WWW. Его развитием занимается VRML-консорциум www.vrml.org. Этот язык позволял опи­сывать в текстовом виде трехмерные сцены, освещение и тени, тексту­ры (покрытия объектов) и, соответственно, создавать свои миры, путе­шествовать по ним, осматривать их со всех сторон, вращать в любых направлениях, масштабировать, регулировать освещение и так далее. Основным преимуществом этого языка было компактное описание сцен: требовалось передавать по сети не многомегабайтные мультиме­дийные ролики, а небольшие текстовые странички объемом в несколь­ко килобайт. Задача визуализации возлагалась на браузер.

Однако первая версия VRML по сути ничем не отличалась от языка HTML для описания обычных двумерных страничек, с той лишь раз­ницей, что с помощью VRML 1.0 создавались трехмерные пространства. В странички VRML (со стандартным расширением .WRL) можно было вставлять ссылки на другие трехмерные объекты (просто указывать URL-aдpec) или на страницы HTML. Однако, несмотря на то, что все объекты этих миров можно было обходить, рассматривать и «трогать» мышкой, тем не менее, не то что контакта с пользователем, даже элемен­тарных процессов движения отдельных объектов с помощью VRML 1.0 сымитировать не получалось. В принципе, есть возможность немного «оживить» такие миры с помощью сценариев CGI, но это требует боль­ших усилий профессиональных программистов. Кроме того, первая версия языка позволяла оперировать со слишком ограниченным набо­ром трехмерных объектов, таких как куб, конус, цилиндр, сфера и сконструированные из полигонов объекты, которые можно было покры­вать различными материалами. Фактически VRML — это типичный декларативный язык, не содержащий никаких команд, и состоящий только из описаний сцен.

За первой версией языка появилась следующая (VRML 1.1), но она сразу же «умерла», так и не получив распространения. В нее была добавлена поддержка звукового сопровождения и простенькой анима­ции, но этого жаждущим зрелищ Гражданам Земли оказалось мало.

Наконец в 1996 году была разработана принципиально новая версия VRML 2.O. В ней появилась, в частности, полноценная поддержка муль­тимедиа, а самое главное, были добавлены элементы интерактивности. И сами описания сцен стали более походить на описания объектов в привычном стиле объектно-ориентированного программирования — со своими событиями и методами, хотя сам язык по-прежнему остался декларативным. Правда, по своей структуре он стал куда более объектно-ориентированным, в частности, в нем появились понятия прототипа, аналога базового класса или шаблона из C++.

Реакции объектов (в терминологии VRML — узлов) на события вирту­ального мира реализуются путем описания маршрутов событий (кото­рые могут быть различных типов) между узлами. Сами же события генерируются так называемыми сенсорами, которые срабатывают, например, при щелчке пользователя мышью, при виртуальном кон­такте с узлом, по таймеру и т. п. Элемент времени, кстати, несет зна­чительно большую смысловую нагрузку при создании виртуальных миров, чем, допустим, событие WM_TIMER для программирующих в Windows. Дело в том, что теперь с помощью VRML появилась возмож­ность описывать анимированные сцены, в которых узлы (все-таки при­вычнее говорить «объекты», но ничего не поделаешь — стандартная терминология) теперь могут самостоятельно «шевелиться». Вы можете создать трехмерный образ человека с помощью иерархии подчиненных узлов, как это делается, например, в 3D Studio, и в зависимости от коли­чества времени, прошедшего с момента запуска программы, заставить определенные узлы перемещаться в заданной последовательности, имитируя хождение по комнатам и другие действия.

Более того, в языке VRML 2.0 введена поддержка исполнения сцена­риев, написанных на других языках программирования, например, на Java или VBScript. Это позволяет наполнить виртуальные миры функ­циональностью, действием, и реализовать сценарии, которые возмож­ны только при использовании обычных процедурных языков програм­мирования. Продумана даже возможная несовместимость браузеров — введены механизмы разрешения различных противоречий.

Последняя версия VRML 2.52 поддерживает множество открытых стан­дартов и технологий, в том числе MPEG-4 и Java3D.

Классика жанра

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

Лисп: история одного преступления в отношении языка программирования

Не секрет, что в России наиболее популярными языками программиро­вания являются С, C++ и Паскаль. И нередко ассемблер. Это довольно

сильно отличает нашу страну от остального мира, где программы для Windows часто пишут на языке Visual Basic.

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

Одним из таких языков является LISP (LISt Processing — обработка списков). Его придумал в 1956 году профессор Массачусетского техно­логического института Джон Маккарти для занятий со студенческой научной группой. Язык предназначался для анализа и разбора англий­ских фраз в рамках проекта по искусственному интеллекту «Прини­мающий советы». Сначала это были версии для первых компьютеров IBM и DEC. Более или менее законченный вариант — LISP 1.5 — появился в 1965 году.

Лисп, как следует из его названия, предназначен для обработки спис­ков, состоящих из атомов — абстрактных элементов, которые пред­ставляют собой формально неограниченные по длине цепочки симво­лов. Они могут трактоваться как строки в более привычном понимании, числа или представлять собой некие логические структуры с вложен­ными на неограниченную глубину подсписками в виде иерархических деревьев. Например, любая фраза является для Лисп типичным спис­ком. По требованиям языка список должен быть заключен в скобки. Для обработки списков используется функциональная модель, базиру­ющаяся на теории лямбда-исчисления Черча. Фактически, программа на Лиспе представляет собой набор лямбда-функций, при этом работа со списками осуществляется с помощью базового набора примитивов типа CAR/CDR (взять первый элемент списка, который сам может быть списком/получить список без первого элемента). Таких примитивов в минимальном наборе всего 13 штук. С их помощью и, главное, благо­даря рекурсивной системе обработки информации, Лисп позволяет очень компактно описывать функции, для реализации которых на дру­гих языках программирования потребовались бы сотни и тысячи стро­чек кода.

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

После первых впечатляющих успехов актуальной стала задача эффек­тивной реализации языка. Сначала все Лисп-системы были интерпре­тируемыми, что позволяло достичь определенной гибкости, но сильно замедляло сам процесс работы программы. Автор Лиспа опубликовал в 1965 году свою книгу «LISP 1.5 Programmer's Manual», в которой описал не только язык, но и структуру так называемой виртуальной Лисп-машины, некоей абстрактной схемы функционирования Лисп-системы, а также формальное определение структуры компилятора и интерпретатора. Этот труд стал образцом классического описания языка программирования и его окружения, и на него ссылаются вплоть до сегодняшнего дня. Удивительная ясность и простота Лиспа в соче­тании с его мощностью и оригинальной идеологией сделала его не про­сто языком программирования, а своего рода способом формального описания алгоритмов. Кроме того, многие идеи, заложенные в языке Лисп (например, «сборка мусора», или оптимизация памяти, освобож­дение ее от «висячих ссылок»), актуальны и по сей день.

Примерно к этому времени относится и первое совершенное в отноше­нии Лиспа преступление, лишившее его основного преимущества перед другими языками — прозрачности структуры программы. Кто-то, я не знаю точно, может быть, это был сам Великий (Джон Маккарти), ввел в программу примитив PROG, позволяющий писать операторы последо­вательно, один за другим, как в Фортране или Алголе, и, что самое страшное, добавил оператор GO (goto), без которого примитив PROG, оче­видно, был лишен всякого смысла. С этого момента развитие Лиспа пошло под откос.

В начале 70-х годов Лисп-машина была реализована в ряде компьютеров таких фирм, как Xerox и Texas Instruments. Для повышения эффек­тивности функционирования она была «воплощена в железе» (как ска­зали бы сейчас, «система была зашита в ПЗУ»).

В конце 70-х годов бурно расцвела теория искусственного интеллекта и стали актуальными средства для реализации ее идей. Язык Лисп пережил второе рождение. Было создано множество вариантов языка практически для всех платформ и операционных систем. Именно тогда появились два диалекта, которые стали основоположниками сегодня­шних стандартов. Это, прежде всего, Scheme Lisp, который точнее всего унаследовал чистоту оригинальной идеологии своего родоначальника. Пройдя глубокую математическую переработку, эта версия, по-преж­нему ограничиваясь небольшим числом базовых примитивов (полное

описание языка занимает всего 50 страниц), позволила сосредоточиться на ключевых деталях при решении ряда математических задач, требу­ющих формального описательного аппарата. Например, оригинальной и многообещающей оказалась идея engines — параллельных процес­сов. Поэтому в большинстве научных групп используется именно эта версия Лиспа.

Второй диалект, Common Lisp (CL), наоборот, отличался очень боль­шой библиотекой разнообразных функций, чуть ли не превосходящих по количеству аналогичные библиотеки Фортрана(!). Его, конечно, зна­чительно удобнее использовать для реализации конкретных проектов, требующих, помимо простого анализа списочных структур, еще и боль­ших объемов вычислительной работы и организации хорошего графи­ческого интерфейса. Описание этого диалекта занимает уже около 1300 страниц, в него введено довольно много возможностей обычных процедурных языков типа Си, например, строгая типизация, которая в оригинальном Лиспе отсутствовала вообще.

Язык CL сильно отличается от языка LISP 1.5 60-х годов. Хотя он и включает в себя все базовые возможности, в реальных проектах обычно используется не рекурсивная, а линейная структура программы, более соответствующая человеческой психологии и более близкая к привыч­ным языкам. Однако из-за отказа от оригинальной идеологии, требо­вавшей очень четко формализовать задачу в почти математических терминах, сразу возникли проблемы, характерные для обычных задач проектирования и реализации крупных проектов.

После активного распространения Unix в 80-х годах получила широкое распространение версия Portable Standard Lisp, реализованная на боль­шинстве платформ, и, наконец, Common Lisp стал фактическим стан­дартом. А 8 декабря 1994 года в Американском институте нацио­нальных стандартов было зарегистрировано официальное описание этого языка ANSI X3.226:1994 (X3J13), которое действует и сегодня.

Всплеск интереса к объектно-ориентированному программированию не обошел и Лисп. В него были добавлены понятия объекта, метода, насле­дования и вскоре появился объектный стандарт Common Lisp Object System (CLOS). При этом изобретатели стандарта не понимали или не хотели понять, что такое искусственное расширение языка, не соот­ветствующее его идеологии, лишь усложняет Лисп и лишает его как оригинальной ясности, так и эффективности.

Современные реализации Лиспа представляют собой большие програм­мные комплексы, близкие к СА5£-системам. Несмотря на то что язык Лисп был придуман около 40 лет назад, он относится скорее к 4GL-классу.

Манипулирование объектами на абстрактном уровне, хотя и требует подчас не визуального, а конкретного кодирования, делает ненужным программирование рутинных операций, а наличие обширных библио­тек, обеспечивающих быструю реализацию множества примитивов, позволяет получить более эффективный и надежный код, чем при руч­ном программировании аналогичных задач на C++. Например, про­граммирование задач автоматического интеллектуального перевода на С может показаться совершенно абсурдным. (Интересно, а на чем пишут свои «переводчики» наши программисты?) Кстати, имеется большое число «компиляторов», переводящих текст задачи на Лиспе в код на языке С.

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

Конечно, и стоят такие системы недешево. Например, цена многоплатформной версии Allegro Lisp составляет 4500 долларов, система Golden Common Lisp для MS-DOS, Windows и OS/2 стоит 2000 долларов. Впро­чем, существует и немалое количество некоммерческих компиляторов, например 32-разрядная версия Allegro Common Lisp for Windows (www.franz.com), GNU CL для Unix/Linux (ftp://ftp.cli.com/pub/gcl/) и другие.

Можно ожидать появления версий и для Интернета. Простой интер­претатор Лиспа на языке Java уже распространяется бесплатно, а в будущем наверняка появятся и более мощные сетевые диалекты. В силу своей простоты и эффективности этот красивый, но подзабытый в Рос­сии язык заслуживает не меньшего внимания, чем те же «раскручен­ные» С и C++.


Smalltalk: идет волна...

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

Работы над языком Smalltalk начались в 1970 году в исследователь­ской лаборатории фирмы Xerox, а закончились спустя десять лет, воп­лотившись в окончательном варианте Smalltalk-80, оказавшимся ро­доначальником наиболее полноценной объектной идеологии.

В это же время специалисты Страны восходящего солнца решали, какой же язык выбрать в качестве основы для создания своей компьютерной системы пятого поколения, наверное, самого великого неудавшегося компьютерного проекта XX века. После долгих раздумий выбор пал на Пролог, что объяснялось в первую очередь возможностью легкой расширяемости языка. Как все казалось просто: заноси новые факты в базу и получай готовые решения! К сожалению, парадигма объектного мышления в те годы еще не властвовала над умами разработчиков. Фактически единственными объектными языкам были Симула-67 и Smalltalk, однако преимущества последнего не могли быть оценены по достоинству. В 70-е годы еще фактически не было опыта создания круп­ных распределенных систем обработки и анализа информации, когда практически невозможно реализовать серьезный проект без хорошей объектной модели. Кроме того, интерпретируемая структура Smalltalk, его ориентация на однопроцессорные компьютеры, по мнению японцев, совершенно не укладывалась в концепцию машин пятого поколения.

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

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

Объектно-ориентированное программи­рование отвечало и отвечает этим требованиям как нельзя лучше, а подходящий высокопроизводительный инструмент имелся всего один.

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

И тут вспомнили о языке Smalltalk. Он поддерживался и развивался в первую очередь благодаря усилиям фирмы IBM, пусть и незаметно для большинства разработчиков. При этом он пользовался постоянным спросом, растущим в прямой зависимости от увеличения производитель­ности компьютеров. Сегодня язык Smalltalk опять выходит на лидиру­ющие позиции среди языков программирования. В будущем он навер­няка сможет оказать заметную конкуренцию языку C++ и его аналогам.

Язык Smalltalk выделяется двумя ключевыми особенностями, позво­ляющими ему претендовать на роль ведущего средства разработки. Во-первых, синтаксис языка базируется исключительно на понятии объекта и очень компактен. Даже само название языка в переводе на русский примерно означает «малоразговорчивый». В самом деле, в языке Smalltalk отсутствуют привычные отделенные по смыслу друг от друга понятия оператора, данных или процедуры. Абсолютно все, что входит в язык, является объектами, а сами объекты общаются друг с другом исключительно с помощью сообщений. Например, вычисле­ние выражения 1+1 вызывает посылку сообщения «+» (прибавить) с параметром 1 объекту I. Больше никаких управляющих структур, за исключением условного «оператора», который на самом деле тоже является методом класса Boolean, в языке нет, хотя их нетрудно смо­делировать.

При разработке языка Smalltalk одной из его целей было создание хоро­шего инструментария для моделирования процессов с большим коли­чеством независимых объектов, общающихся друг с другом с помощью сообщений. «Жизнь» каждого объекта протекает независимо от дру­гих объектов, и в то же время одновременно с ними. Для моделирова­ния подобных процессов в язык Smalltalk были встроены три класса для распараллеливания процессов и их синхронизации друг с другом. Но так как реализация языка Smalltalk-80 ориентировалась на одно­процессорные системы, диспетчеризацией псевдопараллельных про­цессов с помощью задания приоритетов и отслеживания тупиковых ситуаций занимается специальный класс. (На старых ЕС ЭВМ был такой термин «клинч», когда каждый из двух процессов бесконечно ждал освобождения ресурса, занятого «конкурентом».)

Современные разработчики ориентируются на версию Smalltalk-80, которая в силу прекрасной продуманности семантики языка уже 20 лет не нуждается в изменениях и стала общепризнанным стандартом. В него не входят описания интерфейсных классов, классов работы с графикой и платформно-зависимых элементов. Особенно важна независимость от платформы, которая позволяет, например, использовать в языке числа неограниченной длины. Для придания языку Smalltalk большей гибкости в нем имеется возможность использования чисел с различ­ными системами счисления в диапазоне от 2 до 36. (Программисты привыкли к десятичной, двоичной и шестнадцатеричной системам, а поклонники языка С —- еще и к восьмеричной.) Почему 36, в принципе, понятно: 26 букв английского алфавита и еще 10 цифр. Любимый при­мер поклонников Smalltalk, иллюстрирующий выразительные возмож­ности представления чисел, выглядит так: 36rSMALL.TALKe255.

Заявлено, что переменные в AJVSJ-стандарте языка не будут иметь типов вне зависимости от того, какие данные они хранят в любой момент исполнения программы. Это решение окончательное — разработчики стандарта заявили: «Хорошо это или плохо — тема отдельного разго­вора, но любой диалект Smalltalk с типизированными переменными можно назвать как угодно, но это будет уже не Smalltalk». Создатели языка Smalltalk опираются на концепцию повторного использования объектов, поэтому они и отказались от привычного понятия типа, создав классы Integer, Boolean и другие для объектного представления данных. Таким образом, понятие полиморфизма реализовано в языке Smalltalk в наиболее точном соответствии с объектной идеологией.

Во-вторых, язык Smalltalk является полностью переносимым на уровне двоичных кодов. Дело в том, что этот язык является интерпретируе­мым. Программа на Smalltalk компилируется в так называемый байт-код, когда отдельная команда виртуального ассемблера занимает ровно один байт (8 бит). Эта идея, которую придумал и впервые реализовал Питер Дойч в одной из версий Лиспа, получила широкое распростра­нение. Можно вспомнить, например, Паскаль с компиляцией в извест­ный Р-код. Получаемый байт-код может исполняться интерпретатором на любой платформе, где реализована виртуальная Smalltalk-машина, которая содержит набор объектов (в терминологии языка), описываю­щих процессы компиляции и взаимодействия с пользователем. Ско­рость исполнения программ (интерпретации байт-кода) имеет естест­венные ограничения. Однако с учетом роста производительности ком­пьютеров для некритичных по времени задач быстрота и качество разработки проекта выходят на первый план.

Благодаря объектному подходу ко всем аспектам реализации языка Smalltalk, удалось создать не просто новый язык программирования. Появилась полностью переносимая среда, хорошее владение которой, если судить по зарубежным исследованиям, приближается по ценности к профессиональному владению C++. Сегодня языки третьего поколе­ния во многих случаях уже не «вытягивают» крупные проекты, даже при качественном продумывании структуры программы. Слишком много усилий тратится на написание и отладку кода для реализации мелких деталей разрабатываемой системы. На помощь вроде бы при­ходят CASE-системы, но они в большей степени ориентированы на работу с хранилищами данных. Для задач моделирования, оптимиза­ции, управления и т. п. оптимально использовать языки с другой идео­логией.

Базовые возможности языка Smalltalk осваиваются очень быстро, но программистам, привыкшим к традиционным языкам, сначала непри­вычно переходить на Smalltalk. Но если хорошо понятна идеология объектно-ориентированного программирования, быстро приходит осоз­нание мощности и простоты языка, а также наглядности получаемой программы. Кроме того, ориентация на событийно-ориентированное программирование как нельзя лучше подходит для использования это­го языка при реализации сверхбольших проектов.

Из бесплатных версий наиболее солидно выглядит GNU-версия языка Smalltalk, полностью соответствующая неофициальному стандарту Smalltalk-80. Из коммерческих версий необходимо выделить комплект IBM VisualAge for Smalltalk. Фирма IBM многие годы поддерживала и совершенствовала эту систему, которая сегодня является безуслов­ным лидером на рынке. В чем этой компании не откажешь — это в про­фессионализме и умении заглядывать далеко в будущее (хотя она, похо­же, заглядывает в будущее подчас слишком далеко, упуская из виду текущие тенденции рынка). Последняя доступная к весне 2003 года версия VisualAge Smalltalk Enterprise V6.0.1 — это прекрасная кросс-платформная среда визуальной разработки, позволяющая создавать программы для множества операционных систем: Windows, OS/390, z/OS, HP-UX, Red Hat Linux, AIX. В ней имеется набор интерфейсных объектов, объектов для работы с базами данных и для интеграции в программу мультимедийной информации, а также обеспечена поддер­жка технологий Java и Weft-сервисов.

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

Но уже зарождается новое поко­ление языков, которые определят будущее развитие компьютерной индустрии. Это будут усовершенствованные версии Java, предназна­ченные не только для Интернета; интерактивные языки виртуального моделирования типа (A)VRML; встроенные языки различных систем работы с хранилищами данных (например, SQLWindows); языки быст­рой разработки приложений, интегрированные с СА5.Е-системами; различные диалекты декларативных языков на основе Пролога. Для задач, требующих интенсивных вычислений, можно будет использо­вать параллельные версии подобных языков, благо появление первых недорогих мультипроцессорных персональных компьютеров (с 2-4 процессорами) не за горами. С их массовым распространением на рынке быстро появятся и относительно дешевые параллельные системы программирования. Сначала это будет, конечно, апробированный на суперкомпьютерах Фортран и, возможно, Модула или Ада, а затем по­явятся реализации и других языков. И не вызывает сомнения, что среди этой «новой волны» одно из наиболее достойных мест займет язык Smalltalk.

Последние новости об этом языке можно найти на сайте ссылка скрыта.