1. ВВЕДЕНИЕ

Прежде, чем я начну описывать язык ACL, я хочу сказать немного о истории его создания. Язык программирования ACL первоначально был придуман мной в 1992-1994 годах для компьютеров PC AT-286, работающих под DOS. К тому времени у меня было написано большое количество подпрограмм на языке программирования Fortran и назрела необходимость как-то всем этим управлять. Использовать библиотеки на стадии компиляции оказалось не удобно и не быстро. Мне хотелось иметь как раз чистый интерпретатор, чтобы как двое из мешка: написал и сразу исполнялось. Так и получилось, что ACL по своей структуре оказался языком макросов, что как раз соответствовало поставленной цели. Интерпретатор очень хорошо и быстро работал, обеспечивая выполнение многих функций, которые ранее выполнялись с помощью десятка разных программ с неудобным интерфейсом. Он позволял организовать любую программу с графическим интерфейсом пользователя за полчаса. Главным его применением было разработка и быстрая отладка графики, которую я всю программировал сам. Однако с появлением операционной системы Windows старый интерпретатор - DOS программа - потерял свою привлекательность. Более того, он просто не запускался под Виндовс, так как использовал некоторые запрещенные с точки зрения Виндовс приемы.

Через десять лет, в 2004 году, я взялся реанимировать ACL сначала с целью использовать его на КПК (карманном персональном компьютере), так как хороших программ для расчетов на карманном компьютере к моменту написания моей программы я не нашел. Да и сейчас их немного. Для написания интерпретатора я использовал язык Java в модификации для виртуальных машин проекта Ewe. Эти ВМ даются бесплатно с правом свободного распространения, что меня привлекло более всего. Увы, Sun Microsystems тогда бесплатно ВМ для мобильных устройств не давал. Фактически надо было переписать старый код с фортрана на Java, что я и сделал, и слегка изменить общую структуру с учетом новых возможностей. На ПК программа естественно тоже работала. Получилось так хорошо, что я решил сделать отдельную версию для реализации на ПК и с использованием стандартного языка Java-1.4.2. Это была последняя версия Java к моменту начала работы. У стандартной версии больше возможностей так как она сразу ориентируется на ПК. В последующем обе версии стали слегка различаться по причине разных возможностей у КПК и ПК. Но главная структура языка все же общая. В этой книге я буду писать о языке для ПК. Программа для КПК практически умерла. Хотя она все еще работает на моем карманном компьютере, которому уже 8 лет, но на современных смартфонах стоят уже совсем другие операционные системы, под которыми она не работает.

Сейчас есть несколько вариантов интерпретаторов ACL. Есть укороченная версия интерпретатора для ПК, которая содержит только тот код, который написал я сам. Эта версия существенно меньше в размерах, хотя в ней есть практически все, что необходимо в большинстве случаев. Есть также версии, которые дополнительно к моему коду, включают код, написанный другими авторами и распространяемый бесплатно в интернете. Так есть программа, которая имеет размер на 1 Мб больше. Именно такой размер имеет библиотека java-классов iText, которую я использую для работы с pdf-файлами. В будущем я предполагаю использовать и другие библиотеки. Первая программа содержат полное описание языка ACL на русском языке. Описание на английском языке надо скачать независимо и оно несколько устарело, не успеваю писать много текстов. Да и реклама программы для англоязычных пользователей не развита. Кроме того, первая программа имеет большой набор написанный мной программа на языке ACL. Она также имеет средства разработки ACL программ, такие как редактор текста для записи и исправления ACL программы, быстрый запуск на исполнение прямо из редактора и анализ ошибок, запуск готовых ACL программ во время редактирования текущей программы и некоторые дополнительные функции.
Таким образом, короткая программа -- это сам интерпретатор в виде одного файла vkACL.jar, а также большой набор других файлов, необходимых для полноценной работы. Более того, интерпретатор сделан таким образом. что один и тот же файл можно настроить и как среду разработки, и как интерпретатор одной ACL программы с собственным окном и настраиваемым меню, и как интерпретатор одной программы без окна, который работает молча и автоматически. При необходимости использовать расширенные версии достаточно только заменить один файл интерпретатора vkACL.jar. Любую ACL программу, в принципе, можно оформить как бесконечную, позволяющую выполнять любые работы. Вариант на выполнение одной ACL программы выглядит как обычная программа на языке Java с меню, имеющем функции для решения конкретной поставленной задачи. Таких программ может быть много, они все будут иметь разный внешний вид и выполнять разные задачи, хотя все различие сводится только к разному коду на языке ACL, в то время как Java код интерпретатора один и тот же. Такой вариант хорош для пользователей, не знающих ACL. Однако плодить разные программы все же менее удобно, чем все делать в одной программе. Поэтому я сам проигрывателем почти не пользуюсь. Ну и я еще попытался сделать java-апплет, хотя пока применимость апплета не очень просматривается.

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

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

Последние версии интерпретатора компилируются на Java версии 1.6.4. Таким образом, для их запуска нужна версия виртуальной машины не меньше указанной. А лучше всего иметь всегда самую последнюю версию.