Добрый вечер, Александр! «Что хотелось бы добавить в Рефал: 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]>
