> 1 <

Автор Сообщение

Lispru

Members


Статус

11 сообщений

Где: Russia
Род занятий: Lispru
Возраст:

#5821   2012-03-01 16:33 GMT+3 часа(ов)      
я не совсем ясно представляю себе процесс

вот например есть у меня линукс-юникс-мак ось - как запустить свой собственный лисп, свой диалект

чисто технологически что делается?

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#5824   2012-03-01 17:02 GMT+3 часа(ов)      
Свой - это как? Своя собственная с нуля реализация, или поверх одного лиспа свой собственный диалект?
I wish I'd made you angry earlier

Lispru

Members


Статус

11 сообщений

Где: Russia
Род занятий: Lispru
Возраст:

#5826   2012-03-01 17:05 GMT+3 часа(ов)      
своя
допустим основанная на базовом элементарном лиспе + что-то своё

сам не совсем понимаю что спрашиваю ))

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#5827   2012-03-01 17:10 GMT+3 часа(ов)      
Что то вроде http://frank.kank.net/essays/hash.html.
I wish I'd made you angry earlier

Lispru

Members


Статус

11 сообщений

Где: Russia
Род занятий: Lispru
Возраст:

#5828   2012-03-01 17:24 GMT+3 часа(ов)      
мне бы на русском, поясней

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#5829   2012-03-01 17:31 GMT+3 часа(ов)      
А мне бы баб и марафету
I wish I'd made you angry earlier

Lispru

Members


Статус

11 сообщений

Где: Russia
Род занятий: Lispru
Возраст:

#5830   2012-03-01 17:42 GMT+3 часа(ов)      
а мне бы молока бы с булочкой да на печку с дурочкой


но тем не менее вопрос висит

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#5835   2012-03-01 23:51 GMT+3 часа(ов)      
Цитата
я не совсем ясно представляю себе процесс
Оно и видно
Цитата
вот например есть у меня линукс-юникс-мак ось - как запустить свой собственный лисп, свой диалект
Можно кликнуть по нему мышкой, или запустить в терминале
Цитата
чисто технологически что делается?
Конкретно, что вы собираетесь создавать? Если интерпретатор, то вы его собираетесь создавать с нуля или на базе уже существующего?
Цитата
своя
допустим основанная на базовом элементарном лиспе + что-то своё
А что свое? Для начала вы должны знать лисп, т.к. без этого не имеет смысла даже задумываться о собственном интерпретаторе.
Цитата
сам не совсем понимаю что спрашиваю ))
Тогда зачем спрашиваете?

andrrog

Members


Статус

5 сообщений

Где: Russia
Род занятий:
Возраст:

#6191   2012-05-27 21:28 GMT+3 часа(ов)      
А я когда-то написал свой интерпретатор Лиспа. На Турбо-Паскале, но сейчас эа версия - вряд ли акуальна. Она 16-разрядная, сильно завязана на MS-DOS (чем портировать её на Windows/Linux/MacOS проще написать с нуля). Потом я разочаровался... А теперь думаю, писать под 32 разряда нет смысла - если когда-нибудь возьмусь, то уж сразу под 64 разряда и на портабельной платформе...

А технология - простая.

