Re: Рефал и Лисп на Си+


Subject: Re: Рефал и Лисп на Си+
From: Andrey Slepuhin (pooh@msu.ru)
Date: Mon Oct 22 2001 - 13:11:00 MSD


On Mon, Oct 22, 2001 at 12:08:10PM +0400, Andrey V Stolyarov wrote:
>
>
> On Mon, 22 Oct 2001, Sergei M. Abramov wrote:
>
> > День добрый, Андрей!
> >
> > > Я сейчас в рамках диссертации делаю нечто из смежной области,...
> > ...
> > > ... У меня Рефал (причем
> > > полный Рефал-5, со всеми WHERE/WITH) реализован как надстройка над Лиспом.
> > ...
> > > В добавок все это реализовано как библиотека классов Си++ и
> > > предназначается к применению в проектах, где основным языком является
> > > Си++....
> > ...
> > > Подчеркну, это обычный модуль Си++, не требующий никакого дополнительного
> > > препроцессирования. Компилируется обычным компилятором Си++ (я пользуюсь
> > > gcc 2.95.2)
> > ...
> > > Еще в планах есть, в качестве побочного эффекта от создания библиотеки,
> > > некий новый язык (рабочее название - "Ситуационный Лисп"), представляющий
> > > собой парадигматический гибрид Лиспа и Рефала.
> > >
> > > Интересно ли такое кому-нибудь?
> >
> > Лично мне это очень интересно. Скажу больше--я сильно заинтригован.
> >
> > =1= Где это понадобилось?
>
> Идея возникла у меня еще курсе на четвертом, когда в заурядном
> коммерческом проекте, основным языком которого был Си++, мне ну ооооочень
> захотелось кусочек написать на Лиспе. Сейчас уже даже не помню, что это
> был за кусочек.
>
> > =2= Тема диссертации? Где/когда она предполагается?
>
> Рабочее название - "Непосредственная интеграция изобразительных средств
> разнородных языков программирования на базе современных ОО ЯП" (скорее
> всего, будет еще пересмотрено). Предполагается на ВМиК МГУ, а вот когда -
> еще не ясно. Не ранее чем этой весной. Возможно, осенью.
>
> Первая официальная публикация на эту тему -
>
> E. Bolshakova and A. Stolyarov.
> Building functional techniques into an object-oriented system.
> In Knowledge-Based Software Engineering. Proceedings of the 4th
> JCKBSE, volume 62 of Frontiers in Artificial Intelligence and
> Applications, pages 101--106, Brno, Czech Republic, September 2000.
> Published by IOS Press, Amsterdam.
>
> Еще несколько сейчас приняты к публикации, но пока не вышли.
>
> > =3= Известно ли Вам о выполняемом сейчас проекте компиляции Рефал Плюс в
> > Си++?
>
> Да, известно, насколько это может быть известно из чтения данного списка
> рассылки.
>
> Ну, собственно говоря, у меня-то основная идея отнюдь не в компиляции
> одного в другое. Например, компилятора Рефала у меня еще нет (хотя
> планируется, ибо большие модули писать в предложенном синтаксисе - не
> слишком удобно), а вот его (Рефала) парадигматика - уже доступна.
> Транслятор Лиспа, кстати, есть - но, опять таки, его применение показано
> только в ситуации, когда некий достаточно большой модуль хочется написать
> на Лиспе целиком (что в мультипарадигмальном проекте, по моим ощущениям,
> явление хоть и допустимое, но не повсеместное). Когда же требуется код на
> основном языке (Си++), перемежаемый небольшими кусочками в альтернативной
> парадигматике, проще работать без всяких трансляторов. Не так уж и сложно
> вместо открывающей скобки поставить `(L|', а элементы списка разделять
> запятыми, а не пробелами.
>
> Иными словами, библиотека InteLib позволяет писать код, используя
> лисповскую или рефальскую парадигматику (говоря по-простому, "как будто на
> Лиспе" или "как будто на Рефале"), при этом оставаясь _целиком_ в рамках
> Си++, не внося никаких изменений и дополнений в язык Си++. То есть Си++
> используется как основной и единственный язык в проекте (что очень часто
> происходит в индустриальной практике), при этом программисты, знакомые с
> Лиспом, Рефалом, а в перспективе и с другими альтернативными языками,
> могут успешно применять свои навыки.
>
> При этом имеются отличия от традиционных способов с встраиваемыми
> интерпретаторами, расширяемыми интерпретаторами (Tcl) и т.п. Никакого
> препроцессирования кода, чтобы получить из него "чистый Си++" (я даже
> штатный макропроцессор Си++ старался не использовать, насколько это
> возможно в Си++), никакого лексического/синтаксического анализа кода на
> этапе счета. Есть только Си++, от прочих - лишь парадигмы.
>
> Вообще говоря, я бы назвал основное достижение некой демонстрацией того,
> что Си++ сам по себе является языком мультипарадигмального
> программирования, надо лишь уметь это использовать. Библиотека InteLib это
> просто иллюстрирует.
>
>
> > Очень интересно,
> >
> > Сергей
> > П.С. Состояние дел по =3=:
> [...]
>
> Кстати, мне тоже стало интересно. Так что, если позволите, задам несколько
> вопросов.
>
> 1) Почему Вы избрали именно Си++?

Потому что C++ сочетает, с одной стороны, лаконизм и возможность абстрагировать
интерфейсы, присущую объектно-ориентированным языкам, а с другой стороны -
возможность написания практически столь же эффективного кода, как и на C.
Ну и личные привязанности автора рантайма тоже являются причиной :-)

>
> 2) Ставили ли Вы целью проекта создание мультипарадигмальной системы
> программирования?

Я не очень улавливаю смысл слова "мультипарадигмальный", поэтому воздержусь
от ответа.

>
> 3) Если нет, то какие цели преследовались?

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

>
> 4) В любом случае, насколько сложно будет с использованием вашего
> компилятора написать
> 4.1) код на Рефале, обращающийся к функции, написанной на Си++
> 4.2) код на Си++, обращающийся к функции на Рефале
> 4.3) код на Си++, использующий и модифицирующий данные, принадлежащие
> рефальской части программы?

В силу сказанного выше все эти пункты реализуются элементарно. Что не выглядит
прозрачно с точки зрения C++ - это рефальские сопоставления с образцом,
которые компилируются в достаточно нетривиальные куски кода, и красиво уложить
их в синтаксис объектно-ориентированного языка без потери эффективности вряд
ли возможно.

>
> 5) (возможно, не совсем в тему) каков предполагаемый статус вашего
> компилятора с точки зрения лицензирования (проприетарный, GPL, LGPL, BSD,
> иное?)

GPL. Библиотека, по-видимому, будет LGPL.

Андрей.

-- 
A right thing should be simple (tm)



This archive was generated by hypermail 2b25 : Mon Oct 22 2001 - 13:12:07 MSD