LINUX.ORG.RU
ФорумTalks

[некрофилия][это очень вкусно]Refal

 


0

0

Вот наткнулся:

http://ulm.uni.udm.ru/~soft/wiki/doku.php?id=refal-5:korsa

Очень интересный подход, вроде. Только не осознаю, как это можно использовать. Вопрос, известно ли что нибудь ЛОРу про сабж? Есть ли какие-нибудь написанные программы? А так же интересует, есть ли реализации под линукс? Хотя вроде свою написать не составит труда, но хотелось бы готовую)

P.S. Надеюсь, не ошибся разделом. Интересно просто выслушать мнения.

На сколько я знаю, авторы используют его для разработки суперкомпилятора(точнее они пробуют использовать суперкомпиляцию для рефала). На данный момент существует даже модуль для Eclipse для него, ну а авторы пытаются научиться суперкомпилировать Java(ну это данные годичной давности, сейчас может уже и свернули исследования).

recon88
()

Метапрограммирование исследуется уже давно. Но проблема всех этих рефалов и прочих - «далеки от простых людей». По поводу метапрограммирования и DSL лучше почитай Language Workbench Фаулера.

theos ★★★
()
Ответ на: комментарий от theos

Рефал, потенциально дает более быструю программу на DSL за счет суперкомпиляции. Если интересно загугли «проекции футамуры».

recon88
()
Ответ на: комментарий от theos

По сравнению с обычной компиляцией кода. Пример : объявляем абстрактный тип данных который представляет команды нашего языка, после этого пишем функцию которая выполняет какие-то действия с нашими командами.

Описываем задачу в терминах нашего DSL.

Выполнение - пропускание задачи через интерпертатор, и получение результатов.

При суперкомпиляции слой интерпетатора убирается, и описание задачи преобразуется из абстрактных команд в конструкции базового языка. Следовательно, без одного слоя абстракции(интерпретатор) программа будет выполнятся быстрее.

http://blog.sigfpe.com/2009/05/three-projections-of-doctor-futamura.html

recon88
()

> Васильева Екатерина,

студент УдГУ,

Преклоняюсь.

Nixopatolog
()
Ответ на: комментарий от theos

По другому : специализация интепретатора по входной программе.

recon88
()

>Только не осознаю, как это можно использовать.

Простой пример: технология «Рефал-Рокот» для решения задач обработки неструктурированных текстовых потоков.

quickquest ★★★★★
()
Ответ на: комментарий от recon88

Да читал я :) то что результат суперкомпиляции работает быстрее чем интерпретатор написанный на языке «первого порядка» как там зовется это конечно здорово, только давно не то, на что равняться стоит. Генеративное программирование используется уже оооочень давно без всяких ваших рефалов и суперкомпиляции ;)

theos ★★★
()
Ответ на: комментарий от theos

Про генеративное программирование не слышал, можно ссылку на системы где оно используется? И что-то я не очень пойму его применение.

«То есть, генеративное программирование предполагает использование генераторов программного кода, которые на основе ранее разработанного кода и с учетом спецификаций требований позволяют автоматизировать сборку ”пилотной” и рабочей версий проекта. Генеративное программирование, являясь инструментарием архитекторов ПО, предназначено для управления логикой проекта от стадии его разработки и на протяжении жизненного цикла программной системы. Для применения генеративного программирования архитектору ПО необходимы CASE- системы, пригодные для их применения в конкретной предметной области, генераторы ПО и ранее разработанный программный код, пригодный для его повторного применения.» - это оно?

recon88
()
Ответ на: комментарий от recon88

Генеративный подхода это когда на основе модели генерируется артекфакты - например код. Это не парадигма и не готовое решение. А способы трансформации модели в код существует много.

theos ★★★
()
Ответ на: комментарий от theos

суперкомпиляция - это именно метод генерации кода на основе модели. Я не говорил что это единственный метод, просто он более оптимальный - под данному интерпретатору, автоматически строится компилятор в базовый язык.

recon88
()
Ответ на: комментарий от recon88

И как там с отлатдкой, средой разработки, прочий стафа для результатов суперкомпилирования? а писать трансляторы в С тривиально и без всяких рифалов ;)

theos ★★★
()

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

теги лично мне непонятны, кстати. почему некрофилия? что вкусно?

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> кстати. почему некрофилия

Оно же старое. Но, я ошибся, вроде как ещё живо. Я относил его к незаслуженно забытым

dragonfly
() автор топика
Ответ на: комментарий от dragonfly

Я относил его к незаслуженно забытым

незаслуженно - да. хорошо, что не забыт

jtootf ★★★★★
()
Ответ на: комментарий от recon88

Haskell тоже может матчить конструкторы.

самое сложное, что есть в Haskell - это «n + k»-паттерны (considered harmful) и @-паттерны; рефал же позволяет матчить по практически произвольному выражению

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

Что понимается под произвольным выражением? Haskell матчит по любым конструкторам. Я не пойму какие еще выражения можно матчить? Применения функций, тогда это уже унификация(не знаю, можно ли это относить к pattern matching).

recon88
()
Ответ на: комментарий от recon88

Я не пойму какие еще выражения можно матчить?

в «n + k»-паттерне где конструктор? паттерн вида «строка из не более чем десяти символов [A-Z]» как ты будешь задавать в Haskell?

Применения функций, тогда это уже унификация(не знаю, можно ли это относить к pattern matching).

от того, как ты это назовёшь, суть не изменится; тем более, что любой паттерн-матчинг, в общем-то, есть частный случай унификации

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

ну в «n+k» нету конструктора, и это частный случай. А в рефале можно задать паттерн вида «строка из не более чем десяти символов [A-Z]». Можно пример? В хаскеле подобные условия можно задавать гардами.

recon88
()
Ответ на: комментарий от recon88

В хаскеле подобные условия можно задавать гардами.

можно. но вот pattern guards до сих пор в язык не ввели, потому говорить пока что не о чём

Можно пример?

я слишком давно не тыкал рефал палочкой, чтобы сходу написать на нём хоть что-то. документация открыта, feel free to try

jtootf ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.