1. Определяем базовые структуры данных: узел списка, представление для строк, для символов, чисел и т.п. У меня это была запись с вариантами (это в понятиях Паскаля, а если С/С++/С# это структура с анонимным объединением (union) или класс с вариантами - аналог класса Variant (TVariant)). Ну, короче, как мы будем что внури себе представлять.

2. Не помешает свой менеджер памяти: чтобы пореже обрацаться за этим к операционной системе, а если уж обращаться, то за крупными блоками, кратными странице памяти (включая служебные поля). Это значит, - реализовать подпрограммы запроса и освобождения блоков памяти. Эта часть - довольно платформо-зависимая, но неплохо бы всю эту зависимость сосредоточить только в ней. Не знаю, как кто, а лично я все "свободные" узлы для атомарных типов (а они у меня все были одинаковой длины) организовывал в связный список, вернее - очередь. Освобождаемые добавлял в конец, а запрашиваемые брал из начала. И если только очередь свободных - пуста, то запрашивал очередную новую страницу у операционки, её же - уже никогда не освобождал (с точки зрения операционки), даже если там все элементы были "свободными" (т.е. включены в очередь свободных). Для строк и атомов (имён) держал два представления: "короткая строка" до 252 байт (кстати, - имена символов должны быть только "короткими", т.е. не длиннее 252 буквы) и "длинная строка". Ну, в 16-разрядной версии даже на "длинную строку" всё же было ограничение 65520 байт, но в 32- или тем паче, 64-разрядной версии этого органичения практически нет. Под "длинные строки" память не грех запрашивать у самой операционной системы, и освобождать её - теми же средствами. Ещё надо сказать, что если проектировать многопоточную лисп-среду, то менеджер памяти должен быть реализован как Thread-safe, то есть, - совместимым с моделью многозадачности. Проще всего тут погружать участки кода в критические секции или мьютексы. То есть, когда идёт выделение или освобождение какого-то участка памяти, включая изъятие или добавление его в "свободный список", то никакой другой поток исполнения не должен делать то же самое. К слову сказать, у каждого "узла" или иного элемента (атомарного типа или "представителя" строки, указывающего на её тело) есть служебное поле - "счётчик ссылок". Он увеличивается всякий раз, когда на этот элемент устанавливается какая-то внуренняя ссылка (он включается в какой-нибудь список кроме "свободного" или присваивается чему-то как значение), то этот счётчик увеличивается на 1, а при разрыве этой связи - уменьшается. Когда значение этого счётчика обращается в 0, то только тогда этот элемент логически "освобождается".

3. Реализуется синтаксис языка: чтение данных (и программы на самом Лиспе) из строки (или иного входного потока), выделение и распознавание лексем языка, формирование внутренних представлений данных по внешнему (текстовому) представлению, и наоборот - превращение внутреннего представление в строку (или вывод в выходной поток).

4. Реализуются базовые встроенные функции лисп-системы, среди которых - eval, которая, собственно, тащит за собой весь лисп-интерпретатор.

5. Осталось всего ничего: реализовать Главный цикл: ввод из входного потока - вычисление - вывод значения. По-хорошему, конечно, входной и выходной поток нужно уметь как угодно переопределить (консоль, файлы, последовательные устройства, именованные и анонимные каналы, DDE, сокеты различных сетевых протоколов и т.п.) чтобы лисп-интерпретатор не был завязан только на консоль.

6. Для оконной графической системы (GDI Windows, KDE или Gnome для Linux...) надо бы реализовать как "встроенные" функции, которые обеспечивают графический интерфейс пользователя.

7. Трассировщик, отладчик, текстовый редакор с подсвечиванием синтаксиса Лиспа... Короче, - полноценная IDE.

Вот и все дела. Всего ничего! Всего работы на пару месяцев!

Файфель Б.Л.

Members


Статус

61 сообщений
http://homelisp.ru
Где: Russia Саратов
Род занятий: Программист
Возраст: 65

#6912   2013-02-04 22:05 GMT+3 часа(ов)      
Рекомендую найти в сети книжечку С.С. Лаврова и Г.С. Силагадзе "Автоматическая обработка данных. Язык Лисп и его реализация" М. 1978 г. В ней подробно описаны все аспекта реализации Лиспа. Лично я (когда захотелось создать свой интерпретатор) так и поступил: http://homelisp.ru Правда Лавров и Силагадзе описывали Лисп 1.5 (он весьма существенно отличается от CommonLisp).

snv

Members


Статус

25 сообщений
http://sym.at.ua/load
Где: Russia Серпухов
Род занятий: Безработный
Возраст: 34

#7034   2013-05-29 19:17 GMT+3 часа(ов)      
Рекомендую для начала прочитать http://library.readscheme.org/page1.html
The hour will come in which all the peoples of the earth will awake, and the Jews will be the victims. -- Joseph Goebbels, 21 January 1945
> 1 <


Онлайн :

0 пользователь(ей), 40 гость(ей) :




Реклама на сайте: