Кокошка (Имплементација шеме)
Не треба помешати са кокошком.
Кокошка (стилизован као КОКОШКА) је програмски језик, конкретно компајлер и тумач који имплементира дијалект програмског језика Шеме, и који компајлира изворни код Шеме у стандардни Ц. Углавном је усклађен са Р5РС и нуди многа проширења стандарда. Новији стандард Р7РС је подржан преко библиотеке проширења. Кокошка је бесплатан софтвер отвореног кода доступан под БСД лиценцом. Примењује се углавном у шеми, са неким деловима у Ц-у ради перформанси или да би се олакшало уграђивање у Ц програме.
Фокус
уредиФокус Кокошке брзо је јасан из његовог слогана: „Практичан и преносив систем шеме“.
Кокошкин главни фокус је практична примена Шеме за писање софтвера у стварном свету. Шема је добро позната по својој употреби у наставним плановима и програмима информатике и експериментисању са програмским језиком, али је мало користила у бизнису и индустрији. Кокошка заједница је произвела велики скуп библиотека за обављање разних задатака. Кокошка вики (софтвер који га покреће је такође Кокошкин програм) такође садржи листу софтвера који је написан у Кокошки.
Други циљ кокошке је да буде преносив. Компајлирањем у средњу репрезентацију, у овом случају преносиви Ц (као и Гамбит и Биглоо), програми написани на Кокошки могу се компајлирати за уобичајене популарне оперативне системе као што су Линук, макОС, други системи слични Уник-у, Виндовс, Хаику и мобилни платформе иОС и Андроид. Такође има уграђену подршку за унакрсно компајлирање програма и екстензија,што му омогућава да се користи на различитим уграђеним системским платформама.
Дизајн
уредиКао и многи компајлери шема, Кокошка користи стандардни Ц као средњу репрезентацију. Програм Шеме се преводи у Ц од стране Кокошка компајлера, а затим Ц преводилац преводи Ц програм у машински код за циљну рачунарску архитектуру, производећи извршни програм. Универзална доступност Ц чини га корисним за ову сврху.
Кокошкин дизајн инспирисан је документом из 1994. Хенрија Бејкера који је изложио иновативну стратегију за превођење шеме у Ц. Програм шеме се компајлира у Ц функције. Ове Ц функције никада не стижу до повратне изјаве; уместо тога, зову нови наставак када се заврши. Ови наставци су Ц функције и прослеђују се као додатни аргументи другим Ц функцијама. Израчунава их компајлер.
До сада, ово је суштина стила наставка-проласка. Бејкерова нова идеја је да користи стек Ц позива за гомилу шеме. Дакле, могу се користити нормалне операције Ц стека као што је аутоматско креирање променљивих, додела низа променљиве величине и тако даље. Када се стек попуни (то јест, показивач стека дође до врха стека), може се покренути сакупљање смећа. Коришћени дизајн је копирни сакупљач смећа који је првобитно осмислио Ц. Ј. Цхенеи, који копира све живе наставке и друге живе објекте у гомилу. Упркос томе, Ц код не копира оквире Ц стека, већ само шеме објекте, тако да не захтева познавање Ц имплементације.
У потпуности, гомила шеме се састоји од Ц стека као расадника заједно са две гомиле које захтева генерацијски сакупљач смећа. Овај приступ даје брзину Ц стека за многе операције и омогућава употребу наставака као једноставних позива Ц функција. Даље, Бејкерово решење гарантује асимптотично реп рекурзивно понашање, као што захтева стандард језика шеме. Имплементација у компајлеру Кокошка Шеме је чак асимптотски безбедна за простор.
Ограничења и одступања од стандарда
уредиКокошка шема је углавном усклађена са Р5РС, са неколико значајних ограничења и одступања. Р7РС компатибилност се испоручује као библиотека проширења
Основни систем има основну подршку за УТФ-8 знакове, међутим процедуре индексирања стрингова и манипулације нису свесне УТФ-8. Постоји библиотека проширења која додаје подршку за пуну свест о УТФ-8.
Додатни софтвер
уредиКокошка има велико софтверско складиште додатих библиотека и програма, названих јаја. Овај систем је веома сличан РубиГемс-у.
У почетку, ова јаја су развијена у једном централном свн спремишту, у коме би креирање ознаке аутоматски довело до тога да нова верзија екстензије постане доступна за преузимање. Тренутно, јаја могу да се развијају било где и под било којим системом контроле верзија, док се и даље одржава полуаутоматско управљање издањима када се користи већина популарних сајтова за хостовање кодова. Овај метод издавања је ВЦС-агностичан у смислу да корисник не мора да има инсталиране ове ВЦС-ове. Програмер је слободан да хостује где год жели, а може чак и да изабере да избегне контролу јавних верзија и дистрибуира само обичне тарбалл-ове.
За сва пуштена јаја, најновија верзија се аутоматски тестира као део континуираног процеса интеграције. Постоји канонски тест сервер, где се језгро система и сва јаја свакодневно тестирају у односу на најновију развојну верзију (да би се ухватиле регресивне грешке) и најновију стабилну верзију (како би се осигурало да све функционише за кориснике стабилног система ). Такође, свако може добровољно да обезбеди даље капацитете за тестирање, на различитим: хардверским, оперативним системима или издањима језгра.
Карактеристике
уредиКокошка подржава већину Р5РС стандардне шеме, али такође додаје неколико нестандардних функција које нису доступне у свим имплементацијама шеме.
Интерфејс страних функција
уредиКокошка компајлирање у Ц омогућава убацивање прилагођеног Ц кода у преведени резултат, што олакшава интеграцију са Ц библиотекама. Његов интерфејс страних функција подржава конверзију напред и назад између већине уграђених Ц типова и одговарајућих шеме објеката.
Такође, постоје библиотеке екстензија за повезивање са Пајтоном, Луа-ом и Јавом, преко Јава Нативе Интерфаце (ЈНИ) или моста.
Унакрсно компајлирање
уредиРелативно је лако унакрсно компајлирати код шеме на другу платформу (на пример за уграђену употребу на уређају).
Да би омогућио унакрсно компајлирање кода шеме, Кокошка намеће модел одвојеног компајлирања: Преведени модул се састоји од две дељене библиотеке. Једна библиотека садржи стварни код који ће се користити у време извођења (састављен за циљну платформу), а друга је модул за увоз, који ће се користити за учитавање кода који се покреће у време компајлирања (на платформи домаћина), нпр. као процедурални макро код.
Кокошка компајлер се такође може лако унакрсно компајлирати. Након што се постигне превод у Ц, може се једноставно користити Ц компајлер који је подешен да прави за другу платформу.
Модули и макроси
уредиОд верзије 4, Кокошка има уграђен систем модула и подршку за хигијенске макросе ниског нивоа кроз експлицитно преименовање макроса (пре верзије 4, ово је било доступно преко библиотеке додатака). Подржани су и макроси стандардних правила синтаксе, као и макрои имплицитног преименовања,што је у основи обрнута верзија експлицитног преименовања.
Овај механизам мења перформансе ради погодности. Сваки идентификатор који није експлицитно унет као нехигијенски биће аутоматски преименован да би се избегло хватање имена. Трошкови перформанси настају зато што имплицитно преименовање захтева од макро-проширивача да врати изразе још два пута. Овај трошак се плаћа у време проширења, тако да аутор макроа мора да размотри да ли је дуже време компајлирања прихватљиво.
Удаљени преводилац
уредиОд верзије 4.11, Кокошка се испоручује са програмом за отклањање грешака по имену Перје.Када се код шеме компајлира са потребном опцијом за отклањање грешака, догађаји за отклањање грешака се убацују у одређене тачке у коду. Они се имплементирају као позиви функцији Ц, што је релативно мало трошкова када заправо не отклања грешке у коду. Приликом отклањања грешака, покушаће да успостави ТЦП везу са процесом сервера Перје, вероватно на другој машини. Процес је заустављен, корисник може поставити тачке прекида и покренути програм. Затим, када дође до тачке прекида, клијент (процес који се отклања грешке) улази у командну петљу, која омогућава испитивање клијента, читање променљивих или њихово мутирање.
Ограничена статичка анализа типа
уредиКокошка подржава локалну анализу протока. Ово омогућава компајлеру да ухвати грешке типа променљиве у време компајлирања и изврши специјализацију типа. Ова специјализација омогућава уклањање неколико безбедносних провера за детекцију типа у време извођења када се тип може закључити у време компајлирања. Ово резултира побољшаним перформансама времена рада.
Овај сцрутинизер не дозвољава међумодулну анализу тока, тако да се може користити само за оптимизацију кода који је део једне компајлацијске јединице (или модула).
Историја
уредиКОКОШКА шему је првобитно развио Феликс Винкелман на Цигвин/гцц и касније Висуал Ц++ 5.0 на Виндовс 98. Назив „КОКОШКА“ је произвољно смислио као „прва ствар која ми је пала на памет тог дана“ мислећи на пластичну играчку Феатхерс МекГрав на свом столу. Како је пројекат сазревао, одлучио је да не мења име из сујеверја.
Погледај такође
уреди- Рекурзија репа
- Чејнијев алгоритам
- „М.Т.А. (песма)“, референца песме у Бејкеровом раду из 1994
- Гамбит (имплементација шеме)
- Стаљин (имплементација шеме)
Референце
уреди- Винкелман, Феликс. „Најављивање компајлера Кокошка Шеме-у-Ц“. Гугле групе (комп.ланг.шеме).
- евхан (09.11.2018). „р7рс (приручник за кокошку)“. Кокошка Шеме. Приступљено 28.02.2019.
- "Честа питања о шеми", одељак "за шта се користи шема?"
- Бекс, Питер (сјаман) (16.08.2018). „Софтвер написан у Кокошка Шеме“. Кокошка Шеме. Приступљено 26.02.2019.
- „Преносивост“. Кокошка Шеме Вики.
- Бекс, Питер (сјаман) (28.05.2016). „Унакрсни развој“. Кокошка шема (приручник). Приступљено 26.02.2019.
- Бејкер, Хенри (1994). „ЦОНС не би требало да ГОСПОДАР својим аргументима, Део 2.: Чејни о М.Т.А.“ Архивирано из оригинала 03.03.2006.
- Ченеи, Ц.Ј. "А нерекурзивни алгоритам за сажимање листе". ЦАЦМ 13,11 (новембар 1970), 677-678.
- Бек, Петер (сјамаан); Винкелман, Феликс (28.05.2016). „Потврђена одступања (Кокошка приручник)”. Кокошка Шеме. Приступљено 28.02.2019.
- Бек, Петер (сјамаан); коода; марио; свнвики; васамаса; кон; марио (11.08.2018). „утф8 (приручник за кокошку)“. Кокошка Шеме. Приступљено 28.02.2019.
- "кокошкина јаја". Кокошка Шеме.
- "РубиГемс". РубиГемс.орг. Приступљено 26.02.2019.
- Бекс, Питер (сјамаан). "ВЦС-независна дистрибуција језичких екстензија", блог пост на Море магиц
- „Упутства за популарне методе хостовања кода и ВЦС-ове“. Кокошка вики.
- „Аутоматизовани тестови за кокошку“. Кокошка Шеме. Приступљено 28.02.2019.
- ираиков (11.06.2016). "пиффи". Кокошка Шеме Вики. Приступљено 3.3.2019.
- Бек, Петер (сјамаан); ираиков (2012-03-11). "Луа". Кокошка Шеме Вики. Приступљено 3.3.2019.
- марио; свнвики (2013-06-04). "ЈНИ". Кокошка Шеме Вики. Приступљено 3.3.2019.
- Винкелман, Феликс; марио (2013-06-04). "Јавахак". Кокошка Шеме Вики. Приступљено 3.3.2019.
- Бек, Петер (сјамаан); Винкелман, Феликс; марио (23.09.2018). „Модул (Кокошка синтакса)“. Кокошка Шеме. Приступљено 28.02.2019.
- Бек, Петер (сјамаан); Винкелман, Феликс; марио (23.09.2018). „Модул (Кокошка синтакса)“. Кокошка Шеме. Приступљено 28.02.2019.
- Бекс, Питер (сјаман) (25.11.2018). „Отклањање грешака“. Кокошка Шеме.
- Кроисант, Џон (2013-06-19). "Иза кулиса са КОКОШКА шемом и СПОЦК-ом (2. део)". Атомиц Спин. Приступљено 17.02.2023.
Спољашње везе
уредиhttps://en.wikipedia.org/wiki/File:Chicken_Scheme_logo_and_wordmark.svg