Pređi na sadržaj

Kokoška (Implementacija šeme)

Izvor: Викикњиге

Ne treba pomešati sa kokoškom.

Kokoška (stilizovan kao KOKOŠKA) je programski jezik, konkretno kompajler i tumač koji implementira dijalekt programskog jezika Šeme, i koji kompajlira izvorni kod Šeme u standardni C. Uglavnom je usklađen sa R5RS i nudi mnoga proširenja standarda. Noviji standard R7RS je podržan preko biblioteke proširenja. Kokoška je besplatan softver otvorenog koda dostupan pod BSD licencom. Primenjuje se uglavnom u šemi, sa nekim delovima u C-u radi performansi ili da bi se olakšalo ugrađivanje u C programe.

Fokus

[uredi]

Fokus Kokoške brzo je jasan iz njegovog slogana: „Praktičan i prenosiv sistem šeme“.

Kokoškin glavni fokus je praktična primena Šeme za pisanje softvera u stvarnom svetu. Šema je dobro poznata po svojoj upotrebi u nastavnim planovima i programima informatike i eksperimentisanju sa programskim jezikom, ali je malo koristila u biznisu i industriji. Kokoška zajednica je proizvela veliki skup biblioteka za obavljanje raznih zadataka. Kokoška viki (softver koji ga pokreće je takođe Kokoškin program) takođe sadrži listu softvera koji je napisan u Kokoški.

Drugi cilj kokoške je da bude prenosiv. Kompajliranjem u srednju reprezentaciju, u ovom slučaju prenosivi C (kao i Gambit i Bigloo), programi napisani na Kokoški mogu se kompajlirati za uobičajene popularne operativne sisteme kao što su Linuk, makOS, drugi sistemi slični Unik-u, Vindovs, Haiku i mobilni platforme iOS i Android. Takođe ima ugrađenu podršku za unakrsno kompajliranje programa i ekstenzija,što mu omogućava da se koristi na različitim ugrađenim sistemskim platformama.

Dizajn

[uredi]

Kao i mnogi kompajleri šema, Kokoška koristi standardni C kao srednju reprezentaciju. Program Šeme se prevodi u C od strane Kokoška kompajlera, a zatim C prevodilac prevodi C program u mašinski kod za ciljnu računarsku arhitekturu, proizvodeći izvršni program. Univerzalna dostupnost C čini ga korisnim za ovu svrhu.

Kokoškin dizajn inspirisan je dokumentom iz 1994. Henrija Bejkera koji je izložio inovativnu strategiju za prevođenje šeme u C. Program šeme se kompajlira u C funkcije. Ove C funkcije nikada ne stižu do povratne izjave; umesto toga, zovu novi nastavak kada se završi. Ovi nastavci su C funkcije i prosleđuju se kao dodatni argumenti drugim C funkcijama. Izračunava ih kompajler.

Do sada, ovo je suština stila nastavka-prolaska. Bejkerova nova ideja je da koristi stek C poziva za gomilu šeme. Dakle, mogu se koristiti normalne operacije C steka kao što je automatsko kreiranje promenljivih, dodela niza promenljive veličine i tako dalje. Kada se stek popuni (to jest, pokazivač steka dođe do vrha steka), može se pokrenuti sakupljanje smeća. Korišćeni dizajn je kopirni sakupljač smeća koji je prvobitno osmislio C. J. Chenei, koji kopira sve žive nastavke i druge žive objekte u gomilu. Uprkos tome, C kod ne kopira okvire C steka, već samo šeme objekte, tako da ne zahteva poznavanje C implementacije.

U potpunosti, gomila šeme se sastoji od C steka kao rasadnika zajedno sa dve gomile koje zahteva generacijski sakupljač smeća. Ovaj pristup daje brzinu C steka za mnoge operacije i omogućava upotrebu nastavaka kao jednostavnih poziva C funkcija. Dalje, Bejkerovo rešenje garantuje asimptotično rep rekurzivno ponašanje, kao što zahteva standard jezika šeme. Implementacija u kompajleru Kokoška Šeme je čak asimptotski bezbedna za prostor.

Ograničenja i odstupanja od standarda

[uredi]

Kokoška šema je uglavnom usklađena sa R5RS, sa nekoliko značajnih ograničenja i odstupanja. R7RS kompatibilnost se isporučuje kao biblioteka proširenja

Osnovni sistem ima osnovnu podršku za UTF-8 znakove, međutim procedure indeksiranja stringova i manipulacije nisu svesne UTF-8. Postoji biblioteka proširenja koja dodaje podršku za punu svest o UTF-8.

Dodatni softver

[uredi]

Kokoška ima veliko softversko skladište dodatih biblioteka i programa, nazvanih jaja. Ovaj sistem je veoma sličan RubiGems-u.

U početku, ova jaja su razvijena u jednom centralnom svn spremištu, u kome bi kreiranje oznake automatski dovelo do toga da nova verzija ekstenzije postane dostupna za preuzimanje. Trenutno, jaja mogu da se razvijaju bilo gde i pod bilo kojim sistemom kontrole verzija, dok se i dalje održava poluautomatsko upravljanje izdanjima kada se koristi većina popularnih sajtova za hostovanje kodova. Ovaj metod izdavanja je VCS-agnostičan u smislu da korisnik ne mora da ima instalirane ove VCS-ove. Programer je slobodan da hostuje gde god želi, a može čak i da izabere da izbegne kontrolu javnih verzija i distribuira samo obične tarball-ove.

Za sva puštena jaja, najnovija verzija se automatski testira kao deo kontinuiranog procesa integracije. Postoji kanonski test server, gde se jezgro sistema i sva jaja svakodnevno testiraju u odnosu na najnoviju razvojnu verziju (da bi se uhvatile regresivne greške) i najnoviju stabilnu verziju (kako bi se osiguralo da sve funkcioniše za korisnike stabilnog sistema ). Takođe, svako može dobrovoljno da obezbedi dalje kapacitete za testiranje, na različitim: hardverskim, operativnim sistemima ili izdanjima jezgra.

Karakteristike

[uredi]

Kokoška podržava većinu R5RS standardne šeme, ali takođe dodaje nekoliko nestandardnih funkcija koje nisu dostupne u svim implementacijama šeme.

Interfejs stranih funkcija

[uredi]

Kokoška kompajliranje u C omogućava ubacivanje prilagođenog C koda u prevedeni rezultat, što olakšava integraciju sa C bibliotekama. Njegov interfejs stranih funkcija podržava konverziju napred i nazad između većine ugrađenih C tipova i odgovarajućih šeme objekata.

Takođe, postoje biblioteke ekstenzija za povezivanje sa Pajtonom, Lua-om i Javom, preko Java Native Interface (JNI) ili mosta.

Unakrsno kompajliranje

[uredi]

Relativno je lako unakrsno kompajlirati kod šeme na drugu platformu (na primer za ugrađenu upotrebu na uređaju).

Da bi omogućio unakrsno kompajliranje koda šeme, Kokoška nameće model odvojenog kompajliranja: Prevedeni modul se sastoji od dve deljene biblioteke. Jedna biblioteka sadrži stvarni kod koji će se koristiti u vreme izvođenja (sastavljen za ciljnu platformu), a druga je modul za uvoz, koji će se koristiti za učitavanje koda koji se pokreće u vreme kompajliranja (na platformi domaćina), npr. kao proceduralni makro kod.

Kokoška kompajler se takođe može lako unakrsno kompajlirati. Nakon što se postigne prevod u C, može se jednostavno koristiti C kompajler koji je podešen da pravi za drugu platformu.

Moduli i makrosi

[uredi]

Od verzije 4, Kokoška ima ugrađen sistem modula i podršku za higijenske makrose niskog nivoa kroz eksplicitno preimenovanje makrosa (pre verzije 4, ovo je bilo dostupno preko biblioteke dodataka). Podržani su i makrosi standardnih pravila sintakse, kao i makroi implicitnog preimenovanja,što je u osnovi obrnuta verzija eksplicitnog preimenovanja.

Ovaj mehanizam menja performanse radi pogodnosti. Svaki identifikator koji nije eksplicitno unet kao nehigijenski biće automatski preimenovan da bi se izbeglo hvatanje imena. Troškovi performansi nastaju zato što implicitno preimenovanje zahteva od makro-proširivača da vrati izraze još dva puta. Ovaj trošak se plaća u vreme proširenja, tako da autor makroa mora da razmotri da li je duže vreme kompajliranja prihvatljivo.

Udaljeni prevodilac

[uredi]

Od verzije 4.11, Kokoška se isporučuje sa programom za otklanjanje grešaka po imenu Perje.Kada se kod šeme kompajlira sa potrebnom opcijom za otklanjanje grešaka, događaji za otklanjanje grešaka se ubacuju u određene tačke u kodu. Oni se implementiraju kao pozivi funkciji C, što je relativno malo troškova kada zapravo ne otklanja greške u kodu. Prilikom otklanjanja grešaka, pokušaće da uspostavi TCP vezu sa procesom servera Perje, verovatno na drugoj mašini. Proces je zaustavljen, korisnik može postaviti tačke prekida i pokrenuti program. Zatim, kada dođe do tačke prekida, klijent (proces koji se otklanja greške) ulazi u komandnu petlju, koja omogućava ispitivanje klijenta, čitanje promenljivih ili njihovo mutiranje.

Ograničena statička analiza tipa

[uredi]

Kokoška podržava lokalnu analizu protoka. Ovo omogućava kompajleru da uhvati greške tipa promenljive u vreme kompajliranja i izvrši specijalizaciju tipa. Ova specijalizacija omogućava uklanjanje nekoliko bezbednosnih provera za detekciju tipa u vreme izvođenja kada se tip može zaključiti u vreme kompajliranja. Ovo rezultira poboljšanim performansama vremena rada.

Ovaj scrutinizer ne dozvoljava međumodulnu analizu toka, tako da se može koristiti samo za optimizaciju koda koji je deo jedne kompajlacijske jedinice (ili modula).

Istorija

[uredi]

KOKOŠKA šemu je prvobitno razvio Feliks Vinkelman na Cigvin/gcc i kasnije Visual C++ 5.0 na Vindovs 98. Naziv „KOKOŠKA“ je proizvoljno smislio kao „prva stvar koja mi je pala na pamet tog dana“ misleći na plastičnu igračku Feathers MekGrav na svom stolu. Kako je projekat sazrevao, odlučio je da ne menja ime iz sujeverja.

Pogledaj takođe

[uredi]

Reference

[uredi]
  1. Vinkelman, Feliks. „Najavljivanje kompajlera Kokoška Šeme-u-C“. Gugle grupe (komp.lang.šeme).
  2. evhan (09.11.2018). „r7rs (priručnik za kokošku)“. Kokoška Šeme. Pristupljeno 28.02.2019.
  3. "Česta pitanja o šemi", odeljak "za šta se koristi šema?"
  4. Beks, Piter (sjaman) (16.08.2018). „Softver napisan u Kokoška Šeme“. Kokoška Šeme. Pristupljeno 26.02.2019.
  5. Prenosivost“. Kokoška Šeme Viki.
  6. Beks, Piter (sjaman) (28.05.2016). „Unakrsni razvoj“. Kokoška šema (priručnik). Pristupljeno 26.02.2019.
  7. Bejker, Henri (1994). „CONS ne bi trebalo da GOSPODAR svojim argumentima, Deo 2.: Čejni o M.T.A.“ Arhivirano iz originala 03.03.2006.
  8. Čenei, C.J. "A nerekurzivni algoritam za sažimanje liste". CACM 13,11 (novembar 1970), 677-678.
  9. Bek, Peter (sjamaan); Vinkelman, Feliks (28.05.2016). „Potvrđena odstupanja (Kokoška priručnik)”. Kokoška Šeme. Pristupljeno 28.02.2019.
  10. Bek, Peter (sjamaan); kooda; mario; svnviki; vasamasa; kon; mario (11.08.2018). „utf8 (priručnik za kokošku)“. Kokoška Šeme. Pristupljeno 28.02.2019.
  11. "kokoškina jaja". Kokoška Šeme.
  12. "RubiGems". RubiGems.org. Pristupljeno 26.02.2019.
  13. Beks, Piter (sjamaan). "VCS-nezavisna distribucija jezičkih ekstenzija", blog post na More magic
  14. Uputstva za popularne metode hostovanja koda i VCS-ove“. Kokoška viki.
  15. Automatizovani testovi za kokošku“. Kokoška Šeme. Pristupljeno 28.02.2019.
  16. iraikov (11.06.2016). "piffi". Kokoška Šeme Viki. Pristupljeno 3.3.2019.
  17. Bek, Peter (sjamaan); iraikov (2012-03-11). "Lua". Kokoška Šeme Viki. Pristupljeno 3.3.2019.
  18. mario; svnviki (2013-06-04). "JNI". Kokoška Šeme Viki. Pristupljeno 3.3.2019.
  19. Vinkelman, Feliks; mario (2013-06-04). "Javahak". Kokoška Šeme Viki. Pristupljeno 3.3.2019.
  20. Bek, Peter (sjamaan); Vinkelman, Feliks; mario (23.09.2018). „Modul (Kokoška sintaksa)“. Kokoška Šeme. Pristupljeno 28.02.2019.
  21. Bek, Peter (sjamaan); Vinkelman, Feliks; mario (23.09.2018). „Modul (Kokoška sintaksa)“. Kokoška Šeme. Pristupljeno 28.02.2019.
  22. Beks, Piter (sjaman) (25.11.2018). „Otklanjanje grešaka“. Kokoška Šeme.
  23. Kroisant, Džon (2013-06-19). "Iza kulisa sa KOKOŠKA šemom i SPOCK-om (2. deo)". Atomic Spin. Pristupljeno 17.02.2023.

Spoljašnje veze

[uredi]

https://en.wikipedia.org/wiki/File:Chicken_Scheme_logo_and_wordmark.svg