BCPL - BCPL

BCPL
paradigma prosedürel , zorunlu , yapılandırılmış
Tarafından tasarlandı Martin Richards
İlk ortaya çıktı 1967 ; 54 yıl önce ( 1967 )
Yazma disiplini tipsiz (her şey bir kelimedir )
Tarafından etkilenmiş
CPL
Etkilenen
B , C , Git

BCPL (" Temel Kombine Programlama Dili ") prosedürel , zorunlu ve yapılandırılmış bir programlama dilidir . Başlangıçta diğer diller için derleyiciler yazmaya yönelik olan BCPL artık yaygın olarak kullanılmamaktadır. Bununla birlikte, etkisi hala hissedilir, çünkü BCPL'nin B olarak adlandırılan soyulmuş ve sözdizimsel olarak değiştirilmiş bir sürümü , C programlama dilinin dayandığı dildi. BCPL, kod bloklarını sınırlandırmak için küme parantezleri kullanmak da dahil olmak üzere birçok modern programlama dilinin çeşitli özelliklerini tanıttı . BCPL ilk tarafından uygulanan Martin Richards ait Cambridge Üniversitesi'nde 1967 yılında.

Tasarım

BCPL, bunun için küçük ve basit derleyiciler yazılabilecek şekilde tasarlanmıştır; rivayete göre bazı derleyiciler 16 kilobayt ile çalıştırılabilir . Ayrıca, kendisi BCPL ile yazılmış orijinal derleyici kolayca taşınabilirdi. BCPL bu nedenle bir sistemi önyüklemek için popüler bir seçimdi . Derleyicinin taşınabilirliğinin önemli bir nedeni yapısında yatmaktadır. İki bölüme ayrıldı: ön uç kaynağı ayrıştırdı ve bir ara dil olan O-kodunu oluşturdu . Arka uç, O kodunu aldı ve hedef makine için makine koduna çevirdi. Sadece 1 / 5 derleyici'nın kodunun yeni bir makine, genellikle 2 ile 5 arasında sürdü bir görev desteklemek için yeniden yazılması için gereken insan-ayı . Bu yaklaşım daha sonra yaygın bir uygulama haline geldi (örneğin Pascal , Java ).

Dil, yalnızca bir veri türüne sahip olması nedeniyle olağandışıdır : bir kelime , genellikle mimarinin makine kelimesiyle hizalanmak üzere seçilen ve herhangi bir geçerli depolama adresini temsil etmek için yeterli kapasiteye sahip sabit sayıda bit. Zamanın birçok makinesi için bu veri türü 16 bitlik bir kelimeydi. Bu seçim daha sonra, adreslenebilir en küçük öğenin bir kelime değil bir bayt olduğu makinelerde veya 32-bit veya 64-bit gibi daha büyük kelime boyutlarına sahip makinelerde BCPL kullanıldığında önemli bir sorun olduğunu kanıtladı .

Herhangi bir değerin yorumlanması, değerleri işlemek için kullanılan operatörler tarafından belirlendi. (Örneğin, +iki değeri bir araya toplayarak onları tamsayı olarak ele aldı ; !bir değer aracılığıyla dolaylı olarak onu etkin bir şekilde bir işaretçi olarak ele aldı.) Bunun çalışması için uygulama hiçbir tür denetimi sağlamadı . Macar notasyonu , programcıların yanlışlıkla yazım hatalarından kaçınmasına yardımcı olmak için geliştirilmiştir.

BCPL'nin sözcük yönelimi ile bayt yönelimli donanım arasındaki uyumsuzluk çeşitli şekillerde ele alındı. Biri, sözcükleri bayt dizgilerine paketlemek ve açmak için standart kitaplık rutinleri sağlamaktı. Daha sonra, iki dil özelliği eklendi: bit alanı seçim operatörü ve infix bayt dolaylı operatör ( ile gösterilir %).

BCPL, ayrı derleme birimlerini kapsayan bağlamaları benzersiz bir şekilde işler . Kullanıcı tarafından bildirilebilen global değişkenler yoktur; bunun yerine Fortran'daki "boş ortak" a benzer global bir vektör vardır . Farklı derleme birimleri arasında paylaşılan tüm veriler, küresel vektörde önceden düzenlenmiş bir yerde depolanan vektörlere yönelik skalerleri ve işaretçileri içerir. Böylece başlık dosyaları ("GET" yönergesi kullanılarak derleme sırasında dahil edilen dosyalar), genel verileri derleme birimleri arasında senkronize etmenin birincil yolu haline gelir; bu, her biri bir adla ilişkilendiren bir sayı ile eşleştirilen sembolik ad listelerini sunan "GLOBAL" yönergelerini içerir. global vektörde karşılık gelen sayısal olarak adreslenmiş kelime. Değişkenlerin yanı sıra global vektör, harici prosedürler için bağlamalar içerir. Bu, derleme birimlerinin dinamik olarak yüklenmesini çok basit hale getirir. Temel uygulamanın bağlantı yükleyicisine güvenmek yerine, etkin bir şekilde BCPL, programcıya bağlantı sürecinin kontrolünü verir.

