Добрый вечер, Александр!

«Что хотелось бы добавить в Рефал:
1. Для расширения круга программистов на Рефале нужен осовремененный стандарт 
языка, включающий
1) UNICODE в основе;»

При реализации с нуля для голого железа задача крайне громоздкая. Сейчас над 
ней работает Андрей Петрович Немытых, о чём он уже когда-то писал в рассылку.

Можно задачу упростить, реализуя Рефал поверх среды, поддерживающей Юникод: JVM 
или .NET.

«2) Удобный механизм подключения внешних библиотек в духе GitHub;»

Я когда-то даже формулировал спецификацию, но руки сделать не дошли. Пока не 
дошли. Спецификация:

https://github.com/Mazdaywik/refal-5-framework/issues/10

«3) Лёгкая интеграция с другими современными технологиями (интернет, базы 
данных);»

Да, Рефалу не хватает интерфейса с другими языками — собственно, из-за этого я 
когда-то и начал писать свои реализации. Есть интерфейс с языком Си у Рефала-2, 
интерфейс с целевыми языками у Рефала Плюс (он может компилироваться в Java и 
C++), но эти диалекты несколько специфические. Есть документированный интерфейс 
у моего Рефала-05 (язык, почти совпадающий с Рефалом-5):

https://mazdaywik.github.io/Refal-05/5-implementation.html

Рефал-05 позволяет пользователю писать функции на Си и вызывать их из Рефала. 
Однако обратный интерфейс (вызов функций Рефала из Си) пока не реализован.

«4) Некоторая корректировка архаичного по нынешним меркам синтаксиса;»

А с этого места, пожалуйста, поподробнее.

«2. Возможность ускорения вычислений за счёт использование возможностей 
современного «железа»;»

И здесь тоже поподробнее.

«3. Всякие „плюшки“ вроде распараллеливания и других крутых штучек можно 
рассматривать только после наступления ясности с результатом “реанимационных 
мероприятий“.»

Есть поддержка распараллеливания в Рефале Плюс. Я давал курсовую на тему 
распараллеливания Рефала-05, студент на эту тему даже делал доклад в ИПМ РАН, 
но реализация до конца не была отлажена:

https://github.com/Santalov/Refal-05 (код распараллеливания не в master)

 

«Мои идеи:
1. Новая сущность: вместо классического исполнения программы 
„загрузил-выполнил-посмотрел результат“ использовать циклическую 
последовательность „запустил-открыл сессию-(1)-загрузил-выполнил-остановил или 
перешёл к (1)“ с сохранением результата в виде обновлённых функций или 
содержимого копилок или ящиков. Причём эти данные могут быть доступны из других 
сессий в реальном времени.»

Работу с одиночной сессией, как мне кажется, можно реализовать в Рефале-6 не 
выходя за рамки текущей реализации. Сессия будет выглядеть как консоль REPL. 
Для реализации нескольких взаимодействующих сессий либо работе в стиле Jupyter 
Notebook уже нужно реализовывать поддержку сети в Рефале. Мне неизвестны 
реализации Рефала с поддержкой сети.

«2. Реализация Рефала внутри совершенно другой языковой среды средствами этой 
среды. Например golang или sql. Это снимает весьма болезненный вопрос 
встраивания функционала Рефала в различные сложносочинённые приложения.»

Как минимум, нужен современный Рефал, имеющий интерфейс с языком Си в обе 
стороны: вызов функций, написанных на Си, из Рефала, и вызов функций Рефала из 
кода на Си. Такое умеет Рефал-2, но синтаксис у него, на мой вкус, архаичный.

Возможно создание транспиляторов Рефала в Go или Java для бесшовного 
взаимодействия с этими платформами. Для Java уже делалась попытка братьями 
Климовыми:

http://refal.ru/~arklimov/refal6/refal-j.htm
http://refal.ru/~arklimov/refal6/M7-RefalJava.htm

«3. Рефал может быть использован для конструирования и контроля нейронных 
сетей. Фактически это технология альтернативная нейронкам и отвечающая 
обозначившимся потребностям как раз в их контроле.»

Тут мне прокомментировать нечего, т.к. в нейронках я несведущ.

 

