Re: Re[2]: RAFAL & JAVA


Subject: Re: Re[2]: RAFAL & JAVA
From: A.A.Vladimirov (vladimi@mech.math.msu.su)
Date: Mon Jan 17 2005 - 13:07:40 MSK


Leonid Belous писал(а):

> Антон, если не секрет, почему нужен именно
> "интерпретатор"?
> Ведь на самом деле компиляторы с языка Рефал
> переводят исходную программу на специальный
> промежуточный язык, который потом интерпретируется.
> При этом соотношение между фазой компиляции и
> интерпретации таково, что фаза компиляции не есть
> доминирующий участок этого процесса.

Хотелось бы, в первую очередь, иметь расширяемую реализацию. А то в том
же Рефале-5 громких фраз о метасистемном переходе много, а вот
возможностей для добавления встроенных функций (без вбивания их в
основные исходники с последующей перекомпиляцией оных) похоже, не
наблюдается :(

Что же касается собственно интерпретатора - то ведь ясно, что Рефал, в
силу своей структуры, заведомо способен исполнить роль скриптового языка
ничуть не хуже тех же tcl, perl или python. Однако возможность сия,
похоже, не используется.

Sergei Romanenko писал(а):

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

Ну, разумеется, под "интерпретацией" в данном случае следует понимать
компиляцию "на лету" - иначе эффективность реализации будет мизерной.

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

Ладно уж, выложу карты на стол... От нечего делать я попробовал заняться
написанием такого рода интерпретатора. Результат - в присоединённом tgz-
файле (под Linux точно собирается; под *BSD - не проверял, но причины,
которые мешали бы сборке, мне неизвестны; про Windows(TM) ничего не могу
сказать). Всем желающим предлагается посмотреть, что получится, если:
1) сделать присоединённый ref-файл исполняемым;
2) запустить его;
3) ввести с консоли несколько непустых строк;
4) провести "горячее" перетаскивание знака "#" на одну строку вверх,
после чего ввести __пустую__ строку;
5) снова попытаться вводить с консоли непустые строки.

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


#!/usr/bin/refal
$use 'stdio'
$use 'interp'

$start k/funk/ k/gets/ ('utf-8')..

funk = k/puts/ 10 'Zamena fajla' 10. k/interp/ 'zamena.ref'.\
                k/funk/ k/gets/ ('utf-8')..
        e/1/ = k/puts/ e/1/ 10. k/funk/k/gets/('utf-8')..
# e/1/ = k/puts/ e/1/ 10 'Vyhod iz programmy' 10.



This archive was generated by hypermail 2b25 : Mon Jan 17 2005 - 13:08:20 MSK