Global vektör, standart kütüphane rutinlerini değiştirmeyi veya arttırmayı da çok basit hale getirdi. Bir program, işaretçiyi global vektörden orijinal rutine kaydedebilir ve onu alternatif bir sürüme bir işaretçi ile değiştirebilir. Alternatif, orijinali işlemenin bir parçası olarak adlandırabilir. Bu, hızlı bir geçici hata ayıklama yardımı olarak kullanılabilir.

BCPL ilk küme ayracı programlama diliydi ve ayraçlar sözdizimsel değişikliklerden kurtuldu ve program kaynak kodu ifadelerini belirtmek için yaygın bir araç haline geldi. Uygulamada, günün kısıtlı klavyelerde, kaynak programları çoğunlukla dizilerini kullanılan $(ve $)sembollerin yerine {ve }. BCPL'nin C tarafından benimsenmeyen tek satırlık // yorumları , C++ ve daha sonra C99'da yeniden ortaya çıktı .

BCPL kitabı : Dil ve derleyicisi , BCPL felsefesini şu şekilde açıklar:

BCPL'nin felsefesi, en iyisini bildiğini zanneden ve neyin izin verilip neyin verilmediğinin kanununu koyan bir tiran değildir; daha ziyade, BCPL, bariz saçmalıklarla karşı karşıya kalsa bile, hizmetlerini şikayet etmeden elinden gelenin en iyisini sunan bir hizmetkar olarak hareket eder. Programcının her zaman ne yaptığını bildiği varsayılır ve küçük kısıtlamalarla kuşatılmaz.

Tarih

BCPL ilk tarafından uygulanan Martin Richards ait Cambridge Üniversitesi'nde 1967 BCPL selefi, Cambridge Programlama Dili, daha sonra yeniden adlandırılmış olan zorluklar karşı bir tepki idi Kombine Programlama Dili 1960'ların başlarında tasarlanmıştır (CPL). Richards, BCPL'yi "derlemeyi zorlaştıran tam dilin özelliklerini kaldırarak" yarattı. İlk derleyici uygulaması için IBM 7094 altında Uyumsuz Zaman Paylaşım Sistemi (CTSS), Richards ziyareti sırasında yazılmıştır Proje MAC de Massachusetts Teknoloji Enstitüsü 1967 baharında (MİT) dil öncelikle bir belgesinde açıklanan 1969 Bahar Ortak Bilgisayar Konferansı'na sunuldu.

BCPL'nin başlangıçta "Bootstrap Cambridge Programlama Dili" anlamına geldiği söyleniyor, ancak geliştirme BCPL'de durduğundan beri CPL hiçbir zaman oluşturulmadı ve kısaltma daha sonra BCPL kitabı için yeniden yorumlandı.

BCPL, orijinal merhaba dünya programının yazıldığı dildir . İlk MUD da BCPL ( MUD1 ) ile yazılmıştır .

Çeşitli işletim sistemleri (örneğin, BCPL kısmen ya da tamamen yazılmış Tripos ve erken alternatifler AmigaDOS ). BCPL aynı zamanda ilk modern kişisel bilgisayar olan çığır açan Xerox PARC Alto projesinde kullanılan ilk dildi ; diğer projelerin yanı sıra, Bravo belge hazırlama sistemi BCPL'de yazılmıştır.

Martin Richards'ın Atlas 2 derleyicisinin O-kodunun bir kağıt bandıyla başlayarak 1969'da önyüklenen erken bir derleyici, ICT 1900 serisini hedef aldı . İki makinenin farklı kelime uzunlukları (48'e 24 bit), farklı karakter kodlamaları ve farklı paketlenmiş dizi gösterimleri vardı ve başarılı önyükleme, yöntemin pratikliğine olan güveni artırdı.

1970 sonlarında Honeywell 635 ve Honeywell 645 , IBM 360 , PDP-10 , TX-2 , CDC 6400 , UNIVAC 1108 , PDP-9 , KDF 9 ve Atlas 2 için uygulamalar mevcuttu . 1974 yılında BCPL bir ağız ile uygulanmıştır BBN ara ürün O-kod kullanmadan. İlk uygulama, BBN'nin TENEX PDP-10'larında barındırılan bir çapraz derleyiciydi ve BBN'nin ARPANET'te kullanılan ikinci nesil IMP'leri uygulamasında kullanılan PDP-11'leri doğrudan hedef aldı .

1980'lerin ortalarında BBC Micro için, Dr. Martin Richards'ın kardeşi John Richards tarafından kurulan Richards Computer Products tarafından üretilen bir versiyon da vardı . BBC Domesday Proje dilinin kullanmak yaptı. Amstrad CPC ve Amstrad PCW bilgisayarları için BCPL sürümleri de 1986'da Birleşik Krallık yazılım evi Arnor Ltd tarafından piyasaya sürüldü. MacBCPL, 1985'te Kensington, İngiltere'den Topexpress Ltd tarafından Apple Macintosh için piyasaya sürüldü.

BCPL'nin hem tasarımı hem de felsefesi B'yi güçlü bir şekilde etkiledi , bu da sırasıyla C'yi etkiledi . O zamanlar programcılar, C'nin nihai halefinin alfabedeki bir sonraki harf olan "D" veya ana dil adındaki bir sonraki harf olan "P" olarak adlandırılıp adlandırılmayacağını tartıştılar. C'nin halefi olarak en çok kabul edilen dil C++' dır ( ++C'nin artırma operatörü olmakla birlikte), bu arada bir D programlama dili de mevcuttur.

1979'da, BCPL uygulamaları en az 25 mimari için mevcuttu; C, Unix olmayan sistemlerde popüler hale geldikçe, dil yavaş yavaş gözden düştü.

Martin Richards, web sitesinde en son 2018'de güncellenen modern bir BCPL sürümüne sahiptir. Bu, Linux, FreeBSD ve Mac OS X dahil olmak üzere çeşitli sistemlerde çalışacak şekilde ayarlanabilir. En son dağıtım, grafik ve ses kitaplıklarını içerir ve bir kapsamlı el kitabı. Müzikal otomatik nota takibi üzerine yaptığı araştırma da dahil olmak üzere programlamaya devam ediyor .

BCPL için yaygın bir resmi olmayan MIME türü text/x-bcpl'dir .

Örnekler

Bu programlar Martin Richards'ın Cintsys'in güncel sürümü (Aralık 2018) kullanılarak çalıştırılıyorsa, hataları önlemek için LIBHDR, START ve WRITEF küçük harfle değiştirilmelidir.

Faktöriyelleri yazdır:

GET "LIBHDR"

LET START() = VALOF $(
	FOR I = 1 TO 5 DO
		WRITEF("%N! = %I4*N", I, FACT(I))
	RESULTIS 0
$)

AND FACT(N) = N = 0 -> 1, N * FACT(N - 1)

N kraliçeler problemine çözümleri sayın :

GET "LIBHDR"

GLOBAL $(
	COUNT: 200
	ALL: 201
$)

LET TRY(LD, ROW, RD) BE
	TEST ROW = ALL THEN
		COUNT := COUNT + 1
	ELSE $(
		LET POSS = ALL & ~(LD | ROW | RD)
		UNTIL POSS = 0 DO $(
			LET P = POSS & -POSS
			POSS := POSS - P
			TRY(LD + P << 1, ROW + P, RD + P >> 1)
		$)
	$)

LET START() = VALOF $(
	ALL := 1
	FOR I = 1 TO 12 DO $(
		COUNT := 0
		TRY(0, 0, 0)
		WRITEF("%I2-QUEENS PROBLEM HAS %I5 SOLUTIONS*N", I, COUNT)
		ALL := 2 * ALL + 1
	$)
	RESULTIS 0
$)

Referanslar

daha fazla okuma

  • Martin Richards, The BCPL Reference Manual (Memorandum M-352, Project MAC , Cambridge, MA, USA, Temmuz 1967)
  • Martin Richards, BCPL - derleyici yazımı ve sistem programlama için bir araç ( Proceedings of the Spring Joint Computer Conference , Cilt 34, sayfa 557–566, 1969)
  • Martin Richards, Arthur Evans, Robert F. Mabee, The BCPL Reference Manual (MAC TR-141, Project MAC , Cambridge, MA, USA, 1974)
  • Martin Richards, Colin Whitby-Strevens, BCPL, dil ve derleyicisi (Cambridge University Press, 1980) ISBN  0-521-28681-6

Dış bağlantılar