Tavuk (Şema uygulaması) - Chicken (Scheme implementation)

Tavuk Şeması
Tavuk Şeması logosu ve wordmark.svg
Tavuk Şeması Logosu
Tavuk 5.0.0.png
MacOS'ta çalışan Chicken 5.0.0 yorumlayıcı
ParadigmalarÇoklu paradigma: işlevsel, zorunlu, meta
AileLisp
Tarafından tasarlandıFelix Winkelmann
GeliştiriciTavuk Takımı
İlk ortaya çıktı20 Temmuz 2000; 20 yıl önce (2000-07-20)[1]
Kararlı sürüm
5.2.0 / 29 Şubat 2020; 8 ay önce (2020-02-29)
Yazma disipliniDinamik, gizli, kuvvetli
DürbünSözcüksel
Uygulama diliŞema, C
PlatformIA-32, x86-64, KOL, MIPS, SPARC 64, PowerPC
işletim sistemiÇapraz platform: pencereler, Linux, Mac os işletim sistemi, FreeBSD, NetBSD, OpenBSD, Solaris, AIX, Haiku, Android, iOS
LisansBSD
Dosya adı uzantıları.scm
İnternet sitesiwww.call-cc.org Bunu Vikiveri'de düzenleyin
Tarafından etkilenmiş
Lisp, Şema

Tavuk (olarak stilize edilmiştir TAVUK) bir Programlama dili özellikle bir derleyici ve çevirmen hangi uygulamak lehçe programlama dilinin Şema ve Scheme derleyen kaynak kodu standart C. Çoğunlukla R5RS uyumludur ve standarda birçok uzantı sunar. Yeni R7RS standardı bir uzantı ile desteklenmektedir kütüphane.[2] Tavuk ücretsiz ve açık kaynaklı yazılım altında mevcuttur BSD lisansı. Çoğunlukla Scheme'de, performans için veya C programlarına yerleştirmeyi kolaylaştırmak için C'deki bazı bölümlerle uygulanır.

Odaklanma

Tavuğun odak noktası, sloganından hemen anlaşılıyor: "Pratik ve taşınabilir bir Scheme sistemi".

Chicken'in ana odak noktası, gerçek dünya yazılımı yazmak için Scheme'nin pratik uygulamasıdır. Şema, kullanımıyla bilinir. bilgisayar Bilimi müfredat ve programlama dili deneyleri, ancak iş ve endüstride çok az kullanıldığını gördü.[3] Tavuk topluluğu geniş bir kütüphaneler çeşitli görevleri yerine getirmek için. Chicken wiki (onu çalıştıran yazılım aynı zamanda bir Chicken programıdır) ayrıca Chicken'da yazılmış yazılımların bir listesini içerir.[4]

Tavuğun diğer hedefi taşınabilir. Bir ara temsil bu durumda taşınabilir C (olduğu gibi Gambit ve Bigloo ), Tavuk dilinde yazılan programlar yaygın popülerlik için derlenebilir. işletim sistemleri gibi Linux, Mac os işletim sistemi, diğer Unix benzeri sistemleri pencereler, Haiku ve mobil platformlar iOS ve Android.[5] Ayrıca aşağıdakiler için yerleşik desteğe sahiptir: çapraz derleme programlar ve uzantılar,[6] çeşitli cihazlarda kullanılmasına izin veren yerleşik sistem platformlar.

Tasarım

Birçok Scheme derleyicisi gibi, Chicken da standart C'yi bir ara temsil. Bir Scheme programı, Chicken derleyicisi tarafından C'ye çevrilir ve ardından bir C derleyicisi, C programını hedefin makine koduna çevirir. bilgisayar Mimarisi çalıştırılabilir bir program üretiyor. C'nin evrensel mevcudiyeti onu bu amaç için kullanışlı kılar.

