День добрый, всем! Вот за что я и люблю Рефал Плюс. И это объесняет мое молчание. Даже когда обсуждается геерация Си кода по рефал-программе (ведь там такие статьи написаны и доступны про правильную компиляцию отождествления).
Ни, и, конечно, представление рефал-выражений обязано быть массивным. Всего доброго, Сергей Абрамов Вы писали 04 февраля 2018 г., 01:46:37: > Не согласен.Рефал хорош был своей простотой, технологичностью. Это > и старшее поколение специалистов, наших учителей, ценило в этом > языке прежде всего. Что было сделано Сергеем и Андреем в Рефале-2 - > это, наверное, оптимальный уровень его усложнения для практического > применения.Мы на протяжении десятилетий на этом диалекте языка > создавали очень сложные компиляторы языков высокого уровня для > необычных новых машин советского времени. Причем именно эта > технология была решающей, когда требовалось быстро создать > компилятор для новой машины. Никто не брался, а мы в Институте > Прикладной Математики им.М.В.Келдыша АН СССР вытягивали один проект > за другим. Примеры с Бураном и Булатами - наиболее яркие, а ведь > были еще и язык НОРМА, ПС-3000, ЕС-1195, это последний > суперкомпьютер Советского Союза. Далее, уже в середине первого > десятилетия двухтысячных годов, первые исследования по НИР "Беркут", > это мультитредовый суперкомпьютер Ангара стратегического назначения, > были очень быстро проведены с использованием именно Рефала.Мы > применяли и применяем реализацию Рефала-2 на односвязных списках с > кольцевыим цепочками, которую с Колей Мансуровым сделали в свое > время также в ИПМ. Эта реализация жива, исходники есть, имеется > очень богатая библиотека машинных операция с продуманными > нестандартными возможностями, просто я не стал вмешиваться в > переписку в силу разных причин. Она у нас в горячем резерве, когда > потребуется будем использовать в своих работах. Время-то > приближается лихое...будет невероятно много разработок > специализированных высокопроизводительных устройств.Новые версии > Рефала - хорошее дело. Только я не знаю, был ли у них такой объем > практического применения в сложных проектах, как у нас. Тем не > менее, с уважением отношусь к этим работам, но уж очень много в > новых версиях текста и сложностей, поэтому мы это использовать вряд > ли будем в своих проектах. А вот параллельная версия реализации > обычного Рефала явно не помешала бы.В далеких семидесятых Рефал мои > руководители и я рассматривали не только как технологичный язык для > задач обработки символьной информации, но и как прототип внутреннего > машинного языка символьного процессора с отличной от > фон-Неймановской архитектурой. С этой точки зрения компилировать > Рефал в Си с невероятными оптимизациями - это "бег на месте или даже > ход назад", в угоду старых архитектур, хотя на сегодняшний день, > м.б. и имеет практический мысл. Да и этот Си слишком сильный > конкурент на поляне существующих архитектур, он, как сорняк, все > забивает, не дает новым языкам подняться в полный рост, причем дело > не только в новых версиях Рефала. Даже PGAS языки не пошли. Выбиться > сейчас с новым языком без фантастических преимуществ практически > невозможно. Кстати, одна из причин, почему мы изначально брались с > Рефалом за самые "гиблые" с точки зрения возможной выполнимости > проекты - стремление доказать привлекательность этого языка. Ну а > потом, приобрели соответствующую известность из-за этого и > популярность "пожарной команды". Затянуло, особенно если "просили" > из ЦК КПСС или уважаемых ведомств. Доказывали несколько десятилетий, > результат - какой есть. Если честно, то не очень, ведь техника > приходит и уходит, заслуги забываются, а жизни своей немного жаль. > Можно было бы и более фундаментальными делами заняться, диссертации > писать по этому поводу. В итоге цель наша с продвижением реализаций > этого функционального языка с глубоким распараллеливанием, вплоть до > применения клеточных автоматов, как это видели в семидесятых, пока > не достигнута.С другой стороны, слишком большие перемены ожидаются в > архитектуре вычислительной техники в предстоящие десять лет в связи > с достигнутым пределом развития КМОП-технологий и приближением > пост-Муровской элементной базы, а там - своя схемотехника, это > скорее всего, многие аналитики предсказывают. Там и место новым > языкам, в том числе и Рефалу, хотя бы упрощенной версии, об этом и > думали много лет назад.Будущее загадочно, не всем его дано увидеть, > да и не так быстро оно наступает. Вот и я не претендую, м.б. и > ошибаюсь, но мы об этом мечтали в свое время. Дано ли будет это > увидеть или разочароваться? На всякий случай, не стоит отчаиваться и > делать поспешные выводы, перечеркивать достижения и опрежавшие время > работы предшественников, причем целых двух - трех поколений, да и > хоронить само это детище Валентина Федоровича. Таким людям, как он, > дано увидеть сквозь годы, я в это верю, вижу признаки его правоты в > современных проявлениях и грядущих изменениях.Л.Эйсымонт > 03.02.2018, 23:19, "Александр Коновалов" > <a.v.konovalo...@mail.ru>:Добрый вечер всем! > Судя по тому, что на это письмо никакой реакции не воспоследовало, > экосистема Рефала уже никому не интересна. > А ведь я предложил маленький шаг по борьбе с «вавилонской башней > Рефала» — проблемой наличия нескольких несовместимых диалектов. Если > что, темой, обозначенной в предыдущем письме, я никого не призываю > заняться — я сам могу за это взяться вместе со своими студентами. > Александр Коновалов > > From: Александр Коновалов [mailto:a.v.konovalo...@mail.ru] > Sent: Saturday, January 27, 2018 3:22 PM > To: refal@botik.ru > Subject: Общее подмножество Рефала-5 и Рефала-6 > > Добрый день всем! > В одном из своих предыдущих писем я затронул вопрос общего > подмножества Рефала-5 и Рефала-6. Сейчас раскрою этот вопрос подробнее. > На сколько мне известно, Рефал-6 изначально писался как > альтернативная реализация Рефала-5 Турчина, и, по-видимому, был > совместим с ним на уровне исходного кода. Позже развитие обоих > диалектов разошлось. В августе 2000-го Рефал-5 обзавёлся новым > синтаксисом: идентификаторы, в частности, стали чувствительными к > регистру, появились escape-последовательности, были запрещены > переменные без точки, а также изменился формат функции Type. Рефал-6 > обзавёлся синтаксисом и семантикой действий и неуспехов из Рефала > Плюс много раньше 2000-го года, тут я уже не в курсе. И в итоге > сейчас практически любая программа для Рефала-5 не будет > компилироваться Рефалом-6 и наоборот. > Однако, можно выделить подмножество программ, которые будут успешно > компилироваться и одинаково выполняться актуальными (доступными на > 2018-01-27 в интернете) реализациями Рефала-5 (PZ Oct 29 2004) и > Рефала-6 («Обновлено 08.02.2001»). Если программа на Рефале-5 > удовлетворяет следующим требованиям: > · После каждой «}» обязательно ставится «;». > · Имена функций и идентификаторов (без кавычек) всегда начинаются с > большой буквы. > · Используются только escape-последовательности \n, \r, \t, > \', \", \\, \xHH (только в 'литерах' и "составных символах"). > · Не используются никакие встроенные функции кроме коротких > синонимов для арифметики: <+…>, <−…>, <*…>, </…>, <%…>, при этом после + и − > обязателен пробел. > · Результаты арифметических вычислений не должны быть > отрицательными и не должны превышать 2³²−1. > · Стартовая функция всегда пишется как GO. > То в этом случае программа может быть успешно откомпилирована и > выполнена Рефалом-6 ключами по умолчанию (компилируется при помощи > rfc program.ref, выполняется при помощи ri i+program+*GO). > Поясню некоторые пункты списка. > Синтаксис функций Рефала-5 имеет вид «[$ENTRY] Имя Блок», синтаксис > функций Рефала-6 — «[$ENTRY] Имя ОбразцовоеОкончание», причём > «ОбразцовоеОкончание» должно завершаться точкой с запятой. Однако, > синтаксис Рефала-5 допускает на верхнем уровне грамматики > использовать незначащие точки с запятой. > Рефал-5 допускает имена, начинающиеся с маленькой буквы, Рефал-6 не > допускает. Поэтому запись «eq» первый воспримет как имя, второй — как > переменную. > Рефал-5 также допускает escape-последовательности «\<», «\>», «\(», > «\)» которые обозначают те же символы, что и без «\». При этом > текущая реализация refc допускает запись escape-последовательностей > вне кавычек — это альтернативная запись для литер: \n эквивалентно > '\n'. Это нигде не документированная возможность, но она есть (и > поддерживается Рефалом-5λ, кстати). Другие > escape-последовательности, кроме вышеперечисленных и > недокументированных, Рефал-5 не поддерживает. > Встроенные функции текущей реализации Рефала-5 начинаются с > прописной буквы и пишутся строчными: Open, Add и т.д. Встроенные > функции Рефала-6 пишутся целиком прописными буквами: OPEN, ADD. > Соответственно, их множество пересекается только на коротких > синонимах. Нюанс со знаками «+» и «−» объясняется тем, что слитная > запись знака с целым числом описывает отрицательное число, т.е. <−10 > 5> в Рефале-5 будет проинтерпретировано вычитание из десяти пяти, в > Рефале-6 как вызов числа «минус десять» в роли функции с аргументом > «пять». Можно переопределить функцию APPLY_OBJECT, чтобы и это > работало, но я пока не касаюсь переопределения библиотеки. > Длинная арифметика в Рефале-5 описывается цепочками макроцифр, > причём признак отрицательного числа обозначается литерой '−'. В > Рефале-6 сами символы-числа являются числами произвольной > разрядности со знаком. Поэтому отрицательные или слишком большие > результаты арифметических операций будут выглядеть по-разному. > Последний пункт про GO — мне не удалось запустить программу (с > ключами запуска по умолчанию), стартовой функцией которой является функция Go. > Но, у Рефала-6 есть слой совместимости с Рефалом-5, который > позволяет расширить общее подмножество. Именно расширить, поскольку > слой устарел + синтаксические различия. Во-первых, это стартовый > модуль i5.rex, содержащий определения некоторых встроенных Рефала-5. > Во-вторых, чтобы можно было воспользоваться r5.rex без его > модификации, компилировать программу следует с ключом /U — все > незакавыченные слова в upper case. В этом случае программа на > Рефале-5 должна ограничиваться следующими требованиями: > · Опять после «}» обязательно должна быть «;». > · Имена функций и идентификаторов пишутся с большой буквы. > Нельзя в программе использовать функции и идентификаторы, которые > различаются только регистром символов. Не следует предполагать, что AbCd == > "AbCd". > · Escape-последовательности см. выше. > · Можно использовать встроенные функции с номерами от 1 > «Mu» до 35 «Sysfun». Номера функций можно посмотреть в выводе > функции «ListOfBuiltin» (но она имеет номер 67). Короткими > синонимами для арифметики пользоваться нельзя. > · Не следует делать никаких предположений о размере > макроцифры. В Рефале-5 отрицательные числа записываются как '−' s.1 > s.2 s.3…, положительные — как '+' s.1 s.2 s.3… или s.1 s.2 s.3…; в > Рефале-6 — '−' s.One, '+' s.One или s.One соответственно. > · Запрещено пользоваться функцией Type, ибо форматы > возвращаемого значения в обоих реализациях различны. > · Функция Step может показывать разные значения на обоих > реализациях. В Рефале-6 библиотечные функции написаны на Рефале и > поэтому они могут выполняться за несколько шагов рефал-машины, в отличие от > Рефала-5. > · Стартовую функцию можно называть Go или GO. > Чтобы ещё больше расширить подмножество, можно в первую очередь > обновить библиотеку совместимости — добавить синонимы функций с > именами в правильном регистре, обновить функцию Type и (что > потребует расширения интерпретатора) добавить новые встроенные > функции. С точки зрения синтаксиса можно поступить по-разному: от > разрешения не писать «;», когда тело функции задаётся одним блоком > (это не должно привести к противоречиям в грамматике) до разработки > отдельного front-end’а для синтаксиса Рефала-5. Но даже разрешение > отсутствия точек с запятой на верхнем уровне вместе с модификацией > библиотеки сделает Рефал-6 точным надмножеством Рефала-5. > С уважением, > Александр Коновалов -- С уважением, Абрамов С.М. mailto:ab...@botik.ru