Добрый день всем! Добавлю немного своего мёда в бочку.
Плюсы для меня: * Внешняя простота и неизбыточность концепции языка. Нет попытки вместить в себя всё сразу. Это даёт лёгкость вхождения. А необходимое можно допрограммировать и это может выглядеть весьма органично. * Язык не навязывает «технарский» тип мышления в духе программ для станка-автомата. Программирование на нём не утомляет, а просветляет голову. * Гибкость формы записи. Введение мнемонических идентификаторов может создать проблемно-ориентированный диалект для непрограммистов. Важно соблюдать меру. Что хотелось бы добавить в Рефал: * Для расширения круга программистов на Рефале нужен осовремененный стандарт языка, включающий 1) UNICODE в основе; 2) Удобный механизм подключения внешних библиотек в духе Githab; 3) Лёгкая интеграция с другими современными технологиями (интернет, базы данных); 4) Некоторая корректировка архаичного по нынешним меркам синтаксиса; * Возможность ускорения вычислений за счёт использование возможностей современного «железа»; * Всякие «плюшки» вроде распараллеливания и других крутых штучек можно рассматривать только после наступления ясности с результатом «реанимационных мероприятий». Мои идеи: * Новая сущность: вместо классического исполнения программы «загрузил-выполнил-посмотрел результат» использовать циклическую последовательность «запустил-открыл сессию-(1)-загрузил-выполнил-остановил или перешел к (1)» с сохранением результата в виде обновлённых функций или содержимого копилок или ящиков. Причём эти данные могут быть доступны из других сессий в реальном времени. Это было реализовано, но не доделано и оставлено «до лучших времён». Возможно, это первоначально навеяно средой исполнения языка Forth. Мысль зародилась примерно в в 2017 году, но пока она неспешно развивалась, ушлые люди создали GhatGPT и теперь догонять их «по прямой» мало реально. * Реализация Рефала внутри совершенно другой языковой среды средствами этой среды. Например golang или sql. Это снимает весьма болезненный вопрос встраивания функционала Рефала в различные сложносочинённые приложения. * Рефал может быть использован для конструирования и контроля нейронных сетей. Фактически это технология альтернативная нейронкам и отвечающая обозначившимся потребностям как раз в их контроле. Мои выводы: * Нынче серьёзный проект не запустить малыми силами одиночек, нужно или объединение единомышленников с взаимной ответственностью, либо изыскание средств со всеми вытекающими проблемами. На меня произвел большое впечатление объём вложений в нейронки ведущими компаниями. Даже если сделать что-то лучшее, убивая своё здоровье вечерами, этого просто почти никто в мире не заметит. * С учётом реалий, сам Рефал обществу не интересен, нужны приложения, которые реализовать другими средствами невозможно или сильно затруднительно. И при наличии достаточного количества относительно новых языков с очень неплохими возможностями, нельзя не оценивать их конкурентные перспективы. * Что касается меня, мне Рефал нравится и я не имею желания приспосабливать другой, даже бесплатно полученный из Америки или откуда ещё, язык к нуждам России. Очень надеюсь ещё поработать на нём и радостью бы принял посильное участие в формировании нормального продукта, соответствующего времени. >Вторник, 5 ноября 2024, 16:22 +03:00 от Александр Коновалов >a.v.konovalov87_AT_mail.ru <[email protected]>: > >Добрый день! >Предлагаю порассуждать на тему применимости Рефала сегодня : какие у него >могут быть преимущества перед другими языками и как ими можно воспользоваться. > >Я могу выделить следующие черты Рефала : >* >динамически типизированный с закрытым набором типов — есть ограниченный набор >встроенных типов данных, пользовательские типы конструируются на уровне >соглашений (исключение: пара моих реализаций, где есть инкапуслирующие >квадратные скобки — небесспорное расширение) — примерно та же ситуация, что и >в классической Scheme; >* >мощное сопоставление с образцом — сопоставлением с образцом сейчас уже никого >не удивишь, оно есть даже в Питоне (начиная с версии 3.10 или 3.11, и тоже >довольно выразительное), но есть две достаточно редкие черты: >* >повторные переменные, и соответственно, встроенное в язык понятие равенства >(однако, есть в Racket и есть в Scala), >* >поиск в середине последовательности по образцу «e.X PAT e.Y», аналогичная >возможность есть только в Tom (предназначен для работы с 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]