Tavuk tasarımı 1994 tarihli bir makaleden ilham aldı[7] tarafından Henry Baker Scheme'i C'ye derlemek için yenilikçi bir stratejinin ana hatlarını çizen bir Scheme programı, C fonksiyonlar. Bu C işlevleri asla dönüş Beyan; bunun yerine yeni diyorlar devam tamamlandığında. Bu devamlılıklar C fonksiyonlarıdır ve diğer C fonksiyonlarına ekstra argümanlar olarak aktarılır. Derleyici tarafından hesaplanırlar.

Şimdiye kadar, bu, devam eden stil. Baker'ın roman fikri, C'yi kullanmaktır. çağrı yığını Şema yığını için. Bu nedenle, otomatik değişken oluşturma, değişken boyutlu dizi tahsisi ve benzeri gibi normal C yığını işlemleri kullanılabilir. Yığın dolduğunda (yani, yığın işaretçisi yığının üstüne ulaştığında), bir çöp toplama başlatılabilir. Kullanılan tasarım bir çöp toplayıcı kopyalama orijinal olarak, tüm canlı devamları ve diğer canlı nesneleri yığına kopyalayan C.J. Cheney tarafından tasarlanmıştır.[8] Buna rağmen, C kodu C yığın çerçevelerini değil, yalnızca Scheme nesnelerini kopyalar, bu nedenle C uygulaması hakkında bilgi gerektirmez.

Tam olarak, Scheme yığını, C yığınından oluşur. yuva nesil çöp toplayıcısının gerektirdiği iki yığınla birlikte. Bu yaklaşım, birçok işlem için C yığınının hızını verir ve devamların C işlevlerine basit çağrılar olarak kullanılmasına izin verir. Dahası, Baker'ın çözümü, asimptotik Scheme dil standardının gerektirdiği şekilde tail yinelemeli davranış. Chicken Scheme derleyicisindeki uygulama asimptotik olarak bile alan için güvenli.

Standarttan sınırlamalar ve sapmalar

Tavuk Şeması, birkaç önemli sınırlama ve sapma ile çoğunlukla R5RS uyumludur.[9] R7RS uyumluluğu, bir uzantı kitaplığı olarak sağlanır.[2]

Çekirdek sistem aşağıdakiler için temel desteğe sahiptir: UTF-8 karakterler, ancak dize indeksleme ve işleme prosedürleri UTF-8 ile uyumlu değildir. Tam UTF-8 farkındalığı için destek ekleyen bir uzantı kitaplığı mevcuttur.[10]

Eklenti yazılım

Tavuk büyük bir yazılım deposu eklenen kütüphane ve programların yumurtalar.[11] Bu sistem şuna çok benzer: RubyGems.[12]

Başlangıçta, bu yumurtalar tek bir merkezi svn deposunda geliştirildi,[13] bir etiket oluşturmanın otomatik olarak uzantının yeni bir sürümünün indirilebilir hale gelmesine neden olacağı. Şu anda yumurtalar her yerde ve her yerde geliştirilebilir. sürüm kontrol sistemi, hala sürdürürken yarı otomatik popüler kod barındırma sitelerinin çoğunu kullanırken sürüm yönetimi.[14] Bu sürüm yöntemi, kullanıcının bu VCS'leri yüklemesine gerek olmaması anlamında VCS'den bağımsızdır. Geliştirici, istediği herhangi bir yerde barındırmakta özgürdür ve hatta genel sürüm kontrolünden kaçınmayı ve yalnızca düz tarball'ları dağıtmayı seçebilir.

Serbest bırakılan tüm yumurtalar için en son sürüm, bir sürekli entegrasyon süreç. Kanonik bir test sunucu var,[15] çekirdek sistem ve tüm yumurtaların en son geliştirme sürümüne (gerileyen hataları yakalamak için) ve en son kararlı sürümle (her şeyin kararlı sistem kullanıcıları için çalışmasını sağlamak için) günlük olarak test edildiği yer. Ayrıca, donanım, işletim sistemleri veya temel sürümler gibi farklı testler için herkes gönüllü olabilir.

Özellikleri

