Кіріспе

Common Lisp (CL) – American National Standards Institute (ANSI) стандартында жарияланған Lisp бағдарламалау тілінің диалектісі, ANSI INCITS 226 1994 (S2018) (бұрын X3.226 1994 (R1999) болған). Common Lisp HyperSpec, гиперсілтемелермен жабдықталған HTML нұсқасы, ANSI Common Lisp стандартынан туындаған. Common Lisp тілі Maclisp-тің стандартталған және жетілдірілген жалғасы ретінде әзірленген. 1980-ші жылдардың басында бірнеше топтар MacLisp-тің әртүрлі нұсқалары бойынша жұмыс істеді: Lisp Machine Lisp (сонымен қатар ZetaLisp), Spice Lisp, NIL және S 1 Lisp. Common Lisp осы MacLisp диалектілерінің мүмкіндіктерін біріктіруге, стандарттауға және кеңейтуге бағытталған. Common Lisp – іске асыру емес, тілдің сипаттамасы. Common Lisp стандартының бірнеше іске асырылуы бар, оның ішінде ашық кодты және тегін бағдарламалық құралдар мен коммерциялық өнімдер де бар. Common Lisp – жалпы мақсаттағы, көп парадигмалы бағдарламалау тілі. Ол процедуралық, функционалдық және объектіге бағытталған бағдарламалау парадигмаларын қолдайды. Динамикалық бағдарламалау тілі ретінде ол эволюциялық және инкременттік бағдарламалық жасақтаманы тиімді орындалу кезінде итеративтік компиляция арқылы дамытуға мүмкіндік береді. Мұндай инкременттік даму көбінесе жұмыс істеп тұрған қолданбаны тоқтатпай, интерактивті түрде жүзеге асырылады. Сонымен қатар, ол типтік аннотация мен түрлендіруді де қолдайды, оларды компиляторға тиімді кодты жасау үшін, кейінірек профильдеу және оңтайландыру кезеңдерінде қажет болған жағдайда қосуға болады. Мысалы, fixnum аппараттық құралдар мен іске асыру қолдайтын диапазондағы бүтін санды қораптан тыс түрде сақтай алады, бұл үлкен бүтін сандарға немесе кез келген дәлдіктегі типтерге қарағанда тиімді арифметиканы қамтамасыз етеді. Сол сияқты, компиляторға модуль немесе функция деңгейінде қандай қауіпсіздік деңгейі қажет екенін Optimize декларацияларын пайдаланып хабарлауға болады. Common Lisp құрамына мультиәдістер мен әдіс комбинацияларын қолдайтын CLOS объектілік жүйесі кіреді. Ол көбінесе Metaobject протоколымен іске асырылады. Common Lisp стандартты мүмкіндіктері арқылы, мысалы Lisp макростары (кодтың түрлендірілуі) және оқу макростары (символдарды талдайтын енгізу анализаторлары) арқылы кеңейтіледі. Common Lisp Maclisp және Джон Маккартидің бастапқы Lisp тілімен кері үйлесімділіктің белгілі бір деңгейін қамтамасыз етеді. Бұл ескі Lisp бағдарламалық құралдарын Common Lisp-ке көшіруге мүмкіндік береді.

Тарих

