Re: Re[2]: RAFAL & JAVA


Subject: Re: Re[2]: RAFAL & JAVA
From: Sergei Romanenko (roman@integrum.ru)
Date: Sat Jan 15 2005 - 14:52:32 MSK


Добрый день!

Как известно, большинство "интерпретаторов", пригодных к практическому
использованию, на самом деле компилируют программу на какой-то язык более
низкого уровня, который либо интерпретируют, либо компилируют дальше в
машинный код.

Moscow ML, например, умеет работать в "интерактивном" режиме, когда строчки
программы вводятся из командной строки, и сразу же исполняются. Но на
самом-то деле они компилируются в виртуальный код!

Т.е. и при использовании компилятора+линкера, и при работе в "интерактивном"
режиме работает в точности один и тот же компилятор!

По поводу Рефала-2 я понял пожелание насчет "интерпретатора" так: нельзя ли
компилировать Рефал-программу сразу в основную память, не делая генерацию
объектных модулей. Действительно, было бы глупо заниматься линкованием
объектных модулей в мобильнике... :-)

Ответ здесь такой. Генерация объектных модулей в "традиционных" реализациях
Рефала-2 производилась для того, чтобы потом можно было слинковать модули,
которые были написаны на Рефале с модулями, написанными на других языках
(Fortran, PL/I, C). Возможность стыковаться с программами на других языках
как раз и дала возможность использовать Рефал при создании "серьезных"
приложений. Однако, ни из чего не следует, что такой подход - "единственно
правильный"...

Однако, все же есть одна проблема, которая возникает при попытке изготовить
"интерактивную" версию Рефала (в том смысле, как "интерактивность"
понимается в реализациях SML). Дело в том, что язык SML изначально
сконструирован так, чтобы его было удобно использовать в "интерактивном"
режиме. На самом деле, даже _спецификация_ SML определяет семантику языка в
терминах "интерактивного" режима исполнения. И это создает проблемы при
попытке реализовать для SML-программ нарезку на модули и нормальную
_раздельную компиляцию_ этих модулей! По этому поводу в спецификации вообще
ничего не сказано! И выходит, что реализатор должен сам, на свой страх и
риск, чего-то выдумывать. Выдумать-то можно, но в каждой реализации
раздельная компиляция реализована по-своему (и как это влияет на
переносимость программ - догадаться нетрудно).

Ну, а в случае Рефала-2 все обстоит наоборот! С модульностью и раздельной
компиляцией - все в порядке, а на режим "интерактивной" работы (когда
программа вводится в процессе работы) сам язык не рассчитан... В те времена
вычислительные мощности компьютеров были просто смехотворными (по сравнению
с нынешними мобилами), поэтому вопрос раздельной компиляции стоял ОЧЕНЬ
остро! А "интерактивность" (в смысле SML) пользователей Рефала не очень
волновала.

Поэтому, для создания "интерактивной" версии Рефала, нужно как-то
"подкручивать" сам язык...

(А ранние "интерпретаторы" Рефала вовсе и не были "интерактивными".
Программу вводили с перфокарт, операционная система выполняла "задачу" в
пакетном режиме, а потом из принтера вылезал результат работы
Рефал-программы.)

Сергей Романенко

----- Original Message -----
From: "A.A.Vladimirov" <vladimi@mech.math.msu.su>
To: <refal@botik.ru>
Sent: Saturday, January 15, 2005 12:19 PM
Subject: Re: Re[2]: RAFAL & JAVA

> Сначала был "эффективный" Рефал-интерпретатор для БЭСМ-6 (а до него -
> "неэффективный" Рефал-интерпретатор КИТ-1 для ламповой М-20).
>
> А Рефал-компилятор (для БЭСМ-6) начали делать после этого...
>
> Сергей Романенко

Это-то мне известно; к сожалению, ключевое слово здесь - "был". Где
теперь найдёшь БЭСМ-6...

С уважением,
Антон Владимиров



This archive was generated by hypermail 2b25 : Sat Jan 15 2005 - 14:52:08 MSK