Tavuk, R5RS standardının çoğunu destekler Şema, ancak tüm Scheme uygulamalarında bulunmayan birkaç standart olmayan özellik de ekler.

Yabancı fonksiyon arayüzü

C'ye derlenen tavuk, enjekte etmek özel C kodunu derlenmiş sonuca dahil ederek, C kitaplıklarıyla entegrasyonu kolaylaştırır. Onun yabancı işlev arabirimi çoğu yerleşik C türü ve karşılık gelen Scheme nesneleri arasında ileri geri dönüştürmeyi destekler.

Ayrıca, arabirim oluşturmak için uzantı kitaplıkları mevcuttur. Python,[16] Lua,[17] ve Java, üzerinden Java Yerel Arayüzü (JNI)[18] veya bir köprü.[19]

Çapraz derleme

Nispeten kolaydır çapraz derleme Başka bir platforma şema kodu (örneğin, bir cihazda yerleşik kullanım için).

Scheme kodu için çapraz derlemeyi mümkün kılmak için, Chicken ayrı bir derleme modeli dayatır: Derlenmiş bir modül iki paylaşılan kitaplıklar. Bir kitaplık, çalışma zamanında kullanılacak (hedef platform için derlenmiş) gerçek kodu içerir ve diğeri bir içe aktarma modülü, prosedürel makro kodu gibi derleme zamanında (ana bilgisayar platformunda) çalışan kodu yüklemek için kullanılacak.

Chicken derleyicisi ayrıca kolaylıkla çapraz derlenebilir. C'ye çeviri yapıldıktan sonra, başka bir platform için inşa etmek üzere ayarlanmış bir C derleyicisi basitçe kullanılabilir.

Modüller ve makrolar

4. sürümden bu yana, Chicken dahili bir modül sistemine ve düşük seviye için desteğe sahiptir. hijyenik makrolar vasıtasıyla açıkça yeniden adlandırma makrolar[20] (sürüm 4'ten önce, bu bir eklenti kitaplığı aracılığıyla mevcuttu). Standart sözdizimi kuralları makrolar da desteklenir ve örtük yeniden adlandırma makrolar[21] bu temelde bir ters açık yeniden adlandırma sürümü.

Bu mekanizma, kolaylık sağlamak için performansı değiştirir. Her tanımlayıcı açıkça değil enjekte Hijyenik olmadığından, ad yakalamayı önlemek için otomatik olarak yeniden adlandırılacaktır. Performans maliyeti, örtük yeniden adlandırma, makro genişleticinin ifadeleri iki kez daha geri çekmesini gerektirir. Bu maliyet genişletme zamanında ödenir, bu nedenle bir makro yazarının daha uzun derleme sürelerinin kabul edilebilir olup olmadığını düşünmesi gerekir.

Uzaktan hata ayıklayıcı

4.11 sürümünden beri, Chicken adlı bir hata ayıklayıcı ile birlikte gelir Tüyler.[22] Şema kodu gerekli hata ayıklama seçeneği ile derlendiğinde, hata ayıklama olayları kodun belirli noktalarına enjekte edilir. Bunlar, aslında kodda hata ayıklama yapılmadığında nispeten düşük ek yük olan bir C işlevine yapılan çağrılar olarak uygulanır. Hata ayıklama sırasında, muhtemelen farklı bir makinedeki Feathers sunucu işlemine TCP bağlantısı kurmaya çalışır. İşlem durdurulur, kullanıcı kesme noktaları belirleyebilir ve programı başlatabilir. Ardından, kesme noktasına ulaşıldığında, istemci (hata ayıklanan işlem), istemcinin sorgulanmasına, değişkenleri okumasına veya değiştirmesine izin veren bir komut döngüsüne girer.

Sınırlı statik tip analizi

Tavuk, yerel akış analizini destekler. Bu, derleyicinin derleme zamanında değişken tür hatalarını yakalamasına ve tür uzmanlığı gerçekleştirmesine olanak tanır. Bu uzmanlık, derleme zamanında tür çıkarılabildiğinde çalışma zamanında tür algılaması için birkaç güvenlik denetimini kaldırmayı mümkün kılar. Bu, gelişmiş çalışma zamanı performansı ile sonuçlanır.

Bu inceleme uzmanı modüller arası akış analizine izin vermez, bu nedenle yalnızca bir derleme biriminin (veya modülün) parçası olan kodu optimize etmek için kullanılabilir.

Ayrıca bakınız

Referanslar

  1. ^ Winkelmann, Felix. "Chicken Scheme-to-C derleyicisini duyuruyoruz". Google Grupları (comp.lang.scheme).
  2. ^ a b evhan (2018-11-09). "r7rs (Tavuk kılavuzu)". Tavuk Şeması. Alındı 2019-02-28.
  3. ^ "Şema SSS"., bölüm "Şema ne için kullanılır?"
  4. ^ Bex, Peter (sjamaan) (2018-08-16). "Chicken Scheme ile yazılmış yazılım". Tavuk Şeması. Alındı 2019-02-26.
  5. ^ "Taşınabilirlik". Tavuk Şeması Wiki.
  6. ^ Bex, Peter (sjamaan) (2016-05-28). "Çapraz geliştirme". Tavuk Şeması (Manuel). Alındı 2019-02-26.
  7. ^ Baker, Henry (1994). "EKSİLERİ, Argümanlarını İHLAL ETMEMELİ, Bölüm II: M.T.A.'da Cheney" Arşivlenen orijinal 2006-03-03 tarihinde.
  8. ^ Cheney, C.J. "Yinelemeli Olmayan Liste Sıkıştırma Algoritması". CACM 13, 11 (Kasım 1970), 677-678.
  9. ^ Bex, Peter (sjamaan); Winkelmann, Felix; mario; svnwiki; iraikov; 1126; mario (2016-05-28). "Onaylanmış sapmalar (Tavuk kılavuzu)". Tavuk Şeması. Alındı 2019-02-28.CS1 bakimi: sayısal isimler: yazarlar listesi (bağlantı)
  10. ^ Bex, Peter (sjamaan); kooda; mario; svnwiki; wasamasa; kon; mario (2018-08-11). "utf8 (Tavuk kılavuzu)". Tavuk Şeması. Alındı 2019-02-28.
  11. ^ "Tavuk yumurtaları". Tavuk Şeması.
  12. ^ "RubyGems". RubyGems.org. Alındı 2019-02-26.
  13. ^ Bex, Peter (sjamaan). "Dil uzantılarının VCS'den bağımsız dağıtımı"., Daha fazla sihir üzerine blog yayını
  14. ^ "Popüler kod barındırma yöntemleri ve VCS'ler için talimatlar". Tavuk wiki.
  15. ^ "Otomatik tavuk testleri". Tavuk Şeması. Alındı 2019-02-28.
  16. ^ Irakov (2016-06-11). "pyffi". Tavuk Şeması Wiki. Alındı 2019-03-03.
  17. ^ Bex, Peter (sjamaan); iraikov (2012-03-11). "Lua". Tavuk Şeması Wiki. Alındı 2019-03-03.
  18. ^ mario; svnwiki (2013-06-04). "JNI". Tavuk Şeması Wiki. Alındı 2019-03-03.
  19. ^ Winkelmann, Felix; mario (2013-06-04). "Javahack". Tavuk Şeması Wiki. Alındı 2019-03-03.
  20. ^ Bex, Peter (sjamaan); Winkelmann, Felix; mario (2018-09-23). "Modül (Tavuk sözdizimi)". Tavuk Şeması. Alındı 2019-02-28.
  21. ^ Bex, Peter (sjamaan); Winkelmann, Felix; mario (2018-09-23). "Modül (Tavuk sözdizimi)". Tavuk Şeması. Alındı 2019-02-28.
  22. ^ Bex, Peter (sjamaan) (2018-11-25). "Hata Ayıklama". Tavuk Şeması.

Dış bağlantılar