«Мои выводы:
…
2. С учётом реалий, сам Рефал обществу не интересен, нужны приложения, которые 
реализовать другими средствами невозможно или сильно затруднительно. И при 
наличии достаточного количества относительно новых языков с очень неплохими 
возможностями, нельзя не оценивать их конкурентные перспективы.»

Собственно, об этом я и начал дискуссию в переписке. Понять, какие приложения 
реализовать другими средствами невозможно или сильно затруднительно.

 

 

С уважением,
Александр Коновалов

 

From: Александр Гусев gusev_aleksandr_AT_mail.ru <[email protected]> 
Sent: Wednesday, November 6, 2024 2:04 PM
To: [email protected]
Subject: Re: Сфера применения Рефала

 

Добрый день всем!

 

Добавлю немного своего мёда в бочку.

Плюсы для меня:

1.      Внешняя простота и неизбыточность концепции языка. Нет попытки вместить 
в себя всё сразу. Это даёт лёгкость вхождения. А необходимое можно 
допрограммировать и это может выглядеть весьма органично.
2.      Язык не навязывает «технарский» тип мышления в духе программ для 
станка-автомата. Программирование на нём не утомляет, а просветляет голову.
3.      Гибкость формы записи. Введение мнемонических идентификаторов может 
создать проблемно-ориентированный диалект для непрограммистов. Важно соблюдать 
меру.

Что хотелось бы добавить в Рефал:

1.      Для расширения круга программистов на Рефале нужен осовремененный 
стандарт языка, включающий
1) UNICODE в основе;
2) Удобный механизм подключения внешних библиотек в духе Githab;
3) Лёгкая интеграция с другими современными технологиями (интернет, базы 
данных);
4) Некоторая корректировка архаичного по нынешним меркам синтаксиса;
2.      Возможность ускорения вычислений за счёт использование возможностей 
современного «железа»;
3.      Всякие «плюшки» вроде распараллеливания и других крутых штучек можно 
рассматривать только после наступления ясности с результатом «реанимационных 
мероприятий».

Мои идеи:

1.      Новая сущность: вместо классического исполнения программы 
«загрузил-выполнил-посмотрел результат» использовать циклическую 
последовательность «запустил-открыл сессию-(1)-загрузил-выполнил-остановил или 
перешел к (1)» с сохранением результата в виде обновлённых функций или 
содержимого копилок или ящиков. Причём эти данные могут быть доступны из других 
сессий в реальном времени. Это было реализовано, но не доделано и оставлено «до 
лучших времён». Возможно, это первоначально навеяно средой исполнения языка 
Forth. Мысль зародилась примерно в в 2017 году, но пока она неспешно 
развивалась, ушлые люди создали GhatGPT и теперь догонять их «по прямой» мало 
реально.

2.      Реализация Рефала внутри совершенно другой языковой среды средствами 
этой среды. Например golang или sql. Это снимает весьма болезненный вопрос 
встраивания функционала Рефала в различные сложносочинённые приложения.

3.      Рефал может быть использован для конструирования и контроля нейронных 
сетей. Фактически это технология альтернативная нейронкам и отвечающая 
обозначившимся потребностям как раз в их контроле.

Мои выводы:

1.      Нынче серьёзный проект не запустить малыми силами одиночек, нужно или 
объединение единомышленников с взаимной ответственностью, либо изыскание 
средств со всеми вытекающими проблемами. На меня произвел большое впечатление 
объём вложений в нейронки ведущими компаниями. Даже если сделать что-то лучшее, 
убивая своё здоровье вечерами, этого просто почти никто в мире не заметит.
2.      С учётом реалий, сам Рефал обществу не интересен, нужны приложения, 
которые реализовать другими средствами невозможно или сильно затруднительно. И 
при наличии достаточного количества относительно новых языков с очень неплохими 
возможностями, нельзя не оценивать их конкурентные перспективы.

3.      Что касается меня, мне Рефал нравится и я не имею желания 
приспосабливать другой, даже бесплатно полученный из Америки или откуда ещё, 
язык к нуждам России. Очень надеюсь ещё поработать на нём и радостью бы принял 
посильное участие в формировании нормального продукта, соответствующего времени.

