LINUX.ORG.RU

Сетевые игры на основе лиспа


0

1

Здравствуйте, вот сидел сегодня и задумался о том как сделать сетевую игру с помощью лиспа. Ничего сложно не охота так просто для начала крестики нолики. Да я понимаю что в сети всего этого полно и даже онлайн есть, но охота реализовать самому и посмотреть насколько легко справится лисп(вернее я справлюсь с помощью лиспа) сам по себе конечно код тривиальный если просто играть по очереди одной мышкой... Но охота связаться с человеком который в локальной сети сидит и который может сидеть на другом конце страны... как это реализовать? Ща вот полазил по нигме с запросом «Сетевые игры на лиспе» и подобные запросы. Мне ничего не выдало кроме того как создать сайт на лиспе. С чего начать, может кто то статью знает с примерами или книгу? А может на лиспе всё это дело слишком сложно и не стоит заморачиваться?

Ответ на: комментарий от anonymous

>Нет, он на самом деле пытается писать на лиспе.

вот сидел сегодня и задумался о том как сделать сетевую игру с помощью лиспа.

You kid me? И какой-такой лисп?

aedeph
()
Ответ на: комментарий от RusNekromant

> А почему бы нет... мне нравится лисп.

Просто на ЛОРе лисп это исключительно тема для срача. И когда ты про него что-либо спрашиваешь - ты выступаешь в роли тролля, провоцирующего срач. Хотя на ЛОРе кажется всё используется для срача и кроме троллей здесь больше никого особо и нет )

archimag ★★★
()
Ответ на: комментарий от tensai_cirno

Спасибо. Но я вижу просто список методов и функций. Просто я вот даже не представляю зачем мне это... одним словом пример бы а не знаю с чего начать.

RusNekromant
() автор топика

А нахрен тебе лисп сдался? Разве есть киллер-фича в лиспе для сабжевых целей? Невозбранный обмен S-выражениями? Дык, это раньше в далекие дремучие времена можно было их сувать eval'у напрямую... Теперь это наивность, граничащая с идиотизмом.

Теперь про реализации... Реализации CL делятся на 2 неравные части: оголтелая проприетарщина и SBCL, у которого масса проблем. Тот же параллелизм. Scheme — классная вещь, но массового развития, кроме академической среды, где используется для обучения, не получила. Clojure — последняя надежда лиспа, но он как молодое вино: все отлично, но нужно время, да и его излишне динамическая природа действует на нервы.

В сетевых игрушках, я считаю, нужно обосновывать правильность получившегося «продукта», иначе феерические косяки при взаимодействии клиентов с сервером обеспечены.

А сделать это можно только с помощью языков со статической типизацией и сделанной в соответствии с теорией типов системой типов.

Поэтому на выбор: Хаскель, Окамл, Скала, и F# (если не тошнит от .Net и M$). У каждого языка есть свои собственные киллер-идеи, свои слабости и свои подходы. Но они на несколько десятков лет обогнали CL, который застрял со своим нетипизированным лямбда-исчислением в 50-х годах прошлого века.

Macil ★★★★★
()
Ответ на: комментарий от Macil

Хм интересно что же это за грабли там могут быть.... но спорить не буду не знаю. Но вот вопрос остаётся открытым, с чего начать хотя бы небольшую схемку то как должно всё это работать в связке, с чего вообще начать.

RusNekromant
() автор топика
Ответ на: комментарий от Macil

>А нахрен тебе лисп сдался? ... CL, который застрял со своим >нетипизированным лямбда-исчислением в 50-х годах прошлого века.

Погодите секунду, я за попкорном сбегаю.

anonymous
()
Ответ на: комментарий от Macil

> Реализации CL делятся на 2 неравные части

Какую-то чепуху говорите. И сфига параллелизм это проблема SBCL? Ничего не понял. И Clojure как «последняя надежна лиспа» как-то не смешно.

нужно обосновывать правильность получившегося «продукта», иначе

феерические косяки при взаимодействии клиентов с сервером обеспечены.



Да вы что такое говорите? Как страшно жить. Читал обзоры, где разработчики делились с восторгом опытом использования для этого Python.

Хаскель, Окамл, Скала, и F# (если не тошнит от .Net и M$)


Ряд из «C++, Java, Python, Ruby» - выглядит намного правдоподобней.

Но они на несколько десятков лет обогнали CL, который застрял со

своим нетипизированным лямбда-исчислением в 50-х годах прошлого века.



Осторожней, не налегайте на жирное, от этого толстеют.

