Common lisp: преносимост

въпрос

Ако направя 2d игра в common lisp (използва: lispbuilder-sdl, quicklisp, cffi), използвайки closure cl на windows, ще мога ли лесно да я пренеса към други платформи (linux/iPhone(може би )/android) по-късно? Lisp "подходящ" ли е за инсталируеми програми?

информация

  1. Играта ще използва OpenGL за графики. Най-вероятно ще използва sdl за инициализация на input/opengl и sdl или openal за аудио. По-късно може да използвам собствената си библиотека вместо sdl.
  2. Писането на няколко C++ библиотеки за cffi (за обвиване на функционалността по "преносим" начин) не е проблем.

обосновка

Наистина, наистина съм уморен от C++. Искате ли да опитате нещо (което не е Python) с по-прост синтаксис + повече мощност. Имам предвид проект за игра, искам да знам дали изборът на lisp за игра означава сериозни проблеми, ако изведнъж реша да разпространявам/пренасям играта по-късно.

--редактиране--

допълнителна информация

Какво имаш предвид под "подходящи" и "инсталируеми програми"?

Не съм сигурен колко добре ще работи CFFI/quicklisp, ако се опитам да превърна завършената програма, която може да работи на моята машина, в пакет за инсталиране (инсталатор на Windows на Windows, например). quicklisp, например, настройва пътеки/хранилища в началната директория на потребителя (което може да не е приемливо поведение) и се опитва да изтегля пакети автоматично от външни източници, което не е добре, когато се опитвате да разпространявате програма и се уверете, че работи като предназначени. CFFI в някои моменти "свързва" чужди библиотеки с lisp функции и за мен не е ясно колко добре ще работи, да речем, ако изхвърля изображението на програмата, вградя го в exe и стартирам споменатия exe на друга машина. Според здравия разум това би трябвало да работи добре, както е, но в най-лошия случай може да доведе до необходимостта да напиша сложен инсталатор, специфичен за дистрибуцията на lisp.


person SigTerm    schedule 31.07.2013    source източник
comment
Предполагам, че това зависи от използваните библиотеки. Ако се предоставят и под другата ОС, къде трябва да е проблема? Трябва да бъде същият като всеки друг език: спазвайте дадения стандарт, проверете дали използваните библиотеки са пренесени и все още предоставят същия интерфейс. Вторият ви въпрос обаче е доста неясен. Какво имате предвид под подходящи и инсталируеми програми?   -  person Sim    schedule 01.08.2013
comment
Още сила? отколкото в C++? Хей, сигурен ли си, че го пробва?;)   -  person Michael IV    schedule 01.08.2013
comment
@MichaelIV: 7 години опит трябва да са достатъчни.   -  person SigTerm    schedule 01.08.2013
comment
@Sim: Не съм сигурен колко добре ще свири CFFI + quicklisp, когато се опитам да превърна готовата програма в пакет за инсталиране.   -  person SigTerm    schedule 01.08.2013
comment
Според моя опит обикновеният лисп е много преносим.   -  person Spenser Truex    schedule 17.07.2016


Отговори (4)


** ЗАБЕЛЕЖКА: Съжалявам, ако излагам очевидното в тази публикация, не съм сигурен дали сте запознати с Common Lisp**

Продължаване от sds:

Изглежда, че има малко живот за стартирането на closure на android, но наличната производителност остава да се види. Много е малко вероятно да видим lisp игри в iphone store, освен ако не се компилират на друг език, където компилаторът не е наличен по време на изпълнение (вижте Nu или за частна опция вижте mocl, като и двете имат начини за справяне с този проблем)

Преносимост – в различни реализации

В библиотеките определено си струва да ги накарате да работят преносимо във възможно най-много реализации, но за игри наистина бих избрал само една реализация и бих усъвършенствал кода ви там. Вероятно ще разпространявате играта си като пакет за всяка платформа, за разлика от Quicklisp, нали?

Преносимост - между различни платформи

Не забравяйте да проверите напредъка на предпочитаното от вас внедряване на всяка платформа, може да има фини проблеми. За мен използвам SBCL и под Windows само 32bit се поддържа напълно, докато 64 все още е в процес на разработка.

Опаковка

Това е подходящ момент за вас, тъй като част от информацията за пакетиране на приложения Closure за Apple Mac Store беше публикувана на openmcl-devel днес. Все още не съм прочел добре, но нишката може да предостави повече информация.

Zach Beane също направи buildapp за SBCL

Хората от lispbuilder също изглежда имат малко информация за създаване на самостоятелни изпълними файлове.

Инструменти

cl-opengl е много добра обвивка за opengl. Той поддържа както стари, така и модерни opengl стилове и затова намирам областите, които се опитват да предоставят абстракции от по-високо ниво, малко ограничаващи (аз лично избягвам gl-масивите на cl-opengl). Прочетете обаче източника, тъй като там има страхотни неща, особено когато започнете да пишете повече cffi код. {cl-opengl все още се разработва и е достъпен чрез quicklisp - използвах го с удоволствие под linux и windows

lispbuilder-sdl е много готин, но отново може да откриете желание да поемете контрола върху някои области. Например макросът sdl:with-events е страхотен, но поема контрола върху основния ви цикъл и обработката на времеви стъпки. Това може да работи перфектно за вас, но ако не, не се страхувайте да се разровите и да напишете нещо по-добро, за да замените тези части!

Също така lispbuilder предоставя набор от библиотеки, така че преди да ги използвате, проверете дали има по-нов еквивалент в quicklisp. Например lispbuilder има lispbuilder-opengl. Не използвайте това, придържайте се към cl-opengl. Отново lispbuilder има lispbuilder-regex, докато вероятно е много по-добре да използвате CL-PPCRE.

Вероятно не бих препоръчал да го използвате във вида, в който е, но прекарах известно време, за да премахна всички lispbuilder-sdl, които не t се отнасят за модерни opengl игри (така че няма sdl софтуерни повърхности и т.н.). НЕ мисля, че хората все още трябва да използват това, но може да ви даде някои идеи! {lispbuilder не е в тежка разработка, но е достъпен чрез quicklisp - използвал съм го под linux и windows щастливо}

Освен това, докато своднича код, написан от страхотни хора и след това разкъсан от мен, вижте това видео за това как да компилирате отново части от вашата игра докато работи. Това не е моя техника, но работи много добре.

Горното ще изисква да използвате SLIME или SLIMV, което означава използване на Vim или Emacs. SLIME наистина си заслужава времето ви, така че погледнете!

Като цяло, успех, common lisp е страхотно забавление за разработване и въпреки че може да откриете, че отнема известно време, за да получите opengl работен поток, който ви харесва, ако имате време, не се съмнявам, че ще си прекарате страхотно.

Очаквайте с нетърпение да видите играта!

person Baggers    schedule 01.08.2013
comment
Има и версия за вграждане Common Lisp, пренесена към платформи android/iOS. Може да се намери на github.com/ageneau/ecl-android. Малко е остарял, но може да се използва като възможна насока за изследване. - person cybevnm; 03.08.2013
comment
И от страна на схемата това беше само на reddit/scheme github.com/part-cw/lambdanative - person Baggers; 03.08.2013
comment
Що се отнася до ECL, мисля, че това е жизнеспособна опция, поне за Android: Yasuaki Honda успя да създаде Maxima за Android, използвайки го, play.google.com/store/apps/details?id=jp.yhonda&hl=en Не знам проекти за iOS, изградени с ECL, но в принцип също трябва да е възможно. - person piokuc; 06.08.2013

Преносимост

Трябва да правите разлика между преносимост между платформи (напр. дали вашата програма, разработена под Clozure под Windows, ще работи ли на Linux?) и между имплементации (напр. вашата програма Clozure ще работи ли под SBCL?)

Ще трябва внимателно да проучите подробностите в конкретните ръководства за внедряване, но най-общо казано, ако използвате стандартната CL функционалност плюс CFFI, не би трябвало да имате сериозни проблеми в двата аспекта.

Практически погледнато, трябва да проверите колко добре работи Clozure на платформите, от които се интересувате, и дали CFFI поддържа Clozure на тези платформи. Тези въпроси е най-добре да задавате на разработчиците, а не тук.

Инсталируемост

Всички внедрявания на CL извършват „доставка на продукти“ по някакъв начин, например чрез създаване на самостоятелни изпълними файлове, които след това можете да пакетирате и разпространявате.

person sds    schedule 31.07.2013

ще мога ли лесно да го пренеса на други платформи (linux/iPhone(може би)/android) по-късно?

Е, зависи до голяма степен от избраните от вас библиотеки.

Изобщо нямам опит с разработката на Android или iOS, но в момента разработвам малък проект в Common Lisp, който използва lispbuilder-sdl, cl-opengl, quicklisp и т.н. и нямаше проблеми с пренасянето му между SBCL на Linux към Clozure-CL на Windows.

Освен това има поне една обещаваща реализация на Common Lisp за мобилни устройства: https://wukix.com/mocl

Така че мисля, че няма да имате проблеми с пренасянето на вашия код, просто се уверете, че всички библиотеки, използвани във вашето приложение, имат подходяща поддръжка за всяка платформа и изпълнение на Lisp.

Lisp "подходящ" ли е за инсталируеми програми?

Повечето Lisps имат способността да създават самостоятелни изпълними файлове с вградени библиотеки. От друга страна, ако проектът ви стане достатъчно голям, ще трябва да напишете специфични за платформата инсталатори, независимо от евентуални проблеми, свързани с Lisp. И се съмнявам, че частта, свързана с Lisp, се оказва най-сложната. Разгледайте също тази публикация: Изпълним файл на Lisp и обмислете идеята за разпространение на образи по време на изпълнение на Lisp вместо самостоятелни изпълними файлове.

person alexey.e.egorov    schedule 01.08.2013

За използването на Common Lisp като среда за изпълнение на играта вече има отличен отговор.

Искам само да спомена, че игрите за PlayStation 2 Jak and Daxter: The Precursor Legacy и Crash Bondicoot са разработени с помощта на Common Lisp по малко по-различен начин.

Те имаха среда за разработване в Commmon Lisp и направиха език за игра, GOAL (по-късно GOOL), който беше език на високо ниво с вграждане на асемблиране (като __asm__ на C). Следователно продуктът няма много общо със средата за разработка, когато крайният продукт е компилиран.

Те са насочени само към една платформа (PS2), но си представям, че може да се направят езикови конструкции, така че да можете да оптимизирате за няколко платформи, като използвате почти идентичен метод. Създаването на език на играта би абстрахирало действителните разлики в хардуера и библиотеките и би запазило сложността на компилатора по-ниска, отколкото да опитате да компилирате Common Lisp напр. Dalvik директно. компилаторът също не трябва да завърши като обектен код. Може да се компилира до C/Java/Objective C.

След това проблемът с преносимостта се превръща в нещо, което контролирате, като разглеждате някоя предпочитана цел, когато проектирате вашия език и как да накарате пакета/двоичния файл да следва пътищата на целта.

person Sylwester    schedule 01.08.2013