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


Subject: Re: Рефал и Лисп на Си+
var@msu.ru
Date: Mon Oct 22 2001 - 16:27:44 MSD


Andrey Slepuhin writes:
> 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) Ставили ли Вы целью проекта создание мультипарадигмальной системы
> > программирования?
>
> Я не очень улавливаю смысл слова "мультипарадигмальный", поэтому воздержусь
> от ответа.

Мне кажется, что здесь под этим заковыристым словом имеется в виду очень
правильная мысль о возможности выражать различные парадигмы (стили)
программирования и синтаксически-семантические конструкции языков
в виде агрегатов определенных объектов (в терминах C++) и перезагруженных
операций, заданных еще в compile-time.

Андрей, разумеется, все это прекрасно знает и использует как в GRACE
так и в рантайме РЕФАЛа-плюс, насколько мне известно.

По этой причине, мне тоже очень нравится C++ ;-)

>
> >
> > 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 - 16:28:56 MSD