archimag ★★★
()
Ответ на: комментарий от archimag

>Какую-то чепуху говорите.

Хе-хе-хе. Да. Точно. Я еще забыл третью часть: полную дохлятину.

Ты сам-то под чем пишешь? Под SBCL? А почему?

от этого толстеют


Да куда уж мне. Но мне вот что-то думается что сорвеменная теория типов зародилась несколько позднее, так что лисп просто не мог... А когда стали появляться всякие разработки типа ML, было уже поздно.

А в 90-х годах стало совсем поздно. А потом стало всем пофиг.

Я это уже говорил, и еще раз повторю: для всех, включая лисперов, НАМНОГО выгоднее считать лисп динамическим языком общего назначения. А не приписывать ему какие-то надуманные исключительные свойства, то же compile-time метапрограммирование.

Macil ★★★★★
()
Ответ на: комментарий от Macil

> А сделать это можно только с помощью языков со статической типизацией и сделанной в соответствии с теорией типов системой типов.

Статическая типизация - это просто частный случай макросов. Только типизация, в отличии от макросов, не дает соответствующей гибкости для доказательства гарантии корректности и несет нехилый оверхед.

anonymous
()
Ответ на: комментарий от Macil

> так что лисп просто не мог...

Ну что же это за глупость? Есть куча разных типизированных лиспов на любой вкус. Просто лиспу статическая типизация _не нужна_. Система типов - это просто костыль, для нормального языка излишний. Но самое главное «достоинство» статической типизации - простота соответствующей теории. Поскольку это самый тривиальный раздел современного cs, то можно быстро, резко, катать туеву хучу диссеров. Вот и получается, что уже несколько десятков лет прошло - а подвижек никаких нет. Так и сидят все на лямбда-двойке с одной стороны, CoC с другой (которое все также неприменимо) и протухшем Хиндли-Милнере в середине. А вместо того, чтобы заниматся разработкой удобных инструментов, занимаются дрочкой вприсядку на теоркат. Потому что дрочить вприсядку на теоркат - это просто. А разрабатывать удобные инструменты - напротив, очень сложно.

anonymous
()
Ответ на: комментарий от Macil

> А не приписывать ему какие-то надуманные исключительные свойства, то же compile-time метапрограммирование.

Вот придёт Сами Знаете Кто и надаёт тебе по шапке.

anonymous
()
Ответ на: комментарий от RusNekromant

>Почему именно - потому что нравится...

Ну дык, тогда в путь... «Нравится» - это хороший аргумент, на самом деле.

я написал же, что sbcl под виндой


Термин «лисп» слишком абстрактен и, строго говоря, неправилен. Лиспом можно называть работы МакКарти, но они давным-давно не используются.

У лиспа несколько течений:

1. Common Lisp, CL для друзей. SBCL - одна из его реализаций.
2. Scheme, созданная в 1975-м году. В основе ее философии лежит минимализм и дальнейшее развитие идей ФП.
3. Clojure, примечателен тем что является единственной широко известной реализацией лиспа 00-х годов. По утверждению автора, она больше похожа на маккартивский лисп, плюс мощные примитивы для реализации параллелизма.
4. Всякие EmacsLisp, AutoLisp и многие другие лиспы используемые для скриптинга.

ЗЫ: Кстати, ява скрипт созданный товарищем Гаем Стилом, вполне-себе мог быть Схемой. Не сложилось. Но в JS много очень интересных идей, например, там спокойно пользуются настоящими функциями высших порядков, а этим далеко не каждый язык может похвастаться.

А есть еще замечательная штуковина MetaLua.

И вообще, compile-time метапрограммирование, которое здесь называют «макросами» поддерживает очень и очень много языков.

Macil ★★★★★
()
Ответ на: комментарий от anonymous

>Вот придёт Сами Знаете Кто и надаёт тебе по шапке.

Кто такой Сами Знаете Кто?

Macil ★★★★★
()
Ответ на: комментарий от anonymous

>занимаются дрочкой вприсядку на теоркат

А причем тут теоркат? К хаскелю настолько мало относится. И никто, подчеркиваю, никто на теоркат не дрочит.

простота соответствующей теории


Да. Именно простота. Просто, когда знающие люди взяли да показали. И стало просто. То-то лет 50 математики мозгами скрипели. Даже конструктивную логику привлекли, для того чтобы можно было использовать изоморфизм Карри-Ховарда как основу. И еще лет 20 пытались реализацию сделать. И еще лет 20 эти идеи пытаются протолкнуть в мейстрим. И до сих пор какие-то бредовые суеверия по этому поводу возникают.

Macil ★★★★★
()
Ответ на: комментарий от Macil

> Ты сам-то под чем пишешь? Под SBCL? А почему?

Обычно SBCL. Потому что он хороший.

сорвеменная теория типов зародилась несколько позднее,

так что лисп просто не мог



Профит от этой теории, мягко говоря, не очевиден. Ведь язык «будущего», это вовсе не Haskell, а JavaScript.

НАМНОГО выгоднее считать лисп динамическим языком общего назначения.

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


то же compile-time метапрограммирование.



Что-то я не помню, что бы когда либо приписывал ему подобные свойства. Очевидно и то, что CL это динамический язык общего назначения. Так что к чему вы это сказали мне совершенно не ясно.

archimag ★★★
()

Если тебе нужны обязательно примеры, то возьми какое-нибудь распространенное сетевое решение, например простенький веб-сервер, поймешь, как работать с сетями, а дальше лабай свои игрушки.

Мне с сетями в лиспе было бы очень туго, так как документация к «списку методов и функций» весьма скудная и понять как и зачем это все работает довольно затруднительно. Но у меня был достаточно большой опыт программирования сетевых вещей на си, а там документация очень хорошая. Так что может быть, если знаешь си, будет проще потратить недельку на баловство с сетями на сравнительно низком уровне. man 7 socket и дальше.

staseg ★★★★★
()
Ответ на: комментарий от staseg

Опыта нет... а то что скудная это как раз таки самая большая проблема.

RusNekromant
() автор топика
Ответ на: комментарий от Macil

> И вообще, compile-time метапрограммирование, которое здесь называют «макросами» поддерживает очень и очень много языков.

Список в студию.

anonymous
()
Ответ на: комментарий от anonymous

остались ещё грамотные люди на лоре

> А вместо того, чтобы заниматся разработкой удобных инструментов, занимаются дрочкой вприсядку на теоркат.

:D

anonymous
()

Полистай первую главу Таненбаума, Компьютерные сети.

anonymous
()
Ответ на: комментарий от Macil

> То-то лет 50 математики мозгами скрипели. Даже конструктивную логику привлекли, для того чтобы можно было использовать изоморфизм Карри-Ховарда как основу.

А где результат-то? 50 лет мозгами скрипели, а остались на том же уровне, что и тогда. То есть ни с чем.

anonymous
()
Ответ на: комментарий от anonymous

> А причем тут теоркат?

Это иносказательно. Теоркат с самого своего появления был для математиков символом чего-то излишне общего и бесполезного. Абстрактная чепуха же. Типа как рокет саенс - чтото сложное и заумное, так теоркат - невнятная и бестолковая хрень.

anonymous
()
Ответ на: комментарий от Macil

Разве есть киллер-фича в лиспе для сабжевых целей?

Например REPL в котором можно вживую переписать/обновить любую часть рантайма. Haskell как раз этим не отличается - нормального REPL'а пока нет (хотя вот в Agda2 осилили сделать, т.е. тут нет принципиальных проблем). Если кто-то способен полностью верифицировать свою задачу ещё до начала написания кода - ну тогда вопросов нет. Но большинству такие вещи не подвластны - если что-то пойдёт не так, то хотелось бы просто полесть в рантайм и поправить (запускаешь swank, удалённо подключаешься к нему, поправляешь, отключаешься), а не останавливать сервер и не смотреть «а что у меня там с типами, что не так с моей супер-надёжной системой?» :) (даже SPJ в шутку признавался, что это было бы неплохо - иметь такую возможность).

А ещё динамика, т.е. типизация «сверху» от универсального типа T которым типизируются все объекты + возможность сужать тип. В Haskell нет динамики, типизация проводится «снизу» и пока система типов (в смысле, System FC) недостаточно мощна чтобы обеспечивать полностью динамическое поведение - можно определить универсальный АТД средствами GADTs, но по нему тупо нельзя провести pattern-matching (потому что соответсвующий вывод типов, упрощёно унифицирующий, не справляется). Data.Dynamic просто не работает - либо все должны делать deriving для него (или компилятор должен делать), либо я должен написать инстансы для Dynamic ко всем существующим в haskell коде типам данных (т.е. делать чужую работу).

Ещё нормальная мутабельность которую в haskell (via IORef + unsafePerformIO) пока банят. При том что unsafePerformIO не является костылём, оно имеет формального двойника (там, в Hask), просто у GHC так STG устроен - проблема реализации.

Короче - нужен полный REPL (hot patching), динамика и проработанная система unpure кода (чтобы в кору не падало (как минимум) и чтобы не приходилось обмазывать лифтингом нормальный функциональный код в котором встречется IO или случайные числа).

SBCL, у которого масса проблем.

Огласите тогда весь список проблем, пожалуста. Если что, то порт на Win32 считается экспериментальным. Какие ещё есть проблемы?

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

unsafePerformIO не является костылём, оно имеет формального двойника (там, в Hask), просто у GHC так STG устроен - проблема реализации

а вот это уже интересней. можно подробнее?

jtootf ★★★★★
()

Что-то и в самом деле толсто. Ты что, спрашиваешь, позволительно ли тебе написать игру? Или спрашиваешь, возможно ли для этого использовать Лисп? Ответ «да» на оба вопроса.

А искать «сетевые игры на лиспе» глупо, потому что Лисп - малозначащая деталь реализации.

tailgunner ★★★★★
()
Ответ на: комментарий от Macil

> ява скрипт созданный товарищем Гаем Стилом

Ты из параллельной Вселенной? %)

tailgunner ★★★★★
()
Ответ на: комментарий от jtootf

> а вот всё это мне померещилось, да?

Это ты к чему? Как твой линк связан с удобными инструментами?

anonymous
()
Ответ на: комментарий от jtootf

> тебе название языка CAML расшифровать, или сам нагуглишь?

Categorical Abstract Machine Language. Что дальше?

anonymous
()
Ответ на: комментарий от anonymous

Это ты к чему? Как твой линк связан с удобными инструментами?

а что находится по линку, ежели не инструменты? статически типизированные, с умеренным использованием теорката

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> а что находится по линку, ежели не инструменты? статически типизированные, с умеренным использованием теорката

Вы совсем в контекст никак? Ясно же, что под инструментами подразумевался язык/IDE, а не какая-то конкретная либа, делающая что-либо конкретное. Речь же шла о статической типизации и предоставляемых ею гарантиях корректности. Вот в этой области и выходит - прошло 50 лет, математики мозги напрягали, а воз и поныне там. Ничего нового не появилось.

anonymous
()
Ответ на: комментарий от jtootf

> ты просил результатов, вот тебе пример. simple

И где там результат? Результат предполагает движение вперед. С появлением caml'а никакого движения вперед и ничего нового по сравнению с тем, что было, не появилось. Так же как с появлением Хаскеля, кстати. Все те же обсосанные 50 лет назад идеи.

anonymous
()
Ответ на: комментарий от anonymous

Ясно же, что под инструментами подразумевался язык/IDE

чем в таком случае не угодил Haskell? опять же, список по ссылке неплохо демонстрирует удобство данного языка для разработки в широком спектре областей

к чему тут IDE - вообще не понял. надо срочно бросать интересные и практически применимые области, и разрабатывать очередную никому не нужную среду что ли? но зачем?

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

никакого движения вперед и ничего нового по сравнению с тем, что было, не появилось

ок, что ты понимаешь под движением вперёд? а то один хрен все под тезисом Чёрча-Тьюринга ходим, и с этой точки зрения ничего нового никогда не будет

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>статически типизированные, с умеренным использованием теорката

Что-то я сомневаюсь насчет теорката =)

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Что-то я сомневаюсь насчет теорката =)

умеренным же!

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

> Речь же шла о статической типизации и предоставляемых ею гарантиях корректности. Вот в этой области и выходит - прошло 50 лет, математики мозги напрягали, а воз и поныне там.

То есть ты не видишь разницы между Algol60 и Ocaml/Haskell?

tailgunner ★★★★★
()
Ответ на: комментарий от quasimoto

>можно вживую переписать/обновить любую часть рантайма. Haskell как раз этим не отличается и бла-бла-бла про хаскел

Это попытка разжигания войны сектантов? Ждём продолжения «хаскел-фан-бои наносят ответный удар».

А по теме рантайм обновление нафик не нужно, даже сервера прекрасно без этого обходятся. И вся архитектура получается стройной, лаконичной и простой. Примеров тому масса (systemd, runit, supervisord, gnunet-arm и т.д.).

anonymous
()
Ответ на: комментарий от quasimoto

>> SBCL, у которого масса проблем.

Огласите тогда весь список проблем, пожалуста. Если что, то порт на Win32 считается экспериментальным. Какие ещё есть проблемы?


Можно начать с того, что эта недоподелка до сих пор не поддерживает бурно развивающуюся ARM.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.