Kframework (https://kframework.org/), система для прототипирования и изучения семантик виртуальных машин и языков программирования, имеет схожие черты с Рефалом. Мне кажется интересным применить Рефал в этой области.
Хотя в лингвистике сейчас все захватили нейросети, мне кажется что для работы с текстами у классических методов есть шансы, скажем опередить нейросети по энергопотреблению и возможности анализа. Здесь интересно было бы генрировать программы анализа естественного языка и перевода с него на язык формальной логики с помощью машинного обучения (генетических алгоритмов, чего-то типа индуктивного логического программирования). On Tue, Nov 5, 2024 at 4:21 PM Александр Коновалов a.v.konovalov87_AT_mail.ru <[email protected]> wrote: > Добрый день! > > Предлагаю порассуждать на тему применимости Рефала сегодня: какие у него > могут быть преимущества перед другими языками и как ими можно > воспользоваться. > > Я могу выделить следующие черты Рефала: > > - динамически типизированный с закрытым набором типов — есть > ограниченный набор встроенных типов данных, пользовательские типы > конструируются на уровне соглашений (исключение: пара моих реализаций, где > есть инкапуслирующие квадратные скобки — небесспорное расширение) — > примерно та же ситуация, что и в классической 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. Синтаксис > Рефала и основные приёмы программирования можно рассказать за две пары, > а затем уже студенты могут писать компиляторы для подобных программ > в рамках домашних работ. Более подходящего языка для этого курса я не вижу. > > > *Других применений, где Рефал уместнее других языков программирования, я > пока не встречал. А вы?* > > *Где ещё Рефал может быть уместнее других языков программирования?* > > > С уважением, > Александр Коновалов >
