Сообщения о трансляторе переехали в отдельный блог.
В операционной системе Oberon в качестве скриптового языка используется одноимённый язык, на котором написана сама система, что в духе минимализма всей системы в целом и языка в частности. Для транслятора "Восток" я воплотил схожий способ запуск команд из модулей. Но если в ОС Оберон для запуска команды достаточно клика мыши на записи, состоящей из имени модуля, точки и имени экспортированной процедуры, например
Hello.Come
текст модуля
MODULE Hello; IMPORT Out; PROCEDURE Come*; BEGIN Out.String("Hello"); Out.Ln END Come; PROCEDURE Gone*; BEGIN Out.String("Bye"); Out.Ln END Gone; END Hello.
$ result/o7c run Hello.Come -infr . -m exampleТак как установка ранее не была предусмотрена, то требовалось указывать полное имя транслятора и пути к основным библиотекам.
Как показал опыт, некоторые люди даже знакомые с принципами ОС Оберон без чтения справки ожидали от транслятора поведения, схожего с компиляторами Си, которые работают с кодом в файлах, то есть, чего-то такого
$ result/o7c run example/Hello.mod -infr .
Я, наконец, решил улучшить интеграцию с GNU/Linux. Сначала добавил возможность установки с использованием в трансляторе пути к основным библиотекам по умолчанию. Для этого я внёс соответствующие изменения в код и добавил процедуры Install, InstallTo, Remove, RemoveFrom в сборочный модуль make.mod. Заодно переименовал исполняемый файл из o7c(Oberon-7 compiler) в ost(Oberon-seven translator). Чтобы установить транслятор нужно выполнить команду:
$ /usr/bin/sudo result/ost run make.Install -infr . -m sourceПосле установки станет возможным запускать модули так:
$ ost run Hello.Come -m example
Следующим шагом я добавил режим запуска модуля с указанием одноимённого файла, в котором он находится
$ ost .Come example/Hello.mod
$ ost . example/Hello.mod Come
Если же автор поместил код для выполнения в секцию инициализации модуля, то запуск ещё упрощается
MODULE Hello; IMPORT Out; BEGIN Out.String("Hello"); Out.Ln END Hello.
$ ost example/Hello.modМне такой подход не нравится, так как снижает гибкость запуска и требует написания разбора текстовых аргументов программы там, где может быть достаточно создания разных экспортированных процедур в коде модуля, но некоторым нравится из-за краткости.
Для всех типов запуска с указанием файла теперь есть возможность задействовать особенность POSIX систем - she-bang, позволяющий запускать скрипты любого языка без привязки иполнителя по расширению файла. Например:
#!/usr/local/bin/ost . Так как код на Обероне не привязан к понятию файла, а имеет чёткие границы, то за пределами модуля можно писать разный текст, в том числе и she-bang MODULE Hello; IMPORT Out; PROCEDURE Come*; BEGIN Out.String("Привет."); Out.Ln END Come; PROCEDURE Gone*; BEGIN Out.String("Бывай."); Out.Ln END Gone; END Hello.После придания файлу атрибута исполнимости:
$ chmod +x example/Hello.modЕго можно запускать без обращения к транслятору напрямую:
$ example/Hello.mod Come Привет. $ example/Hello.mod Gone Бывай.