Common Lisp-тегі жұмыс 1981 жылы ARPA менеджері Боб Энгельмордың бірыңғай қауымдық стандартты Lisp диалектін жасау туралы бастамасынан кейін басталды. Тілдің бастапқы дизайнының көп бөлігі электрондық пошта арқылы жүзеге асырылды. 1982 жылы Гай Л. Стил-младший LISP және функционалдық бағдарламалау жөніндегі 1982 жылғы ACM симпозиумында Common Lisp туралы алғашқы шолу жасады. Тілдің алғашқы құжаттамасы 1984 жылы Common Lisp the Language (CLtL1) деген атпен, бірінші басылым түрінде жарияланды. 1990 жылы жарық көрген екінші басылым (CLtL2 деп аталады) ANSI Common Lisp стандартына енгізілген көптеген өзгерістерді қамтыды: кеңейтілген LOOP синтаксисі, Common Lisp Object System, қателерді басқаруға арналған Condition System, жақсы форматтау принтеріне интерфейс және тағы да көптеген жаңалықтар. Бірақ CLtL2 соңғы ANSI Common Lisp стандартын толық сипаттамайды, сондықтан ол ANSI Common Lisp құжаттамасы емес. Соңғы ANSI Common Lisp стандарты 1994 жылы жарияланды. Одан бері стандартқа ешқандай жаңарту енгізілген жоқ. Common Lisp-ке түрлі кеңейтулер мен жақсартулар (мысалы, Unicode, Concurrency, CLOS негізіндегі IO) әртүрлі іске асырулар мен кітапханалар арқылы ұсынылды.

Деректер түрлері

Common Lisp-те көптеген дерек түрлері бар.

Скалярлық типтер

Сан түрлеріне бүтін сандар, қатынастар, қозғалмалы нүктелі сандар және күрделі сандар жатады. Common Lisp кез келген өлшем мен дәлдікте сандық мәндерді көрсету үшін бигнумдарды пайдаланады. Қатынас түрі бөлшектерді дәл көрсетеді, бұл көптеген тілдерде қолжетімсіз мүмкіндік. Common Lisp осы түрлер арасындағы сандық мәндерді қажеттілікке қарай автоматты түрде түрлендіреді. Common Lisp таңба түрі ASCII таңбаларымен ғана шектелмейді. Көптеген қазіргі заманғы жүзеге асырулар Unicode таңбаларын қолдайды. Символ түрі Lisp тілдеріне тән, бірақ олардың за пределаминда кеңінен танымал емес. Символ – бірнеше құрамдас бөлігі бар бірегей, аталған дерек нысаны: атауы, мәні, функциясы, қасиеттер тізімі және пакеті. Олардың ішінде мән жасушасы және функция жасушасы ең маңыздылары болып табылады. Lisp-тегі символдар басқа тілдердегі идентификаторлар сияқты жиі қолданылады: айнымалының мәнін сақтау үшін; алайда, олардың көптеген басқа да қолданыстары бар. Әдетте, символ бағаланғанда, оның мәні қайтарылады. Кейбір символдар өздерінің мәнін қайтарады, мысалы, кілт сөз пакетіндегі барлық символдар өзін-өзі бағалайды. Common Lisp-тегі бульдік мәндер T және NIL өзін-өзі бағалайтын символдармен бейнеленеді. Common Lisp символдар үшін «пакеттер» деп аталатын кеңістіктерді ұсынады. Скалярлық сандық мәндерді әртүрлі тәсілдермен дөңгелектеуге арналған бірқатар функциялар бар. round функциясы аргументті ең жақын бүтін санға дейін дөңгелектейді, жартылай мәндер жұп санға дейін дөңгелектеледі. truncate, floor және ceiling функциялары сәйкесінше нөлге қарай, төмен немесе жоғары қарай дөңгелектейді. Бұл функциялардың барлығы алынып тасталған бөлшекті қосымша мән ретінде қайтарады. Мысалы, (floor 2.5) -3, 0.5; (ceiling 2.5) -2, -0.5; (round 2.5) 2, 0.5; және (round 3.5) 4, -0.5 нәтижесін береді.

Деректер құрылымы