Вторник, 5 ноября 2024, 16:22 +03:00 от Александр Коновалов 
a.v.konovalov87_AT_mail.ru <[email protected] <mailto:[email protected]> >:
 

Добрый день!

 

Предлагаю порассуждать на тему применимости Рефала сегодня: какие у него могут 
быть преимущества перед другими языками и как ими можно воспользоваться.

 

Я могу выделить следующие черты Рефала:

*       динамически типизированный с закрытым набором типов — есть ограниченный 
набор встроенных типов данных, пользовательские типы конструируются на уровне 
соглашений (исключение: пара моих реализаций, где есть инкапуслирующие 
квадратные скобки — небесспорное расширение) — примерно та же ситуация, что и в 
классической Scheme;

*       мощное сопоставление с образцом — сопоставлением с образцом сейчас уже 
никого не удивишь, оно есть даже в Питоне (начиная с версии 3.10 или 3.11, и 
тоже довольно выразительное), но есть две достаточно редкие черты:

*       повторные переменные, и соответственно, встроенное в язык понятие 
равенства (однако, есть в Racket и есть в Scala),

*       поиск в середине последовательности по образцу «e.X PAT e.Y», 
аналогичная возможность есть только в Tom <https://tom.loria.fr/>  
(предназначен для работы с XML и вообще удивительно похож на Рефал);

*       встроенная в семантику конкатенация — в результатных выражениях она 
записывается пустым местом, в других языках синтаксис конкатенации более 
многословный,

*       симметричный доступ к обоим концам последовательности в образцах — в 
большинстве функциональных языков встроенными (основными) последовательностями 
являются однонаправленные списки и образцы допускают обращение только слева, 
исключения — Scala, где есть «:+» и «+:», сопоставление с эллипсисом в макросах 
Scheme и образцах Racket, образцы в Python, но там списки — массивы,

*       возврат из функции нескольких значений столь же (не)естественнен, как и 
передача нескольких аргументов.

 

Подытоживая, Рефал — динамически типизированный функциональный язык с 
выразительным сопоставлением с образцом, позволяющий удобно преобразовывать 
иерархические данные, например, синтаксические деревья. И сами данные, и их 
сопоставление с образцом, и построение новых значений записываются без лишнего 
синтаксического шума, т.е. всевозможных запятых, значков «+», «++», «+:» и 
прочих. Благодаря динамической типизации, он годится для быстрого написания 
небольших программ, выполняющих символьные вычисления. Но с другой стороны, 
написание крупных программ, разрабатываемых коллективами затрудняется: типы всё 
равно придётся определять и документировать, что для Рефала, как правило, 
делается комментариями с грамматикой для объектных выражений.

 

Я пока нашёл только одну сферу, где Рефал неплох и абсолютно уместен — рабочий 
язык для небольшого курса, посвящённого генерации кода. Студенты пишут 
программы, принимающие на входе синтаксическое дерево, и порождающие код для 
модельного ассемблера. Пример синтаксического дерева:

(function gcd (x y)
  (var (rem 1))
  (while ((L y) "<>" 0)
    (rem "=" ((L x) "%" (L y)))
    (x "=" (L y))
    (y "=" (L rem))
  )
  (return (L x))
)

Синтаксическое дерево одновременно выглядит как код на ЯП и одновременно 
машиночитаемо — это просто запись объектного выражения Рефала-5. Синтаксис 
Рефала и основные приёмы программирования можно рассказать за две пары, а затем 
уже студенты могут писать компиляторы для подобных программ в рамках домашних 
работ. Более подходящего языка для этого курса я не вижу.

 

Других применений, где Рефал уместнее других языков программирования, я пока не 
встречал. А вы?

 

Где ещё Рефал может быть уместнее других языков программирования?

 

С уважением,

Александр Коновалов

 

 

С уважением,
Александр Гусев
[email protected] <mailto:[email protected]> 

 

  • Сф... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Arkady Klimov arkady . klimov_AT_gmail . com
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Mike Potanin mpotanin_AT_gmail . com
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Александр Гусев gusev_aleksandr_AT_mail . ru
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить