Re: Refal-J: first release


Subject: Re: Refal-J: first release
From: Arkady Klimov (arkady.klimov@supercompilers.com)
Date: Fri Apr 25 2003 - 22:59:23 MSD


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

Леня, у меня ощущение, что мы плохо понимаем друг друга и говорим
о разном.

----- Original Message -----
From: "Leonid Belous" <belous@ilt.kharkov.ua>
To: <refal@botik.ru>
Sent: Friday, April 25, 2003 17:39
Subject: Re: Refal-J: first release

| Привет, всем!
|
|
| > Леня,
| > у меня остались еще вопросы насчет Рефал-PHP, спрашиваю через группу,
| > так как может это еще и другим интересно. См. ниже.
| [...]

Выше в [...] я писал, что

    А еще может мы имеем в виду разные уровни интеграции. Вот например,
    такой вопрос: может ли рефал передать PHP свое произвольное выражение
    с тем, чтобы оно было на PHP полностью понято, переработано и, быть может,
    передано обратно? Мне почему-то казалось, что нет, то есть что обмен идет
    только на уровне строк", но буду рад ошибиться.

После прочтения данного письма мне продолжает так казаться.
Говоря "на уровне строк" я имел в виду, что рефал передает в PHP
(в интерфейсную функцию Php) строку (цепочку символов-литер) и получает
назад тоже строку. А PHP извлекает из этой строки то, что может
(в частности, требуя, чтобы строка была правильной в смысле
синтаксиса PHP) и формирует выходную строку через "стандартный вывод".
Но рефальское выражение со скобками нечего и пытаться передать -
ошибка должна быть распознана еще до парсинга PHP. Ты тоже пишешь,
что "могу передать твое выражение (A (B '*' 1) (())) статически (в виде строки
символов)", видимо, имея в виду, что скобки (или все вместе) надо взять в кавычки,
чтобы это были литеры, а не рефальские структурные скобки. Я, собственно,
так и думал. Пойми меня правильно, я этим не хочу умалить ценность твоей
работы, она совершенно адекватна поставленной задаче, и действительно
знаменует собой значительный прорыв в деле вывода рефала на
"интернет-орбиту". При этом еще важнее понимать правильно, чтО именно
и как решено и какие возможности предоставлены.

Леня, я все же должен сделать обещанное на своей странице Рефал-Java,
для чего мне нужна от тебя ссылка на соответствующий интернет-ресурс.
Можно ли использовать приведенную тобой ниже ссылку на документацию
http://www.refal.net/~belous/rphprdoc.htm?
Кстати, прекрасное руководство! И краткое введение в рефал тоже
замечательное.
Только одно замечание - почему-то прыгает шрифт (похоже,
с Arial на Times и обратно), причем довольно хаотично.
Возможно, твой шрифт-по-умолчанию делает этот дефект незаметным.

Аркадий.

| > | Именно так, ошибаешься. Обмен возможен в обоих направлениях. Но здесь я
| не
| > | могу (пока) состязаться в уровне интеграции с тем, что делается у тебя,
| в
| > | смысле эффективности реализации. Однако эта задача и не стояла у меня на
| > | первом месте.
| > Дело не в состязании: все-таки делались разные вещи. Но хотелось бы лучше
| > понимать особенности каждой. Я хотел бы уточнить свое понимание
| > системы Рефал-PHP (мне же надо будет ее упомянуть, сказав в двух
| > словах об отличиях). Вот мои вопросы:
| > 1. Верно ли, что связка Рефал-PHP выполнена на основе *реализации*
| Рефал-5?
| > Или там своя или значительно измененная (типа: подогнанная под структуры
| > данных PHP) реализация.
|
| Никаких изменений и подгонок не делалось. Используется последний дистрибутив
| Рефала-5 с официального сайта
| http://botik.ru/pub/local/scp/refal5/refal5.html .
| Собственно все мои разработки выполнены в виде двух библиотек rphplib.ref и
| rphplib.php на языках refal-5 и php соответственно. На уровень языка "C" я
| пока не спускался.
|
| > 2. Возвращаюсь к вопросу об обмене выражениями. Мой вопрос был не столько
| > о возможности обмена "в обоих направлениях", сколько о структурах
| > передаваемых при этом данных. Так все-таки, можно вызвать
| > из рефала PHP-функцию и передать ей в качестве аргумента что-то вроде
| > (A (B '*' 1) (()))
| > ? И как это увидит функция на PHP? Как массив из трех элементов, где
| второй
| > и третий элементы - тоже массивы? Соответственно, может ли функция
| > на PHP вызвать функцию рефала с такого рода аргументом? (Из беглого
| взгляда
| > на описание PHP и его системы типов, мне показалось, что массив PHP - это
| > наверно самое близкое, из того, что там имеется, к рефальскому выражению).
|
| Наверное проще всего рассмотреть и прокомментировать реальный короткий
| пример
| (Пример 2.5-1 Машинная арифметика. Из руководства по Refal-PHP
| http://www.refal.net/~belous/rphprdoc.htm ).
| Для того, чтобы не ссылаться на библиотеки, в пример включен и текст одной
| из библиотечных функций.
|
| *--------------------------------------------------------------------------
| $EXTRN Php;
| $ENTRY Go { =
| <Print <Evalf 'sin(0.235)+cos(1/3)'>>
| }
| * Evalf - evaluation type real expressions
| Evalf {
| e.expression = <Php '$Evalf = ' e.expression '; echo $Evalf;'>;
| }
| *---------------------------------------------------------------------------
| Эта программа печатает в результате число 1.1777999318272.
|
| Пример показывает технику расширения возможностей языка Рефал-5, не имеющего
| в последней редакции плавающей арифметики, введением таковой из языка PHP.
| Интерфейсная рефал-функция <Php e.expression> не занимается исследованием
| структуры выражения e.expression, а передает его AS IS интерпретатору PHP,
| а уж, что он с ним будет делать ..... , естественно зависит от автора
| программы, пишущего текст как на Рефале, так и на PHP.
|
| Я могу передать твое выражение (A (B '*' 1) (())) статически (в виде строки
| символов) или динамически, как e.expression, интерпретатору PHP, но ничего,
| кроме ругани на фазе парсинга PHP мы не получим.
|
| Я, как автор предыдущей программы, передаю PHP из Рефала синтаксически
| правильное (в языке PHP) арифметическое выражение, НО не в голом виде, а
| формирую два оператора - оператор присваивания и оператор вывода результата
| этого присваивания (имена переменных в PHP начинаются со знака $).
|
| Поток вывода перехватывается и выдается Рефалу как результат.
|
| Естественно, никто не мешает мне написать на PHP программу, которая будет
| заниматься осмысленным анализом твоего выражения, и передавать его ЕЙ (а не
| просто интерпретатору PHP) в качестве аргумента для обработки.
|
| Рефал-функция <Php e.expression> не обладает никаким дополнительным
| встроенным интеллектом, а служит только двусторонним мостом для передачи
| данных и управления между Refal и PHP интерпретаторами.
|
| Вызов Рефала из PHP также возможен, но боюсь, что это уже оффтопик.
|
| >
| > Пока все.
| > Заранее спасибо.
| Алик, если я не совсем правильно понял вопросы, то заранее прошу прощения.
| Готов продолжить обсуждение.
|
| > С уважением,
| > Аркадий
| С уважением,
| --Леонид
|
| [...]
|
| ----- Исходное сообщение -----
| От: "Arkady Klimov" <arklimov@keldysh.ru>
| Кому: <refal@botik.ru>
| Отправлено: 23 апреля 2003 г. 23:28
| Тема: Re: Refal-J: first release
|
|
|



This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:24:59 MSD