Common Lisp-тегі реттілік типтеріне тізімдер, векторлар, биттік векторлар және жолдар кіреді. Кез келген реттілік түрінде жұмыс істейтін көптеген операциялар бар. Басқа Lisp диалектілерінің көпшілігі сияқты, Common Lisp-тегі тізімдер де констардан құралған, олар кейде конс ұяшықтары немесе жұптар деп аталады. Конс – екі ұясы бар дерек құрылымы, олар машина (car) және цдр (cdr) деп аталады. Тізім – констардың тізбегі немесе бос тізім. Әр констың машинасы тізімдегі бір элементке (мүмкін, басқа тізімге) сілтеме жасайды. Әр констың цдры келесі консқа сілтеме жасайды, бірақ тізімдегі соңғы констың цдры nil мәніне сілтеме жасайды. Констар ағаштар мен басқа күрделі дерек құрылымдарын жүзеге асыру үшін де оңай қолданылуы мүмкін, бірақ әдетте құрылымдар немесе сынып инстанцияларын пайдалану ұсынылады. Констармен циклдық дерек құрылымдарын жасауға да болады. Common Lisp көп өлшемді массивтерді қолдайды және қажет болған жағдайда өзгертілетін массивтерді динамикалық түрде өзгерте алады. Көп өлшемді массивтер матрицалық есептеулер үшін қолданылуы мүмкін. Вектор – бір өлшемді массив. Массивтер кез келген типті элементтерді (бір массивтің ішінде әртүрлі типтерді де) алып жүруі мүмкін немесе, мысалы, биттер векторындағыдай, белгілі бір типтегі элементтерді ғана қамту үшін мамандануы мүмкін. Әдетте, тек бірнеше тип қолдау көрсетіледі. Көптеген жүзеге асырулар массивтік функцияларды массивтің типі маманданған кезде оңтайландыра алады. Екі типке маманданған массив типі стандартты: жол – таңбалардың векторы, ал биттік вектор – биттердің векторы. Хэш-кестелер дерек объектілері арасындағы байланыстарды сақтайды. Кез келген объектіні кілт немесе мән ретінде пайдалануға болады. Хэш-кестелер қажеттілікке қарай автоматты түрде өздерін қайта өлшеп алады. Пакеттер – бағдарламаның бөліктерін атау кеңістіктеріне бөлу үшін қолданылатын символдар жиынтығы. Пакет кейбір символдарды экспорттап, оларды қоғамдық интерфейстің бөлігі ретінде белгілей алады. Пакеттер басқа пакеттерді пайдалана алады. Құрылымдар, C тіліндегі құрылымдар мен Pascal тіліндегі жазбаларға ұқсас, кез келген сандағы және типіндегі өрістермен (ұялар деп аталады) кез келген күрделі дерек құрылымдарын көрсетеді. Құрылымдар бір реттік мұрагерлікке мүмкіндік береді. Сыныптар құрылымдарға ұқсас, бірақ көбірек динамикалық мүмкіндіктер мен көп реттік мұрагерлік ұсынады. (CLOS-қа қараңыз). Сыныптар Common Lisp-ке кейін қосылды және құрылымдармен кейбір тұжырымдамалық үйлесімділік бар. Сыныптардан жасалған объектілер инстанциялар деп аталады. Жалпы функциялар – ерекше жағдай. Жалпы функциялар бірқатар функциялар және инстанциялар болып табылады.

Функцияның атау кеңістігі

Функция атауларының кеңістігі деректер айнымалыларының кеңістігінен бөлек. Бұл Common Lisp пен Scheme арасындағы маңызды айырмашылық. Common Lisp үшін функция атаулары кеңістігінде атауларды анықтайтын операторларға defun, flet, labels, defmethod және defgeneric жатады. Функцияны басқа функцияға аргумент ретінде атау арқылы жіберу үшін, функцияның арнайы операторын пайдалану керек, ол әдетте #' деп белгіленеді. Жоғарыдағы бірінші сұрыптау мысалы функция атаулары кеңістігіндегі > символымен белгіленген функцияны, #'> коды арқылы көрсетеді. Керісінше, осындай жолмен жіберілген функцияны шақыру үшін аргументке funcall операторы қолданылады. Scheme-нің бағалау моделі қарапайым: бар болғаны бір ғана кеңістік бар, және нысан ішіндегі барлық орындар (кез келген тәртіппен) бағаланады – тек аргументтер емес. Сондықтан бір диалектіде жазылған код кейде екінші диалектіде тәжірибелі бағдарламашыларға түсініксіз болуы мүмкін. Мысалы, Common Lisp бағдарламашыларының көпшілігі тізім немесе жол сияқты сипаттамалық айнымалы атауларды пайданады, бұл Scheme-де функция атауларын жасыруға және проблемалар тудыруға себеп болуы мүмкін. Функциялар үшін жеке кеңістік болуының артықшылығы бар ма, жоқ па деген мәселе Lisp қауымдастығында пікірталас тудырады. Бұл әдетте Lisp 1 мен Lisp 2 арасындағы пікірталас деп аталады. Lisp 1 Scheme моделін, ал Lisp 2 Common Lisp моделін білдіреді. Бұл атаулар 1988 жылы Ричард П. Габриэль мен Кент Питманның екі тәсілді кеңінен салыстырған мақаласында пайда болған.

Қолданылу аясы

Common Lisp бағдарламалары, көптеген басқа бағдарламалау тілдеріндегідей, айнымалыларға, функцияларға және басқа да түрлі объектілерге сілтеме жасау үшін атауларды пайдаланады. Аталған сілтемелер қолданыс аясына бағынады. Атау мен оған сілтеме жасайтын объекті арасындағы байланыс – байланыстыру деп аталады. Қолданыс аясы – атаудың нақты байланыстыруға ие екені анықталатын жағдайлар жиынтығын білдіреді.

Әлемдік

Lisp-тегі кейбір орталар жаһандық түрде кең таралған. Мысалы, егер жаңа тип анықталса, ол одан әрі барлық жерде белгілі болады. Осы типке сілтеме жасағанда, ол осы жаһандық ортада ізделеді.

Common Lisp Object System (CLOS) - ортақ Lisp нысандық жүйесі

Common Lisp құрамына объектіге бағытталған бағдарламалаудың Common Lisp Object System немесе CLOS құралдар жиынтығы кіреді. Питер Норвиг CLOS (көптік мұрагерлік, миксиндер, көп әдістер, метакластар, әдіс комбинациялары және т.б.) мүмкіндіктері бар динамикалық тілде көптеген дизайн үлгілерін іске асырудың қаншалықты оңай екенін түсіндіреді. Объектіге бағытталған бағдарламалау үшін Common Lisp-тің бірнеше кеңейтімдері ANSI Common Lisp стандартына енгізілуі ұсынылды, бірақ ақырында CLOS Common Lisp-тің стандартты объект жүйесі ретінде қабылданды. CLOS – көп жөнелтілім және көп мұрагерлікпен динамикалық объект жүйесі, және C++ немесе Java сияқты статикалық тілдердегі OOP мүмкіндіктерінен түбегейлі өзгеше. Динамикалық объект жүйесі ретінде CLOS жалпы функциялар мен сыныптарға орындалу кезінде өзгерістер енгізуге мүмкіндік береді. Әдістерді қосуға және жоюға, сыныптарды қосуға және қайта анықтауға, нысандарды сыныптардың өзгеруіне сәйкес жаңартуға және нысандардың класын өзгертуге болады. CLOS ANSI Common Lisp-ке интеграцияланған. Жалпы функцияларды әдеттегі функциялар сияқты пайдалануға болады және олар бірінші дәрежелі дерек типі болып табылады. Әр CLOS класы Common Lisp типтік жүйесіне интеграцияланған. Common Lisp-тің көптеген типтеріне сәйкес класс бар. CLOS-ты Common Lisp-те одан да көп пайдалануға болады. Техникалық сипаттамада жағдайлар CLOS арқылы іске асырылатыны айтылмаған. Жолдар мен ағындарды CLOS арқылы іске асыруға болады. CLOS-тың ANSI Common Lisp үшін одан әрі пайдалану мүмкіндіктері стандарттың құрамына кірмейді. Нақты Common Lisp іске асырылымдары CLOS-ты жол атаулары, ағындар, кіріс-шығыс, жағдайлар, CLOS-тың өзі және тағы да басқалары үшін пайдаланады.

