The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Ordu, 17-Апр-19 04:34 
>> на C написать лисп -- это уже хороший такой студенческий проект для постижения дзена.
> Ну это вы загнули. Лисп тем и отличается от языков со сложной
> грамматикой и хитростями, что его базовый интерпретатор написать несложно всегда, и
> вам не нужен для этого лисп. На C не то чтобы
> сильно сложнее (чуток заморочек с токенизацией и управлением памятью, но ничего
> особенно сложного там нет).
> В качестве доказательства гуглится, например, это: https://carld.github.io/2017/06/20/lisp-in-less-than-200-lin...
> Да, ограничено, но тем не менее.

Ну это *очень* ограничено. Во-первых, в глаза бросается, оно без сборки мусора, то есть заполняет память пока не упадёт с ООМ. А сборка мусора -- это значит выкидываем libc'овый malloc, расчехляем mmap и пишем свой аллокатор. Во-вторых, там нет очень многих вещей, которые для лиспа -- норма. Скажем целочисленных значений, массивов, хештабличек, компиляции/оптимизации -- оно ж убъётся что либо делать в том формате, в котором есть, и например к любой локальной переменной добираться через поиск этой локальной переменной по имени списке. Это может и мелочи, но этих мелочей наберётся, и однобитного тега уже не хватит, придётся держать там один бит под сборщик мусора, пару бит под тег (на 64-битной платформе проще, там больше ненужных битов в указателе, можно хоть все встроенные типы закодировать тегом), и в этой паре одно из значений будет намёком на то, что объект содержит в себе ссылку на другой объект, который определяет тип этого объекта. Это может быть просто символ, скажем 'integer, или 'float, хотя под int, как правило, всё же выделяют специальное значение тега, и оставшиеся биты "указателя" используют как значение этого int'а, чтобы не выделять из кучи место под каждый int. Но тут встаёт вопрос о том, что хотелось бы в int'е иметь максимум битов свободными, и тут мы приходим к сложному кодированию для тега (мультибитному -- переменному числу бит на тег), чтобы int определялся бы одним битом, а остальные типы больше использовали бы. Аррргх... Это очень любопытно всё собрать воедино и заставить работать.

> А если взять язык выше уровнем, типа питона то на нем вообще халява.

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

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру