Страницы

среда, 26 июня 2019 г.

Связка с кодом на других высокоуровневых языках

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

В трансляторе "Востока" сейчас применён более простой модульный подход. Входной язык не содержит никаких расширений, а для связывания используется подмена кода на входном языке на код на выходном языке. То есть, интерфейсный модуль на Обероне с, возможно, пустыми типами и процедурами во время полной трансляции заменяется соответствующим файлом-"модулем" на С, Java или JavaScript, заполненным нужным функционалом.

понедельник, 17 июня 2019 г.

deb - пакеты

Добавил возможность сборки deb-пакетов для предоставления пользователю GNU/Linux более удобного способа установки транслятора.

Текущая сборка разбивается на 2-е части - исполняемый файл транслятора и первоначальная библиотека поддержки. Из-за того, что библиотека на текущем уровне развития доступна только на уровне исходного кода, то она не зависит от процессорной платформы. Транслятор же для повышения универсальности собирается для i386 со статическим связыванием со стандартной библиотекой. Если для этого вместо glibc использовать musl-libc или dietlibc, то размер выходного файла получается вполне приемлемым.

Для такой сборки я использовал следующую команду в каталоге проекта из 32-битной Ubuntu 18.04:

$ result/bs-ost run 'make.UseCC("musl-gcc -Os -flto -static"); make.Build; make.Deb' -infr . -m source
Предварительно нужно установить вспомогательные утилиты:
$ /usr/bin/sudo apt install hashdeep musl-tools 
И собрать раскруточную версию транслятора:
$ ./init.sh 
Под командой make.Deb скрываются команды оболочки sh:
для сборки vostok-deflib.deb
rm -r result/vostok-deflib
mkdir -p result/vostok-deflib result/vostok-deflib/DEBIAN result/vostok-deflib/usr/share/doc/vostok-deflib result/vostok-deflib/usr/share/vostok
cp -r library result/vostok-deflib/usr/share/vostok/
cp -r singularity result/vostok-deflib/usr/share/vostok/
cp package/DEBIAN/control-deflib result/vostok-deflib/DEBIAN/control
gzip -9cn package/DEBIAN/changelog-deflib > result/vostok-deflib/usr/share/doc/vostok-deflib/changelog.gz
cp package/DEBIAN/copyright-deflib result/vostok-deflib/usr/share/doc/vostok-deflib/copyright
cd result/vostok-deflib
md5deep -rl usr > DEBIAN/md5sums
cd ..
fakeroot dpkg-deb --build vostok-deflib
для сборки vostok-bin.deb
rm -r result/vostok-bin
mkdir -p result/vostok-bin/DEBIAN result/vostok-bin/usr/share/doc/vostok-bin result/vostok-bin/usr/bin
cp result/ost result/vostok-bin/usr/bin/
cp package/DEBIAN/control-bin result/vostok-bin/DEBIAN/control
gzip -9cn package/DEBIAN/changelog-bin > result/vostok-bin/usr/share/doc/vostok-bin/changelog.gz
cp package/DEBIAN/copyright-bin result/vostok-bin/usr/share/doc/vostok-bin/copyright
cp package/DEBIAN/ost.1 result/vostok-bin/DEBIAN/ost.1
cd result/vostok-bin
md5deep -rl usr > DEBIAN/md5sums
cd ..
fakeroot dpkg-deb --build vostok-bin

В результате сотрудничества с другими проектами на Обероне, deb-пакеты и их обновления доступны в общем репозитории https://wiki.oberon.org/repo

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

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