Subject: Re: Re[2]: RAFAL & JAVA
From: Leonid Belous (belous@ilt.kharkov.ua)
Date: Wed Jan 19 2005 - 17:26:17 MSK
Добрый вечер, всем!
> Ладно уж, выложу карты на стол... От нечего делать я попробовал заняться
Искренне завидую людям, у которых может быть такое состояние души ... :-)
> написанием такого рода интерпретатора. Результат - в присоединённом tgz-
> файле (под Linux точно собирается; под *BSD - не проверял, но причины,
> которые мешали бы сборке, мне неизвестны; про Windows(TM) ничего не могу
> сказать). Всем желающим предлагается посмотреть, что получится, если:
Антон, хочу заранее извиниться за возможную свою неумелость, но ...
провести предлагавшиеся эксперименты с Вашим хозяйством как с "черным ящиком" мне не удалось.
Напрямую (так, чтобы у Вас чего-нибудь не менять) у меня не собирается не только под FreeBSD, но и под тремя вариантами Linux (ASP, ALT, Mandrake, Debian).
С грехом пополам (убрав в makefile параметр, вызываший ругань -mtune=pentium3 ) удалось собрать под одним из Linux, но запустить zamena.ref в режиме скрипта не удается (ругань типа bad interpreter). Казалось бы, должен был проработать из командной строки эквивалентный запуск (с удалением первых трех строк в zamena.ref)
>refal zamena.ref
Но в этом случае выдается сообщение: Eraro: apliko je sendeterminita funkcio.
Пробовал давать >refal test , где файл состоит из одной строчки из 4-х единиц, 
получил сообщение: Dosiero z.ref, linio 1: malbona determino de objekto.
Антон, наверное бы я разобрался и подправил кое-где, кое-что в Вашем "черном ящике" или в настройках Linux, но я быстро прекратил эти попытки по следующей причине. Нникак не умаляя возможной оригинальности Вашей разработки (содержащей сотни строк на С), хочу остановиться на одном негативном моменте.
Комментарии написаны на языке, как я понимаю, типа Esperanto.
Вот фрагмент из ваших текстов:
-----------------------------------------------------------------------
/*
* Funkcio "interp_eraro" skribas priskribon de eraro, aperanta dum
* interpretado.
*/
void interp_eraro (int ern) {
 switch (ern) {
  case 1:
   fprintf (stderr, "\n%s %s, %s %d: %s.\n",
   gettext ("Dosiero"), dosiero, gettext ("linio"), linnum,
   gettext ("tro longa linio"));
   break;
..................................................
------------------------------------------------------------------------  
Мне лично трудно воспринимать такой текст. А выбор идентификаторов в стиле этого же языка
не столько повышает читаемость, сколько просто зашифровывает программу для непосвященных :(.
Единственное, о чем мне удалось легко догадаться, так это то, что работа выпоняется по GNU лицензии :-).
Ладно, бог с ними, приведенными выше замечаниями, можете на эту критику не обращать внимания. 
Вопрос по сути:
Зачем Вам интерпретатор языка Рефал, а не интерпретатор, написанный на языке Рефал для Вашей конкретного класса  задач? 
Как мне показалось, Вам пока нужно было в диалоге воспринимать текст с учетом кодировки Юникод, а потом с ним что-то делать? Зачем в диалоге вводить и обрабатывать предложения на языке Рефал?
У меня когда-то стоял подобный вопрос, когда Рефал применялся при создании системы компьютерной алгебры "Сириус". 
Вспоминая нашу с Вами переписку, относительно нехватки встроенных функций в Рефале для обработки текста в кодировке Utf-8, задаю вопрос - Вам не хватает встроенных функций в Рефале и неустраивают компилирующие реализации Рефала, поэтому Вы решились написать свой интерпретатор с языка Рефал?
Скорее всего я Вас неправильно понимаю, посему прошу разъяснений.
С уважением,
--Леонид Белоус
----- Исходное сообщение ----- 
От: "A.A.Vladimirov" <vladimi@mech.math.msu.su>
Кому: <refal@botik.ru>
Отправлено: 17 января 2005 г. 12:07
Тема: Re: Re[2]: RAFAL & JAVA
> Leonid Belous писал(а):
> 
> > Антон, если не секрет, почему нужен именно
> > "интерпретатор"?
> > Ведь на самом деле компиляторы с языка Рефал 
> > переводят исходную программу на специальный 
> > промежуточный язык, который потом интерпретируется. 
> > При этом соотношение между фазой компиляции и 
> > интерпретации таково, что фаза компиляции не есть 
> > доминирующий участок этого процесса. 
> 
> Хотелось бы, в первую очередь, иметь расширяемую реализацию. А то в том
> же Рефале-5 громких фраз о метасистемном переходе много, а вот
> возможностей для добавления встроенных функций (без вбивания их в
> основные исходники с последующей перекомпиляцией оных) похоже, не
> наблюдается :(
> 
> Что же касается собственно интерпретатора - то ведь ясно, что Рефал, в
> силу своей структуры, заведомо способен исполнить роль скриптового языка
> ничуть не хуже тех же tcl, perl или python. Однако возможность сия,
> похоже, не используется.
> 
> Sergei Romanenko писал(а):
> 
> > По поводу Рефала-2 я понял пожелание насчет "интерпретатора" так: нельзя ли
> > компилировать Рефал-программу сразу в основную память, не делая генерацию
> > объектных модулей. Действительно, было бы глупо заниматься линкованием
> > объектных модулей в мобильнике... :-)
> > 
> 
> Ну, разумеется, под "интерпретацией" в данном случае следует понимать
> компиляцию "на лету" - иначе эффективность реализации будет мизерной.
> 
> 
> > Ну, а в случае Рефала-2 все обстоит наоборот! С модульностью и раздельной
> > компиляцией - все в порядке, а на режим "интерактивной" работы (когда
> > программа вводится в процессе работы) сам язык не рассчитан... В те времена
> > вычислительные мощности компьютеров были просто смехотворными (по сравнению
> > с нынешними мобилами), поэтому вопрос раздельной компиляции стоял ОЧЕНЬ
> > остро! А "интерактивность" (в смысле SML) пользователей Рефала не очень
> > волновала.
> > 
> > Поэтому, для создания "интерактивной" версии Рефала, нужно как-то
> > "подкручивать" сам язык...
> > 
> 
> Ладно уж, выложу карты на стол... От нечего делать я попробовал заняться
> написанием такого рода интерпретатора. Результат - в присоединённом tgz-
> файле (под Linux точно собирается; под *BSD - не проверял, но причины,
> которые мешали бы сборке, мне неизвестны; про Windows(TM) ничего не могу
> сказать). Всем желающим предлагается посмотреть, что получится, если:
> 1) сделать присоединённый ref-файл исполняемым;
> 2) запустить его;
> 3) ввести с консоли несколько непустых строк;
> 4) провести "горячее" перетаскивание знака "#" на одну строку вверх,
> после чего ввести __пустую__ строку;
> 5) снова попытаться вводить с консоли непустые строки.
> 
> С уважением,
> Антон Владимиров
> 
This archive was generated by hypermail 2b25 : Wed Jan 19 2005 - 17:30:04 MSK