Subject: Re: Рефал и Лисп на Си++
From: Andrey V Stolyarov (croco@croco.net)
Date: Mon Oct 22 2001 - 12:08:10 MSD
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) Почему Вы избрали именно Си++?
2) Ставили ли Вы целью проекта создание мультипарадигмальной системы
программирования?
3) Если нет, то какие цели преследовались?
4) В любом случае, насколько сложно будет с использованием вашего
компилятора написать
4.1) код на Рефале, обращающийся к функции, написанной на Си++
4.2) код на Си++, обращающийся к функции на Рефале
4.3) код на Си++, использующий и модифицирующий данные, принадлежащие
рефальской части программы?
5) (возможно, не совсем в тему) каков предполагаемый статус вашего
компилятора с точки зрения лицензирования (проприетарный, GPL, LGPL, BSD,
иное?)
С уважением,
Андрей Столяров
This archive was generated by hypermail 2b25 : Mon Oct 22 2001 - 12:09:23 MSD