Добрый день, Сергей!

Схема неплохая, реализовать в базовом варианте её просто. Но есть два 
недостатка: сложность и имя.

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

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. 
>>Возникает вопрос: а какое ему дать имя?
>>
>>
>> С уважением,
>> Александр Коновалов
> 


  • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Andrei Klimov andrei_AT_klimov . net
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
        • ... Andrei Klimov andrei . klimov_AT_gmail . com
          • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
            • ... Andrei Klimov andrei_AT_klimov . net
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
            • ... Andrei Klimov andrei_AT_klimov . net
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
            • ... Скоробогатов Сергей Юрьевич skorobogatov_AT_bmstu . ru
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Yuri Klimov yuri_AT_klimov . net
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
        • ... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить