Charm (programlama dili) - Charm (programming language)

Cazibe
ParadigmaYapısal programlama
Tarafından tasarlandıP. Nowosad
İlk ortaya çıktı1996
işletim sistemiRISC OS
İnternet sitesicazibe.qu-bit.co.uk
Tarafından etkilenmiş
RTL / 2, C, Pascal

Cazibe bir bilgisayar Programlama dili 1990'ların başlarında benzerliklerle tasarlandı RTL / 2, Pascal ve C kendi kendine özgü bazı özellikleri içermenin yanı sıra diller. Cazibe dili, bir bağlamdan bağımsız gramer tarafından işlenmeye müsait yinelemeli iniş ayrıştırıcı hakkındaki ufuk açıcı kitaplarda anlatıldığı gibi derleyici tasarım.[1][2]

Acorn pazarı için piyasaya sürülen bir derleyici, derleyici ve bağlayıcı içeren bir dizi Charm aracı, Acorn Kullanıcısı dergi[3] programlama yazılımı kategorisi altında. Charm yeniden düzenlendi RISC OS platformlar daha sonra Archive dergisinde incelendi.[4]

Cazibe, e-kitapta daha ayrıntılı açıklanmaktadır Raspberry Pi'de Charm'da Programlama.[5]

Dilbilgisi

Charm dilbilgisinin tanımı Backus-Naur formu Charm yapılarının açıklayıcı örnekleriyle birlikte, Charm'da dil sayfası.[6]

Dil, blok yapılandırılmıştır, her blok, blokta gerçekleştirilen işlemin açıklayıcı olan bir dil anahtar sözcüğü tarafından tanıtılmıştır, örn. için, süre, tekrar et (yineleme), durum, Eğer (seçim). Her bloğun etrafı { ve } sınırlayıcılar. Ek olarak, bir blok içindeki dil satırları normalde netlik için girintilidir, ancak bu gerekli değildir, çünkü beyaz boşluk yok sayılır.

Dilbilgisine uygun her metin, veri işleme gibi yararlı işler yapmak için sağladığı hizmetleri kullanan bir işletim sistemi altında çalıştırılabilen bir programı birleştirirken bir Bileşen olarak bir Charm araç seti tarafından kullanılabilen yürütülebilir kod ve ilişkili verilerin bir koleksiyonunu temsil eder. veya kullanıcılarla etkileşimde bulunmak grafiksel kullanıcı arayüzü (GUI).

Veri tipleri

Charm, güçlü bir şekilde yazılmış bir dildir, ancak sayısal ve kayan nokta türleri arasında bazı örtük dönüşümlere izin verir. Aşağıdaki temel değişken türleri desteklenir:

  • int - tamsayılar
  • kömür - karakterler
  • Boole - boole değerleri (doğru veya yanlış)
  • gerçek - Kayan nokta sayıları

Aynı türdeki veri kümeleri, aşağıdakiler kullanılarak bildirilebilir ve statik olarak başlatılabilir: dizi anahtar kelime ve bunlar çok boyutlu olabilir. Farklı türlerdeki kümeler, kayıt anahtar kelime ve böyle bir bildirimin bir Birlik depolama tahsisi açısından birbirini kaplayan kayıt alanları. Modüller ayrıca statik ve dinamik veri üyelerinin bir karışımını bir araya getirebilir. Hem kayıtların hem de modüllerin örnekleri (yalnızca dinamik içerik) yığın üzerinde veya yığın üzerinde yeni Şebeke. Modüller ayrıca bir kurucu tanımlayabilir ~ yeni dinamik verileri başlatma prosedürü ve karşılık gelen ~ sil C ++ diline benzer bir şekilde kaynakları serbest bırakmak için yapısızlaştırma prosedürü.

Referans

Bir modül kapsamındaki veriler veya prosedürler, son uygulamaya küresel hale getirilebilir. ihracat anahtar kelime. Bir modül başka bir Charm modülünden bir prosedüre veya veriye başvurmak isterse, bunu ithalat anahtar kelime. Modüller, ile bildirilen prosedürler aracılığıyla erişilebilen durum tabanlı üye değişkenleri içerebilir. dinamik örtük ilk parametre yoluyla anahtar kelime bu Işaretçi.

Veri yapılarına ve prosedürlerine referanslar, ref anahtar kelime. Bunlar kullanılarak referans alınabilir val anahtar kelime. Referans değişkenleri kullanırken, karşılaştırma operatörleri iki referans değişkeninin aynı veri öğesini işaret edip etmediğini kontrol etmek için kullanılabilir ( :=: ) veya gösterdikleri verilerin aynı olup olmadığı ( = ).

Misal

Orijinal klasik Merhaba dünya programı Charm'da yazılmış:

    ext proc yazma_dizesi (başvuru dizisi karakteri); modül merhaba; ent proc start (); write_string ("Merhaba dünya"); end_proc; bitiş_ modülü;

ve evrimsel sözdizimsel dil değişikliklerini izleyen eşdeğer en son sürüm:

    ithal lib.Out; modül Merhaba {export proc ~ start () {Out.vdu.str ("Merhaba dünya"). nl (); }}

Araç seti

Araç seti uygulamalarının, Charm kaynak kodundan ve derleyici kaynak kodundan nesne dosyaları oluşturması için bir derleyici ve bir derleyici sağlaması beklenir, bunlar daha sonra çalıştırılabilir bir program oluşturmak için kitaplık ve çalışma zamanı destek dosyalarıyla birlikte bağlanabilir.

Sadece bir Tılsım araç seti yazarken Kurulum indirilebilir (ücretsiz). Araçların kendileri Charm dilinde yazılmıştır ve kaynak kodu, GNU Genel Kamu Lisansı. Koşuyorlar RISC OS ARM CPU'lu PC'ler ve platformlar (örneğin Ahududu Pi ) ve Windows veya Linux platformlarında barındırılan RISC OS emülatörlerinde (örneğin RPCEmu ). Donanım destekli çift hassas kayan nokta işlemleri için kod üretimi, VFP sürüm 2 yardımcı işlemci mimarisini destekleyen ARM yongalarına dayalı platformlar için desteklenir.

Derleyici

Charm derleyicisi, Charm kaynak kodunu ayrıştırarak formun dörtlülerini oluşturmak için özyinelemeli bir iniş tek geçişli derleyicidir. sonuç: = lhs op rhs aritmetik, mantıksal ve kontrol işlemlerinin akışını destekleyen bir ara dilde. Veriler, derleyicinin arka ucundaki kayıtlara ve bellek konumlarına atanan geçicilerde depolanır. Şu anda iki arka uç var, biri üretiyor Motorola 68000 montaj dili ve diğer üretici ARM mimarisi.[7]

Merhaba dünya örneğinin dörtlü çıktısı:

       param l1 $ yazma_dizesi çağrısı [proc (ref dizisi karakter) void]

ve assembler çıktısı:

	dizi	"Merhaba"	xdef	_Başlat	hizalamak_Başlat	xref	_write_string	stmfd	sp!,{rp}	adr	r0,_l1 $	bl	_write_string	ldmfd	sp!,{pc}	adres	hizalamak_l1 $	dizi	"Selam Dünya"	direkt	son

Charm'ın daha yeni sürümlerinde, G / Ç prosedürler kendi modüllerine ayrılmıştır İçinde ve Dışarı. Diğer standart kütüphane prosedürleri, alanlar olarak prosedür referanslarıyla birlikte bir kayıtlar dizisi halinde düzenlenmiştir. Bu yeniden yapılanmanın bir parçası olarak, write_string yöntem artık çalışma zamanı kitaplığı modülü aracılığıyla çağrılıyor Dışarı statik üye referansı aracılığıyla .vdu prosedür olarak str ör. yukarıdaki merhaba dünya örneğinde write_string ("Merhaba dünya") olur Out.vdu.str ("Merhaba dünya").

Montajcı

Assembler, talimat anımsatıcılarını, veri bildirimlerini ve yönergeleri kabul eder ve hedef işlemcinin CPU'su tarafından kolaylıkla anlaşılabilen bilgileri, özellikle ikili olarak kodlanmış kod komutlarını içeren bir nesne dosyası oluşturur.

@ .Arm.hello toplayıcı listesi
 1 0000: 6D795F6D 2  3  4  5  6 0000: E92D4000 7 0004: 8 000C: EBFFFFFE 9 0010: E8BD800010 11 12 13 0000: 48656C6C
	dizi	"Merhaba"	xdef	_Başlat	hizalamak_Başlat	xref	_write_string	stmfd	sp!,{rp}	adr	r0,_l1 $	bl	_write_string	ldmfd	sp!,{pc}	adres	hizalamak_l1 $	dizi	"Selam Dünya"	direkt	son

Bağlayıcı

Çalıştırılabilir bir program oluşturmak için bağlanan Charm modüllerinden biri ve yalnızca biri, imzalardan biriyle eşleşen bir prosedür içermelidir:

   export proc ~ start () export proc ~ start (int argc, ref array ref array char argv)

Bu, içindeki ana işleve benzerdir. C ve Java Diller. Buraya argc komut satırında aktarılan parametrelerin sayısını içerir ve argv dizisine bir başvuru içerir argc + 1 dizeler (sırayla konumsal parametre başına bir dize ve sonlandırma sıfır).

Ek olarak, modüller isteğe bağlı olarak, imzalarla eşleşen program başlatma ve kapatma sırasında başlatılan statik başlatma ve kapatma prosedürlerini içerebilir:

   dışa aktarma işlemi ~ başlatma () dışa aktarma işlemi ~ kapatma ()

Bağlayıcı, programı yürütmek için işletim sistemi tarafından gereken tüm gerekli başlık bilgilerini ekler ve çalışma zamanı ortamını (veri ve yığın işaretçileri) kuran ve denetimi başlatma prosedürüne geçiren çalışma zamanı kitaplığı derleyici destek kodunun çalıştırılmasını sağlar. uygulamanın.

Genel veri ve kod referansları ile birlikte programı oluşturmak için bağlantılı tüm modüllerin adlarını gösteren bir harita dosyası isteğe bağlı olarak üretilir ve bu dosya hata ayıklayıcılar ve profil oluşturucular tarafından kullanılabilir.

Referanslar

  1. ^ ISBN D-201-10073-8 Aho, Ullman Derleyici Tasarımının İlkeleri
  2. ^ ISBN D-201-10194-7 Aho, Sethi, Ullman Derleyici İlkeleri, Teknikleri ve Araçları
  3. ^ Haziran 1996 Stephen Wade Acorn User Magazine, Charm veya biblo?
  4. ^ Gavin Wraith (Ocak – Şubat 2012). "Arşiv dergisi". Arşivlenen orijinal 2016-03-04 tarihinde. Alındı 2012-03-18.
  5. ^ Haziran 2013 Kindle e-kitabı Raspberry Pi'de Charm Programlama
  6. ^ Charm RISC OS, dil sayfası
  7. ^ ISBN  0-9512579-0-0 Peter Cockerell ARM Assembly Dili Programlama

Dış bağlantılar