# О программе vkACL

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

Чтобы было легко и удобно управлять всем этим кодом, написанным на Java, придуман новый язык программирования ACL (advanced command language), который значительно проще, чем Java и его назначение -- просто запускать в работу те самые процедуры, которые написаны на Java, а также снабжать их необходимыми входными параметрами. Вместе с тем, на этом языке можно писать и свои программы, которые не требуют очень больших циклов. Циклы тоже можно делать, просто расчеты с большими циклами будут выполняться очень медленно. Такие расчеты лучше программировать сразу на языке Java и потом просто запускать из ACL как готовую процедуру. Такая возможность тоже имеется и она легко реализуется.

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

Интерпретатор очень хорошо и быстро работал, обеспечивая выполнение многих функций, которые ранее выполнялись с помощью десятка разных программ с неудобным интерфейсом. Он позволял организовать любую программу с графическим интерфейсом пользователя за полчаса. Программу я, в основном, использовал для быстрой отладки графики, которую я всю программировал сам. Однако с появлением операционной системы Windows старый интерпретатор -- DOS программа -- потерял свою привлекательность. Более того, он просто не запускался под Виндовс, так как использовал некоторые запрещенные с точки зрения Виндовс приемы. Дело в том, что я к фортрану добавлял процедуры, написанные на ассемблере, которые имели доступ ко всей памяти компьютера, включая системную.

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

На ПК программа естественно тоже работала, только интерфейс не соответствовал. Получилось так хорошо, что я решил сделать отдельную версию для реализации на ПК с использованием стандартного языка Java версии 1.4.2. Это была последняя версия языка Java к моменту моего начала работы с Java. У стандартной версии больше возможностей так как она сразу ориентируется на ПК. В последующем обе версии стали слегка различаться по причине разных возможностей у КПК и ПК. Но главная структура языка все же общая.

За прошедшее время программа все время развивалась и модифицировалась. Было много вариантов интерпретаторов ACL в виде разных программ. В конце концов я вернулся к одному варианту, но этот вариант можно использовать с различным внешним видом и разными целями. Я перестал экономить на размере файла, так как скорости интернета и мощности компьютеров за последнее время очень сильно выросли. Более того, я стал использовать только 64-битную JRE (интерпретатор Java) для 64-битной операционной системы Виндовс и достаточно большой размер числового массива.

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

Сейчас программа состоит из интерпретатора в виде одного файла vkACL.jar, а также большого набора других файлов, необходимых для полноценной работы, которые записаны в файл vkACLa.zip. Более того, интерпретатор сделан таким образом. что один и тот же файл можно настроить и как среду разработки, и как интерпретатор одной ACL программы с собственным окном и настраиваемым меню, и как интерпретатор одной программы без окна, который работает молча и автоматически. При необходимости использовать разные версии достаточно заменить всего один файл интерпретатора vkACL.jar.

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

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

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

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

Программу можно использовать в качестве учебной для изучения программирования. Последние версии интерпретатора компилируются на Java версии 1.6.4. Таким образом, для их запуска нужна версия виртуальной машины не меньше указанной. А лучше всего иметь всегда самую последнюю 64-битную версию JRE. Дело в том, что компилятор Java и интерпретатор Java (JRE) -- это совсем не одно и то же. Компилятор просто проверяет код на правильность, а JRE его исполняет в конкретной операционной системе. И тут версия уже очень важна. На современных компьютерах не пройдут старые версии, на старых -- новые версии.