«Ох, бедный парсер :-)
Выглядит неплохо, но на самом деле это получается не встроенная функция, а 
расширение синтаксиса.»

Снимать одновременно несколько линз одновременно, скорее всего, потребуется 
редко, поэтому создавать специальный синтаксис для этого неразумно, это верно.

Можно добавить и встроенную функцию <| терм>, в дополнение ко встроенным 
функциям арифметики: <+ …>, <* …> и т.д. Либо скучная встроенная функция 
<Unlens терм>.

 

«Также понятно, что вот я, например, давно перестал писать НА Рефале, потому 
что понимаю, что на других языках мне работать удобнее. И если выразительность 
Рефала существенно усилится, я с удовольствием снова на Рефал вернусь :-)»

Существенно усилится вложенными функциями, словарями и линзами? Рефлексией в 
виде доступа к коду на чтение и запись во время выполнения? Или что-то ещё?

Я долгое время разрабатывал (и, возможно, продолжу) компиляторы Рефала, т.к. их 
разработка ставит много интересных задач, прежде всего, по эффективной 
реализации всей этой выразительности. Вне этого я Рефалом почти не пользовался, 
т.к. нет библиотек и кучу всего базового приходится писать с нуля. Ну и плюс 
производительность. Ну и я бы не сказал, что код каких-то бытовых задач на 
Рефале будет компактнее кода на других языках, либо я пишу слишком «рыхло» с 
длинными именами переменных.

 

From: Sergei Skorobogatov s.yu.skorobogatov_AT_gmail.com <[email protected]> 
Sent: Friday, November 15, 2024 2:56 PM
To: [email protected]
Subject: Re: Синтаксис словарей в Рефале!

 

On Fri, Nov 15, 2024 at 9:40 AM Александр Коновалов a.v.konovalov87_AT_mail.ru 
<http://a.v.konovalov87_AT_mail.ru>  <[email protected] <mailto:[email protected]> > 
wrote:

«А, у вас компилятор заново строит результатное выражение, да? Т.е. если в 
образце — скобки, и в результатном выражении — скобки, то скобки в результатном 
выражении будут созданы заново? Тогда тяжело. В принципе, если навострить 
компилятор брать скобочные термы из образца и вставлять их (или их копию) в 
результатное выражение, то всё получится автоматически.»

Смотря какой компилятор. <....>

Если делать оптимизирующий компилятор с массивным представлением или 
представлением с подвешенными круглыми скобками, то семантику из предыдущего 
письма сделать будет проще.

Ага, а в векторно-списковым представлении сборка результатных выражений из 
минимального количества фрагментов аргумента -- это вообще must have. При этом 
проблема разлучения круглых скобок не может возникнуть.

 

On Fri, Nov 15, 2024 at 9:40 AM Александр Коновалов a.v.konovalov87_AT_mail.ru 
<http://a.v.konovalov87_AT_mail.ru>  <[email protected] <mailto:[email protected]> > 
wrote:

«4.3. Хотелось бы уметь переходить к оригинальным версиям термов в функциях, 
вызываемых из „линзированной“ функции. Как это сделать красиво, я не придумал.»

<...>

Я бы предложил использовать встроенную функцию с именем «|»:

<| терм> — разлинзирует однократно,
<|| терм> — двухкратно,
<||| терм> — трёхкратно и т.д.

Разлинзировать можно неограниченное количество раз, т.к. если линзы кончились, 
терм перестаёт меняться.

Ох, бедный парсер :-)

Выглядит неплохо, но на самом деле это получается не встроенная функция, а 
расширение синтаксиса.

 

On Fri, Nov 15, 2024 at 9:40 AM Александр Коновалов a.v.konovalov87_AT_mail.ru 
<http://a.v.konovalov87_AT_mail.ru>  <[email protected] <mailto:[email protected]> > 
wrote:

Я правильно понял, что если линза трансформировала терм, то на выходе он 
восстановится, а если удалила, то уже нет?

Да, так и есть. Хотя это не всегда то, чего хочется. К сожалению, я не 
придумал, как сделать по-другому без введения специального синтаксиса для 
написания линз.

 

On Fri, Nov 15, 2024 at 9:40 AM Александр Коновалов a.v.konovalov87_AT_mail.ru 
<http://a.v.konovalov87_AT_mail.ru>  <[email protected] <mailto:[email protected]> > 
wrote:

Кстати, уже в третий раз замечаю, что Вы предпочитаете добавлять к объектным 
выражениям неявные атрибуты, т.е. невидимые для сопоставления с образцом <...>

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

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

 

Что касается усложнения преобразования кода, то я предполагаю, что в данной 
дискуссии мы обсуждаем добавление в Рефал возможностей, облегчающих жизнь 
программистам НА Рефале, а не программистам НАД Рефалом. Понятно, что все эти 
расширения языка -- функциональные термы, словари, линзы -- только портят жизнь 
программистам НАД Рефалом. Также понятно, что вот я, например, давно перестал 
писать НА Рефале, потому что понимаю, что на других языках мне работать 
удобнее. И если выразительность Рефала существенно усилится, я с удовольствием 
снова на Рефал вернусь :-)

  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • Re:... Стеллецкий Василий sw710_AT_yandex . ru
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Arkady Klimov arkady . klimov_AT_gmail . com
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • Re:... Arkady Klimov arkady . klimov_AT_gmail . com
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить