Добрый день, Сергей! Схема неплохая, реализовать в базовом варианте её просто. Но есть два недостатка: сложность и имя.
Чтобы откомпилировать программу в текущей реализации, никаких ключей компиляции учить не надо. Для сборки с ключами по умолчанию достаточно написать srefc исходник1.ref … исходникN.ref В результате в текущей папке появится один новый файл: исходник1.exe (на Windows, без расширения на unix-like). Если программист пользуется комментариями *$FROM, то можно вызвать srmake исходник1.ref с тем же результатом. Интерфейс даже проще, чем refc/refgo у Рефала-5. Интерфейс srefc повторяет интерфейс компиляторов Си. Можно написать gcc файл1.c … файлN.c и получить в текущей папке a.exe/a.out без лишнего мусора. Компиляторы C++ для Windows в подобной ситуации создадут файл1.exe и насыпят в текущую папку кучу объектников, файлов символов для отладки и т.д. Интерфейс вроде go или cargo (утилита сборки для Rust) не так очевиден — нужно запоминать не только имя самой утилиты, но и первый аргумент командной строки. Подход идеален для «мультитулов» вроде систем управления версиями, где разных режимов много и осваивать по любому надо все. Например, для той же системы управления версиями нужно и делать коммиты, и получать правки с сервера, и смотреть диффы… Вместо десятка взаимосвязанных утилит создаётся одна команда типа svn или git с первым аргументом — режимом работы. В моём случае для компилятора такого большого количества режимов не требуется (да я и не осилю столько). Режимов всего два: srefc и srmake, основным является первый. Технически от srmake можно вообще отказаться, переместив поиск зависимостей в сам компилятор и добавив для этого ключ командной строки (например, --scan-deps). Но я этого делать не хочу по идеологическим соображениям. Второй вопрос — это имя. Имя refal не подходит. Во-первых, длинное (ведь надо набирать ещё первый параметр). Во-вторых, а если другой разработчик Рефала тоже назовёт свою утилиту «refal»? Как разрешать такой конфликт? Я у себя на компьютере обнаружил • refal2.exe — Рефал-2 Белоуса, ещё посмотрел, проект https://github.com/cmc-msu-ai/refal тоже компилируется в refal2.exe, • refalb.exe — Рефал/2 Стеллецкого, • refalc.exe — Рефал-7 Скоробогатова: и ранняя версия, и версия дипломника Фаткуллина, • refald.exe — тоже Рефал/2 Стеллецкого, другая версия, поддерживает больший объём памяти, • refalx.exe — нашёл исходники некоего RefalX, судя по Makefile он собирается в исполнимый файл refalx из refalx.c, диалект некоего Антона Владимирова. • И, наконец, refal.exe — его можно собрать из архива, прикреплённого к старому письму в рассылку https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0712-utf8 С уважением, Александр Коновалов -----Original Message----- From: Скоробогатов Сергей Юрьевич skorobogatov_AT_bmstu.ru [mailto:refal@botik.ru] Sent: Wednesday, April 1, 2020 8:42 AM To: refal@botik.ru Subject: Re: Как мне назвать компилятор? А можно воспользоваться схемой, которая применяется, например, в языке Go. Существует утилита под названием "go", которая делает вообще всё. При вызове утилиты требуемое действие указывается первым аргументом командной строки: go build -- откомпилировать; go test -- запустить unit-тесты; go fmt -- отформатировать исходные тексты; и т.п. Соответственно для Рефала-лямбда такая утилита будет называться просто: refal. И будут у неё команды: refal build -- откомпилировать в байт-код; refal deploy -- откомпилировать в байт-код и присобачить интерпретатор байт-кода; refal run -- откомпилировать в байт-код и запустить; refal trace -- откомпилировать в байт-код и запустить в режиме отладки; refal spec -- запустить суперкомпилятор; и т.п. On Tue, 31 Mar 2020 19:07:27 +0300 Александр Коновалов a.v.konovalov87_AT_mail.ru <refal@botik.ru> wrote: > А вот называть интерпретатор rlint явно не стоит. Во-первых, оно >занято (аж два раза: раз <https://github.com/Lagoon/RLint> , два ><https://research.google/pubs/pub42577/> ). А во-вторых напоминает >линтер, которого для Рефала-5 пока нет. Но зачаток линтера будет — один >из моих дипломников будет добавлять два предупреждения в компилятор. >Одно тривиальное (но для него потребуется добавить в компилятор >поддержку предупреждений). А второе сложное, ему и посвящена >содержательная часть диплома. > > Александр Коновалов > > >From: Andrei Klimov andrei_AT_klimov.net [mailto:refal@botik.ru] > Sent: Tuesday, March 31, 2020 6:56 PM > To: refal@botik.ru > Subject: Re: Как мне назвать компилятор? > > > On Tue, Mar 31, 2020 at 6:35 PM Александр Коновалов >a.v.konovalov87_AT_mail.ru <http://a.v.konovalov87_AT_mail.ru> > <refal@botik.ru <mailto:refal@botik.ru> > wrote: > > Андрей! > > Понял мысль, спасибо. Менять местами 5 и l я бы не стал. И так иногда >их путают (здесь ><https://github.com/bmstu-iu9/refal-5-lambda/blob/master/doc/%D0%A0%D0% >9F%D0%97_%D0%A1%D0%B8%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2_%D0%9F%D1%80% >D0%BE%D0%B3%D0%BE%D0%BD%D0%BA%D0%B0_2019.pdf> > на титульном листе, здесь ><http://refal.botik.ru/events/IPSRAN-MGTU-seminar-11-06-2019/Optimizatc >iya_vstraivaniya_i_progonki_v_Refale-5lambda_Kirill-Sitnikov-11-06-2019 >.pdf> на первом слайде). К тому же запись rl5c сильно похожа на 15. > > Это я привел лишь для демонстрации идеи, как читаются буквы рядом с >цифрой, а не как предложение назвать. > > Можно вообще 5 выкинуть: rlc, rlmake, rlgo. Когда рядом с l нет цифры, >она не напоминает 1. А поскольку названия утилит как правило пишутся в >нижнем регистре, то не перепутаешь l с I. И l как длинная палка >отделяет разновидность утилиты. > > Да, мМне тоже кажется, что 5 можно убрать. > > > Андрей > > Удачно получилось у Рефала-05: компилятор refal05c.exe (даже 8.3!), >префиксы типов и функций рантайма r05_. Напомню, Рефал-05 — этот тот, >который распараллеливал Станислав. (Про дискуссию о распараллеливании я >не забыл — дочитаю старую статью Эйсымонта и отвечу.) > > Александр Коновалов > > >From: Andrei Klimov andrei_AT_klimov.net [mailto:refal@botik.ru ><mailto:refal@botik.ru> ] > Sent: Tuesday, March 31, 2020 6:06 PM > To: refal@botik.ru <mailto:refal@botik.ru> > Subject: Re: Как мне назвать компилятор? > > > On Tue, Mar 31, 2020 at 5:57 PM Александр Коновалов >a.v.konovalov87_AT_mail.ru <http://a.v.konovalov87_AT_mail.ru> > <refal@botik.ru <mailto:refal@botik.ru> > wrote: > > Андрей! > > «Цифра 5 в середине наименования Рефала мне не нравится: буква после >неё сливается с именем утилиты.» > > Не понял мысль. > > Рассмотрим первый вариант: r5lc, r5lmake > > Здесь глаз воспринимает 5 как разделитель, после которого слитно >читаются идентификаторы lc, make. > > Если, скажем, 5 и l поменять местами, получится: rl5c, rl5make. >Тогда имена "c" и "make" легко выделяются глазом. > > То же самое в hor5c, hor5make. > > > Андрей > > >From: Andrei Klimov andrei.klimov_AT_gmail.com ><http://andrei.klimov_AT_gmail.com> [mailto:refal@botik.ru ><mailto:refal@botik.ru> ] > Sent: Tuesday, March 31, 2020 5:52 PM > To: refal@botik.ru <mailto:refal@botik.ru> > Subject: Re: Как мне назвать компилятор? > > > Вообще-то цифры в названиях утилит я не люблю (пальцы надо >приподнимать к верхнему ряду), но в данном случае хотя бы есть плюс, >что цифра выделяет имя утилиты, которое быстро опознается глазом: >...c, ...make, ...int. > > Цифра 5 в середине наименования Рефала мне не нравится: буква после >нее сливается с именем утилиты. > > > Андрей > > > On Tue, Mar 31, 2020 at 5:39 PM Александр Коновалов >a.v.konovalov87_AT_mail.ru <http://a.v.konovalov87_AT_mail.ru> > <refal@botik.ru <mailto:refal@botik.ru> > wrote: > > Спасибо, Андрей! > > Вариант неплохой. Только я бы добавил циферку 5: hor5c, hor5make, >hor5go или hor5int для интерпретатора (вернее, загрузчика), который я >сейчас пишу. > > На всякий случай дополню: сам язык я не планирую переименовывать, он >так и остаётся Рефалом-5λ. > > >From: Andrei Klimov andrei_AT_klimov.net [mailto:refal@botik.ru ><mailto:refal@botik.ru> ] > Sent: Tuesday, March 31, 2020 5:30 PM > To: refal@botik.ru <mailto:refal@botik.ru> > Subject: Re: Как мне назвать компилятор? > > > Может так? -- > > Higher Order Refal – hor, horef: > > horc, horefc, hormake > > > Гуглом и словарями проверяем, что у этого слова нет нехороших смыслов. >Не обнаружено. > > По словарю: hor = horizon = горизонт. > > Ассоциация неплохая: рефал на горизонте; рефал, к которому стремимся; >рефал мечты. ;-) > > (Правда, горизонт мы не достигаем. Но это уж можно замять.:-)) > > > Андрей > > > On Tue, Mar 31, 2020 at 5:20 PM Александр Коновалов >a.v.konovalov87_AT_mail.ru <http://a.v.konovalov87_AT_mail.ru> > <refal@botik.ru <mailto:refal@botik.ru> > wrote: > > Спасибо за интересное предложение! > > Выглядит неплохо, хотя и натянуто. Связь между Рефалом-5λ и r5ac (или >ref5ac) не очевидна. Но столь же неочевидна связь и между Рефалом-5λ и >srefc. > > > Александр Коновалов > > -----Original Message----- >From: Boyko Bantchev boykobb_AT_gmail.com [mailto:refal@botik.ru ><mailto:refal@botik.ru> ] > Sent: Tuesday, March 31, 2020 3:09 PM > To: refal@botik.ru <mailto:refal@botik.ru> > Subject: Re: Как мне назвать компилятор? > > Имя музыкального тона «ля» созвучно со словом «лямбда», а обозначается >он через букву A. Тогда вместо префикса «r5l» можно «r5a». К тому же, >«a» — одна из обычных добавок к имени (подобно «плюс» и «прим»), чтобы >оно и было подобно, и отличалось от существующего. И, наконец, A не >сильно отличается от греческого Λ :) > > Конечно, всё это очень натянуто, но вряд ли в большей степени, чем >графическая имитация буквы Λ знаком \ (Haskell) или λ — знаком -> >(Ruby). > > Просто моите две стотинки :) > > On Tue, 31 Mar 2020 at 14:26, Александр Коновалов >a.v.konovalov87_AT_mail.ru <http://a.v.konovalov87_AT_mail.ru> > <refal@botik.ru <mailto:refal@botik.ru> > wrote: >> >> Добрый день всем! >> >> У компилятора название есть, такое же как у языка — Рефал-5λ. Но вот >>чего нет — нет нормального названия для утилиты командной строки. >> >> >> Исторический контекст (можно не читать). >> >> Когда-то я разрабатывал так называемый Простой Рефал — диалект, >>синтаксически похожий на Рефал-5 (но не совместимый с ним), >>семантически — на Рефал-2 (пустые функции вместо слов), поддерживающий >>только базисное подмножество. Позже я в него добавил безымянные >>вложенные функции (замыкания, «лямбды»). Исполнимый файл естественным >>образом назывался srefc (Simple Refal Compiler). Для компилятора была >>также утилита srmake, которая принимала на входе имя одного исходника, >>находила остальные по зависимостям и вызывала для них srefc. >> Зависимости вычислялись по комментариям вида >> >> //FROM имя-файла >> >> которые по соглашеню предваряли списки $EXTERN для функций из >>соответствующих файлов. >> >> Потом я понял, что несовместимый диалект не нужен даже мне и >>переделал компилятор в совместимый с Рефалом-5. Так появился язык >>Рефал-5λ, который является надмножеством Рефала-5 и включает в себя >>вложенные функции (что символизирует буква «λ» в названии). Но имя >>программы так и осталось srefc, а имя утилиты поиска зависимостей — >>srmake (которая теперь ищет комментарии *$FROM имя-файла). >> >> Исходники компилятора уже давно переписаны с Простого Рефала на >>Рефал-5λ (кроме фронт-энда Простого Рефала, который остался >>самоприменим), фронт-энд Простого Рефала я уже подумываю удалить, >>поэтому имена srefc и srmake становятся анахронизмом. >> >> >> Поэтому я прошу помощи у подписчиков: как мне назвать программу >>компилятора (вместо srefc) и программу поиска зависимостей (вместо >>srmake)? >> >> Можно сократить название refal-5-lambda до r5l и использовать его как >>префикс: r5lc, r5lmake. Но префикс r5l похож на r51 и r5I и этим >>неудачен — легко перепутать. Использовать имена r5c и r5make не хочу, >>т.к. это не Рефал-5, а Рефал-5λ. Имя вроде refal-5-lambda-compiler >>слишком длинное. >> >> По умолчанию компилятор создаёт исполнимые файлы, состоящие из >>интерпретатора, к которому «приклеен» байткод. Но можно создавать >>файлы и из голого байткода. Для запуска последних как программ я >>планирую написать интерпретатор вроде refgo из классического Рефала-5. >>Возникает вопрос: а какое ему дать имя? >> >> >> С уважением, >> Александр Коновалов >