воскресенье, 13 июня 2021 г.

Сборка APK на Android

Недавно в меру потребности стал использовать Termux - эмулятор терминала для Android с очень богатыми возможностями. Для него поддерживаются репозитории с множеством специализированных deb-пакетов с возможностью установки, аналогичной дистрибутивам GNU/Linux. Средства разработки представлены достаточно широко, поэтому появилось закономерное желание проверить работоспособность транслятора Восток в таком не совсем обычном окружении.

понедельник, 31 мая 2021 г.

Версия 0.0.6

Выпущено обновление транслятора, библиотеки и сборщика Android приложений.

  • Существенно уменьшен расход памяти в сгенерированном коде JavaScript при наличии проверок индексов массивов.
  • Улучшена совместимость генерируемого кода на C со стандартом ISO C90. Исправлена генерация кода для ODD().
  • Воплощено распознавание расположения библиотеки по умолчанию в среде macOS.
  • Добавлена возможность получения файла .jar в качестве цели трансляции.
  • В Android-сборщике улучшена совместимость с более новыми версиями SDK и увеличена гибкость настройки сборки.
  • Улучшена совместимость получаемых APK приложений с версиями Android выше 7-й.

Расширение возможностей установки

понедельник, 10 мая 2021 г.

Snap - пакет

Добавил возможность собирать snap-пакеты, которые позволяют установку программы в самых разных дистрибутивах GNU/Linux, но, в первую очередь, в Ubuntu. Snap не лишена недостатков, но в одном ряду со сборкой rpm и, тем более, deb она показалось самой простой и логичной для разработчика.

суббота, 8 мая 2021 г.

Оптимизация памяти в JavaScript при проверке индексов массивов

Добавив в benchmark, в качестве которого служит сам транслятор, исполнение версий на Java и JavaScript, обнаружил, что для последнего при включённых проверках индексов массивов происходит ~ 8-кратный перерасход памяти по сравнению с выключенными проверками, что было незаметно на небольших программах. Расход памяти, в свою очередь, приводит и к ощутимо большему времени исполнения, чего, опять-таки, не было в простых тестах.

Перерасход был вызван, в основном, тем, что методы доступа к элементам массива находились в самом массиве, что было сделано в расчёте на потенциально высокую возможность оптимизации при JIT-исполнении и без учёта влияния на занимаемую память. Замеры показали всё, как есть - и неоправдавшиеся надежды на оптимизации, и ужасы накладных расходов на сборку мусора.

Оптимальным по всем параметрам решением оказалось добавление методов доступа непосредственно классу Array вместо создания дополнительных обёрток.

Дополнительно в JavaScript была устранена генерация проверок индекса для простых случаев, когда статически известно о гарантиях корректного обращения к массиву. Также, была усовершенствована пометка переменных, которые участвуют в вызовах подпрограмм в качестве VAR-параметров, что в Java и JavaScript имитируется через массивы. Это позволило устранить превращение в массивы переменных в вызовах NEW, PACK, UNPK.

суббота, 1 мая 2021 г.

Версия 0.0.5

Выпущено обновление транслятора и библиотеки.

  • Исправлена возможность отключения проверки индекса массива для JavaScript.
  • Улучшена генерация C, уменьшающая количество предупреждений, выдаваемых трансляторами С, и устранено обращение к первому члену структуры через нулевой указатель для получения адреса, что с некоторых пор и в gcc трактуется как неопределённое поведение.
  • Исправлен вывод русских сообщений в случае, если кодировка задана как utf8, а не UTF-8, что встречается в дистрибутивах наподобие Alt Linux.
  • Устранено падение при разборе суммы константных значений некорректного типа.

суббота, 27 марта 2021 г.

Версия 0.0.4

Зафиксировал новые версии трансляторов и библиотеки. Со времени прошлого выпуска прошло больше года. Помимо исправления ошибок была усовершенствована генерация JavaScript-кода, а также был добавлен генератор Oberon-кода, позволяющий компилировать результат трансляторами Component Pascal и Active Oberon.

воскресенье, 14 февраля 2021 г.

Telegram бот

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

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

Поддерживаются 2-е дополнительные команды:

  1. /LIST выводит список доступных модулей, правда, большинство из которых в режиме песочницы выступают лишь заглушками
  2. /INFO Module выводит список экспортированных процедур модуля

Сборка APK на Android

Недавно в меру потребности стал использовать Termux - эмулятор терминала для Android с очень богатыми возможностями. Для нег...