Страницы

понедельник, 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.
  • Устранено падение при разборе суммы константных значений некорректного типа.

Обработка ошибок

Тема корректной обработки ошибок в программе является довольно сложным вопросом в программировании. Отчасти от того, что и она сама являет...