The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Опубликован код старых игр Infocom, включая  Zork, opennews (??), 16-Апр-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


6. "Опубликован код старых игр Infocom, включая  Zork"  +1 +/
Сообщение от Kuromi (ok), 16-Апр-19, 22:52 
Хмм, посмотрев поближе на то, что выложено в Гитхабе напрашивается вывод, что нет.
Ответить | Правка | Наверх | Cообщить модератору

12. "Опубликован код старых игр Infocom, включая  Zork"  –2 +/
Сообщение от Ordu (ok), 17-Апр-19, 00:37 
Да ладно, всё не так плохо. Там внутре lisp, только он вместо () иногда использует <>. Всё что надо, это написать к нему read, а затем научить современный лисп работать с теми сорцами.

Например:

<DEFINE20 PSEUDO ("TUPLE" V)
    <MAPF ,PLTABLE
          <FUNCTION (OBJ)
           <COND (<N==? <LENGTH .OBJ> 3>
              <ERROR BAD-THING .OBJ PSEUDO>)>
           <MAPRET <COND (<NTH .OBJ 2>
                  <VOC <SPNAME <NTH .OBJ 2>> NOUN>)>
               <COND (<NTH .OBJ 1>
                  <VOC <SPNAME <NTH .OBJ 1>> ADJ>)>
               <NTH .OBJ 3>>>
              .V>>

Тут сложно сказать, что к чему -- макрос это объявляется или функция? если функция, то к чему , перед PLTABLE? И что значат точки -- это такой способ вызывать symbol-value? Но так или иначе, мне кажется, что если пару дней поломать голову над этими сорцами, то можно понять что к чему, и ещё за пару дней написать подходящий lisp, который это сможет прожевать. Потом, правда, можно отлаживать это всё месяц, но это другой вопрос.

А если вместо того, чтобы ломать голову над сорцами найти мануал к тому lisp'у, на котором всё это написано, то можно отлаживать не месяц, а за пару недель справится. Или даже быстрее -- сложно сказать. Главное писать на lisp'е, не переизобретая lisp. Не важно на каком -- common lisp, scheme, racket, elisp -- главное на lisp'е. Потому что если не на lisp'е, то придётся начать с написания lisp'а. То есть, в любом случае придётся начать с написания lisp'а, но написать lisp на lisp'е -- это как два пальца об асфальт, а вот на C написать лисп -- это уже хороший такой студенческий проект для постижения дзена.

Ответить | Правка | Наверх | Cообщить модератору

13. "Опубликован код старых игр Infocom, включая  Zork"  +2 +/
Сообщение от Stax (ok), 17-Апр-19, 04:01 
> на C написать лисп -- это уже хороший такой студенческий проект для постижения дзена.

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

Между прочим, "напишите реализацию лиспа (либо пролога)" на каком-нибудь языке (а можно просто каждого из них на другом) это вполне стандартное задание в рамках курса, где учат лисп (напр. матлогика в университете). И никакого "постижения дзена", обычное задание.

PS а для ответа на вопрос о том, что тут объявляется, можно смотреть спецификацию языка MDL: https://en.wikipedia.org/wiki/MDL_(programming_language)

Ответить | Правка | Наверх | Cообщить модератору

14. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от Ordu (ok), 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'а, по-сути, к написанию парсера.

Ответить | Правка | Наверх | Cообщить модератору

19. "Опубликован код старых игр Infocom, включая  Zork"  +1 +/
Сообщение от Stax (ok), 17-Апр-19, 08:43 
> Ну это *очень* ограничено. Во-первых, в глаза бросается, оно без сборки мусора,
> то есть заполняет память пока не упадёт с ООМ. А сборка
> мусора -- это значит выкидываем libc'овый malloc, расчехляем mmap и пишем
> свой аллокатор. Во-вторых, там нет очень многих вещей, которые для лиспа
> -- норма. Скажем целочисленных значений, массивов, хештабличек, компиляции/оптимизации
> -- оно ж убъётся что либо делать в том формате, в
> котором есть, и например к любой локальной переменной добираться через поиск

Это так, но... если с практической точки зрения в этой задаче - сколько там памяти может захотеть программа 80 года, работавшая на 8-битных железках с 64 КБ памяти? Мусор можно не собирать, а хэштаблицы и оптимизации для кода, который мог выполняться на 1 МГц процессоре?

Ответить | Правка | Наверх | Cообщить модератору

38. "Опубликован код старых игр Infocom, включая  Zork"  +1 +/
Сообщение от Ordu (ok), 17-Апр-19, 16:19 
> сколько там памяти может захотеть программа 80 года, работавшая на 8-битных железках с 64 КБ памяти?

Сложно сказать. Тут можно только приблизительно прикинуть. Допустим вызовы функций в среднем имеют один аргумент. Допустим что это приводит к выделению одного cons из двух указателей, то есть 4 байта. Это значит, что 256 выполненых вызовов функций отожрут 1Kb под мусор. Имея гигабайты памяти можно перетерпеть.

> Мусор можно не собирать, а хэштаблицы и оптимизации для кода, который мог выполняться на 1 МГц процессоре?

Именно поэтому я и говорю, что надо писать на lisp'е. Рассуждения вида "если оно не тормозит, значит можно сделать тормознее" и приводят к тому, что сегодня тормозит всё. Если писать на lisp'е, ты получшь хэштаблички, оптимизирующую компиляцию в native код, сборку мусора и все прочие плюшки бесплатно, просто потому, что ты пишешь lisp на lisp'е, то есть компилируешь один lisp в другой lisp. Отказываться от бесплатных плюшек и писать на C, просто потому что можно сделать тормознее?

С другой стороны, что любопытно, современный lisp (типа sbcl, например) отожрёт больше памяти чем весь этот zork без сборки мусора. Там речь пойдёт про десятки мегабайт потребляемой памяти. Я думаю, меньше не выйдет. И вот это реально делает кейс интересным. Провоцирующим когнитивный диссонанс.

Ответить | Правка | Наверх | Cообщить модератору

27. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от myhand (ok), 17-Апр-19, 10:59 
> в глаза бросается, оно без сборки мусора

Ну, для этого, в принципе, можно просто libgc взять.

> Скажем целочисленных значений

gmp

> массивов, хештабличек

Массивов не было в scheme ...  очень долго.  

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

В конце 80-х так и делали, посмотрите на какой-нибудь siod 1.x.  Тоже сейчас можно заменить, используя какую-нибудь готовую библиотеку.

Короче, действительно ничего сложного - в заявленный объем вполне могла влезть реализация scheme с define/set!, if, quote, lambda и даже макросами.

Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

33. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от Ordu (ok), 17-Апр-19, 13:38 
> Массивов не было в scheme ...  очень долго.
> В конце 80-х так и делали, посмотрите на какой-нибудь siod 1.x.  
> Тоже сейчас можно заменить, используя какую-нибудь готовую библиотеку.

И мне будут рассказывать, что Electron -- это бездарное разбазаривание ресурсов...

Ответить | Правка | Наверх | Cообщить модератору

34. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от myhand (ok), 17-Апр-19, 14:02 
Это можно записывать как признание в том, что electron - студенческая поделка?
Ответить | Правка | Наверх | Cообщить модератору

39. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от Ordu (ok), 17-Апр-19, 16:26 
"Electron -- это студенческая поделка" -- это заявление, которое имеет очень косвенное отношение к тому, чтобы отразить реальное положение дел. Это заявление преследующее политическую цель, опорочить в глазах других социальное явление, которое кому-то там не по душе. Это заявление, чья цель -- навязать другим свои личные предпочтения. Предлагать мне согласиться с заявлением сделанным в политических целях -- совершенно бесполезно. С политическими заявлениями вам лучше в госдуму, туда в это сборище неудачников, вышвырнутых из уважаемых профессий за профнепригодность.
Ответить | Правка | Наверх | Cообщить модератору

41. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от myhand (ok), 17-Апр-19, 17:24 
> Это заявление преследующее политическую цель

Это была шутка.

> это сборище неудачников, вышвырнутых из уважаемых профессий за профнепригодность.

Чтоб я так жил, как эти неудачники.

Ответить | Правка | Наверх | Cообщить модератору

43. "Опубликован код старых игр Infocom, включая  Zork"  +1 +/
Сообщение от Ordu (ok), 17-Апр-19, 18:10 
>> Это заявление преследующее политическую цель
> Это была шутка.

Если это была шутка, это не значит, что это была не политика. Я бы сказал наоборот, что это скорее свидетельство в пользу политичности заявления, нежели против неё.

https://lesswrong.ru/w/%D0%A4%D0%B0%...

>> это сборище неудачников, вышвырнутых из уважаемых профессий за профнепригодность.
> Чтоб я так жил, как эти неудачники.

Неужели у тебя в жизни всё так плохо? Любимая работа, любимая женщина, план как захватить мир и работа над ним -- неужели у тебя нет всего этого? А если есть, то зачем тебе жизнь политика, сводящаяся к тому, чтобы лизать задницу нужным людям, избегать бесполезно ссориться с ненужными людьми, и демонстративно воевать с теми, с кем выгодно воевать? Зачем тебе нужна жизнь человека, который продал душу PR'у и теперь шагу ступить не может самостоятельно?

Ответить | Правка | Наверх | Cообщить модератору

44. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от myhand (ok), 17-Апр-19, 18:24 
> Неужели у тебя в жизни всё так плохо? Любимая работа, любимая женщина,
> план как захватить мир и работа над ним -- неужели у
> тебя нет всего этого?

У меня есть еще нелюбимая работа, чтобы обеспечивать весь этот сабж и не сдохнуть при этом с голоду.

Впрочем, хватит оффтопика.  Табличку сарказм я все-равно дома забыл.

Ответить | Правка | Наверх | Cообщить модератору

47. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от Аноним (47), 18-Апр-19, 01:21 
>А сборка мусора -- это значит выкидываем libc'овый malloc, расчехляем mmap и пишем свой аллокатор.

О как, а мужики-то и не знали, что делать GC-кучи на malloc оказывается нельзя

Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

48. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от Ordu (ok), 18-Апр-19, 02:02 
>>А сборка мусора -- это значит выкидываем libc'овый malloc, расчехляем mmap и пишем свой аллокатор.
> О как, а мужики-то и не знали, что делать GC-кучи на malloc
> оказывается нельзя

Расскажи им обязательно, что glibc'овая куча даст им лишь ненужный оверхед. В качестве бесплатного бонуса mmap'а они могут получить возможность контролировать раскладку памяти и выдерживать во всех указателях часть битов константными, а это значит их можно использовать под что-то ещё.

И ещё скажи им, что харе пиво бухать в рекламе, вместо самообразования, тогда реже придётся сталкиваться с ситуаций "а мы не знали".

Ответить | Правка | Наверх | Cообщить модератору

16. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от Урри (?), 17-Апр-19, 08:20 
10 правило гринспена (есть на вики):

Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp.

--

Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

46. "Опубликован код старых игр Infocom, включая  Zork"  +/
Сообщение от CZ (??), 17-Апр-19, 23:41 
В том числе и сам COMMON LISP.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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