Компилятор мен интерпретатор

Lisp интерпретаторлары Lisp бастапқы кодын тікелей орындайды, ол Lisp объектілері (тізімдер, символдар, сандар және т.б.) түрінде, s-өрнектерден оқылады. Lisp компиляторы Lisp бастапқы кодынан байт-кодты немесе машиналық кодты жасайды. Common Lisp жеке Lisp функцияларын жадта компиляциялауға, сондай-ақ бүкіл файлдарды сыртқы сақталатын компиляцияланған кодқа (fasl файлдары) компиляциялауға мүмкіндік береді. Көптеген ертерек Lisp диалекттерінің іске асылымдары интерпретаторды да, компиляторды да қамтамасыз еткен. Айынықса, семантикасы әртүрлі болған. Бұл ертерек Lisp жүйелері компиляторда лексикалық ауқымдылықты және интерпретаторда динамикалық ауқымдылықты іске асырды. Common Lisp интерпретатор мен компилятордың екеуі де әдепкі бойынша лексикалық ауқымдылықты қолдануын талап етеді. Common Lisp стандарты интерпретатор мен компилятордың семантикасын сипаттайды. Компиляторды жеке функциялар үшін `compile` функциясын, ал файлдар үшін `compile-file` функциясын пайдалану арқылы шақыруға болады. Common Lisp типтік декларацияларды қабылдайды және компилятордың кодты жарату саясатына әсер етуге арналған әдістерді ұсынады. Соңғысы үшін әртүрлі оптимизациялық сапалар 0 (маңызсыз) және 3 (ең маңызды) аралығындағы мәндермен беріле алады: жылдамдық, жад, қауіпсіздік, отладка және компиляция жылдамдығы. Lisp кодын бағалауға арналған `eval` функциясы да бар. `eval` кодын алдын ала талданған s-өрнектер түрінде қабылдайды, ал кейбір басқа тілдердегідей мәтіндік жолдар түрінде емес. Осылайша, код тізімдер мен символдарды құруға арналған әдеттегі Lisp функцияларымен құрастырылуы мүмкін, содан кейін бұл код `eval` функциясымен бағаланады. Бірнеше Common Lisp іске асылымдары (мысалы, Clozure CL және SBCL) `eval` функциясын компиляторды пайдалану арқылы іске асырады. Осылайша, код компиляцияланады, тіпті ол `eval` функциясын пайдалану арқылы бағаланса да. Файл компиляторы `compile-file` функциясын пайдалану арқылы шақырылады. Компиляцияланған кодты құрастырылған файл fasl (fast load – жылдам жүктеу) деп аталады. Бұл fasl файлдары, сондай-ақ бастапқы код файлдарын Common Lisp жүйесінде жұмыс істеп тұрған кезінде `load` функциясымен жүктеуге болады. Іске асылымға байланысты, файл компиляторы байт-кодты (мысалы, Java виртуалды машинасы үшін), C тіліндегі кодты (содан кейін C компиляторымен компиляцияланады) немесе тікелей машиналық кодты жасайды. Common Lisp іске асылымдарын код толық компиляцияланған болса да, интерактивті түрде пайдалануға болады. Сондықтан, интерпретацияланған тіл тұжырымы интерактивті Common Lisp үшін қолданылмайды. Тіл оқу уақытын, компиляциялау уақытын, жүктеу уақытын және орындау уақытын ажыратады және пайдаланушы кодын қажетті қадамда қажетті өңдеу түрін орындау үшін осы айырмашылықты пайдалануға мүмкіндік береді. Интерактивті дамуға арналған арнайы операторлар да қарастырылған; мысалы, `defvar` берілген айнымалысы бұрын байланбаған болса ғана оған мән тағайындайды, ал `defparameter` әрқашан тағайындауды орындайды. Бұл айырмашылық тікелей бейнеде кодты интерактивті бағалау, компиляциялау және жүктеу кезінде пайдалы. Компиляторлар мен интерпретаторларды жазуға көмектесетін мүмкіндіктер де бар. Символдар бірінші деңгейдегі объектілерден тұрады және пайдаланушы кодын тікелей манипуляциялауға мүмкіндік береді. `progv` арнайы операторы лексикалық байланыстарды бағдарламалық түрде жасауға мүмкіндік береді, ал пакеттерді де манипуляциялауға болады. Lisp компиляторы файлдарды немесе жеке функцияларды компиляциялау үшін орындалу уақытында қолжетімді. Бұл Lisp-ті басқа тілдің аралық компиляторы немесе интерпретаторы ретінде пайдалануды жеңілдетеді.

Басқа Lisp-термен салыстыру

Common Lisp көбінесе Schemeмен салыстырылады және оған қарама-қарсы қойылады, себебі олар екі ең танымал Lisp диалектісі. Scheme CL-ден бұрын пайда болған және ол тек Lisp дәстүрінен ғана емес, сонымен қатар бірнеше инженерлерден де шыққан – Гей Стил, Геральд Джей Суссманмен бірге Scheme-ді жобалаған, Common Lisp стандарттар комитетінің төрағасы болды. Common Lisp – бұл жалпы мақсаттағы бағдарламалау тілі, ал Emacs Lisp және AutoLISP сияқты Lisp нұсқаларына қарама-қарсы, олар белгілі бір өнімдерге (тиісінше GNU Emacs және AutoCAD) енген кеңейту тілдері. Көптеген бұрынғы Lisp-терден айырмашылығы, Common Lisp (Scheme сияқты) түсіндіру және компиляцияланған код үшін әдетте лексикалық айнымалы ауқымын қолданады. Common Lisp-ке үлес қосқан көптеген Lisp жүйелері – ZetaLisp және Franz Lisp сияқтылары, интерпретаторларында динамикалық ауқымдалған айнымалыларды, ал компиляторларында лексикалық ауқымдалған айнымалыларды қолданды. Scheme лексикалық ауқымы бар айнымалыларды ғана қолдануды енгізді, бұл ALGOL 68-ден алынған шабыт. CL динамикалық ауқымдағы айнымалыларды да қолдайды, бірақ олар «арнайы» деп нақты жариялануы керек. ANSI CL интерпретаторлары мен компиляторлары арасында ауқым бойынша ешқандай айырмашылық жоқ. Common Lisp кейде Lisp 2, ал Scheme Lisp 1 деп аталады, себебі CL функциялар мен айнымалылар үшін бөлек атау кеңістіктерін пайдаланады. (Шын мәнінде, CL-де көптеген атау кеңістіктері бар, мысалы, go тегтері, блок атаулары және циклдық кілттік сөздер). CL және Scheme жақтастары арасында көптеген атау кеңістіктеріне байланысты сауда-саттық туралы ұзаққа созылған дау бар. Scheme-де функциялармен қақтығысатын айнымалыларға атау беруден аулақ болу қажет; Scheme функцияларында көбінесе lis, lst немесе lyst деп аталатын аргументтер болады, жүйелік функция тізімімен қақтығысты болдырмау үшін. Алайда, CL-де функцияны аргумент ретінде жібергенде функцияның атау кеңістігіне тікелей сілтеме жасау қажет, бұл жоғарыдағы сұрыптау мысалындағыдай, жиі кездесетін жағдай. CL сонымен қатар логикалық мәндерді басқаруда Scheme-ден ерекшеленеді. Scheme шындық пен жалғанды көрсету үшін #t және #f ерекше мәндерін пайдаланады. CL Lisp-тің ескірген T және NIL символдарын пайдалану дәстүрін сақтайды, NIL бос тізімді де білдіреді. CL-де NIL емес кез келген мән шартты операторларда (мысалы, if) true ретінде қарастырылады, ал Scheme-де #f емес барлық мәндер true ретінде қарастырылады. Бұл дәстүрлер екі тілде де кейбір операторларға предикаттар ретінде (логикалық сұраққа жауап беру) және одан әрі есептеу үшін пайдалы мәнді қайтару үшін мүмкіндік береді, бірақ Scheme-де Common Lisp-тегі NIL-ге тең келетін мән логикалық өрнекте true деп бағаланады. Соңында, Scheme стандарттарының құжаттары құйрықты шақыруды оңтайландыруды талап етеді, бұл CL стандартында жоқ. CL-дің көптеген іске асырылымдары құйрықты шақыруды оңтайландыруды ұсынады, бірақ көбінесе бағдарламашы оңтайландыру директивасын қолданғанда ғана. Дегенмен, жалпы CL кодтау стилі Scheme стилі ұнататын рекурсияның кең қолданылуын жақтырмайды – Scheme бағдарламашысы құйрықты рекурсиямен білдіретін нәрсені CL пайдаланушысы әдетте do, dolist, loop немесе (жақында) iterate пакетімен қайталанатын өрнекпен білдіреді.

Коммерциялық іске асыру

Microsoft Windows, FreeBSD, Linux, Apple macOS және әртүрлі UNIX түрлері үшін Allegro Common Lisp. Allegro CL интеграцияланған даму ортасын (IDE) (Windows және Linux үшін) және қосымшаларды таратуға қатысты кең мүмкіндіктерді ұсынады. Бұрын Lucid Common Lisp деп аталған Liquid Common Lisp. Жаңа шығарылымдар жоқ, тек техникалық қолдау көрсетіледі. Microsoft Windows, FreeBSD, Linux, Apple macOS, iOS, Android және әртүрлі UNIX түрлері үшін LispWorks. LispWorks интеграцияланған даму ортасын (IDE) (көптеген платформалар үшін қолжетімді, бірақ iOS және Android үшін емес) және қосымшаларды таратуға қатысты кең мүмкіндіктерді ұсынады. mocl – iOS, Android және macOS үшін. DEC Alpha үшін Open Genera. Жоғары өнімді ғылыми есептеулерге арналған Scieneer Common Lisp.

Еркін таратылатын іске асырулар

Armed Bear Common Lisp (ABCL) Java виртуалды машинасына жұмыс істейтін CL орындалысы. Ол Java байт-кодына компиляторды қамтиды және CL-ден Java кітапханаларына қол жеткізуге мүмкіндік береді. Бұрын ол Armed Bear J редакторының бір бөлігі болған. Clasp – C++ кітапханаларымен тікелей өзара әрекеттесетін LLVM негізіндегі орындалыс. Бірнеше Unix және Unix-қа ұқсас жүйелерде (macOS-ты қоса алғанда) жұмыс істейді. CLISP Байт-кодты компиляциялайтын, тасымалданатын және бірнеше Unix және Unix-қа ұқсас жүйелерде (macOS-ты қоса алғанда), сондай-ақ Microsoft Windows және басқа да бірнеше жүйелерде жұмыс істейді. Clozure CL (CCL) бастапқыда Macintosh Common Lisp-тің ашық бастапқы коды. Бұл тарихтан CCL Macintosh үшін жазылған, бірақ Clozure CL қазір macOS, FreeBSD, Linux, Solaris және Windows жүйелерінде жұмыс істейді. Әрбір платформада 32 және 64 биттік x86 порттары қолдау көрсетіледі. Сонымен қатар, Mac OS және Linux үшін Power PC порттары бар. CCL бұрын OpenMCL деп аталған, бірақ бұл атау енді Macintosh Common Lisp-тің ашық бастапқы кодымен шатасуды болдырмау үшін қолданылмайды. CMUCL Бастапқыда Карнеги Меллон университетінде жасалған, қазір еріктілер тобымен ашық бастапқы кодты бағдарлама ретінде қолдау көрсетіледі. CMUCL жылдам түпкі кодты компиляторды пайдаланады. Ол Intel x86 үшін Linux және BSD жүйелерінде; Linux for Alpha; Intel x86 және PowerPC үшін macOS; және олардың түпкі платформаларында Solaris, IRIX және HP UX жүйелерінде қолжетімді. Corman Common Lisp Microsoft Windows үшін. 2015 жылдың қаңтар айында Corman Lisp MIT лицензиясымен жарияланды. Embeddable Common Lisp (ECL) ECL байт-код интерпретаторы мен компиляторын қамтиды. Ол сонымен қатар C компиляторы арқылы Lisp кодын машиналық кодқа аударуға болады. ECL Lisp кодын C-ге аударады, C кодын C компиляторымен аударады және нәтижедегі машиналық кодты жүктей алады. Сондай-ақ, ECL-ді C бағдарламаларына, ал C кодын Common Lisp бағдарламаларына ендіруге болады. GNU Common Lisp (GCL) GNU жобасының Lisp компиляторы. Әлі толық ANSI стандартына сәйкес келмеген GCL бірнеше ірі жобалар үшін таңдалған, соның ішінде математикалық құралдар Maxima, AXIOM және (тарихи) ACL2. GCL Linux-та он бір түрлі архитектурада, сондай-ақ Windows, Solaris және FreeBSD жүйелерінде жұмыс істейді. Macintosh Common Lisp (MCL) 5.2 нұсқасы PowerPC процессоры бар және Mac OS X жүйесінде жұмыс істейтін Apple Macintosh компьютерлері үшін ашық бастапқы код. RMCL (MCL 5.2 негізінде) Apple-дің Rosetta екілік аударғышын пайдаланып, Intel негізіндегі Apple Macintosh компьютерлерінде жұмыс істейді. ManKai Common Lisp (MKCL) ECL-дің бір тармағы. MKCL сенімділік, тұрақтылық және жалпы код сапасын күшейтілген, түпкілікті көп жіпті, орындалу уақыты жүйесі арқылы баса көрсетеді. Linux-та MKCL толық POSIX стандартына сәйкес орындалу уақытын қамтиды. Movitz x86 компьютерлері үшін Lisp ортасын іске асырады, ешқандай негізгі операциялық жүйеге сүйенбейді. Poplog Poplog CL нұсқасын POP 11 және Prolog және Standard ML (SML) арқылы іске асырады, бұл аралас тілдерде бағдарламалауға мүмкіндік береді. Барлығы үшін POP 11 іске асыру тілі болып табылады, ол кезең-кезеңмен аударылады. Сондай-ақ, компилятормен байланысатын Emacs сияқты редакторы бар. Steel Bank Common Lisp (SBCL) CMUCL-дің тармағы. "Жалпы алғанда, SBCL CMU CL-ден ұстауға көбірек назар аударуымен ерекшеленеді". SBCL CMUCL платформаларында жұмыс істейді, HP/UX-тен басқа; сонымен қатар, ол AMD64, PowerPC, SPARC, MIPS, Windows x86 үшін Linux-та жұмыс істейді және Windows AMD64 жүйесінде жұмыс істеу үшін тәжірибелік қолдау бар. SBCL әдепкі бойынша интерпретаторды пайдаланбайды; пайдаланушы интерпретаторды қоспаса, барлық өрнектер түпкі кодқа аударылады. SBCL компиляторы The Computer Language Benchmarks Game-тің бұрынғы нұсқасына сәйкес жылдам түпкі кодты жасайды. Ufasoft Common Lisp CLISP-тің Windows платформасы үшін порты, ядросы C++ тілінде жазылған.