İlk derleyici neden ilk tercümandan önce yazıldı?


72

İlk derleyici 1952'de Grace Hopper tarafından, Lisp tercümanı 1958'de John McCarthy'nin öğrencisi Steve Russell tarafından yazılmıştır. Derleyici yazmak, tercümandan çok daha zor bir problem gibi görünüyor. Öyleyse, neden ilk derleyici ilk tercümandan altı yıl önce yazılmış?


67
çünkü bir derleyiciye o zaman bir tercümandan daha fazla ihtiyaç vardı
cırcır ucube

23
İlk tercümanı derlemek için? : P (yanakta sadece kısmen dil, bir tercüman karmaşıktır (basit bir derleyiciden çok daha fazlası) ve makine kodunda verimli bir tane yazmak kötü olur)
Vality 14

4
CPU yürütme talimatlarını yorumlama olarak alırsanız, bu şekilde görürsem (ancak donanım yoluyla uygulanır), ilk tercümanın ilk derleyiciden sonra yazılmadığı iddiası. BTW, bunun soru / cevabın faydası olmadığını biliyorum. Sadece farklı bir bakış açısıyla ilgili ilginç bir yorum olması gerekiyordu.
Pedro Henrique A. Oliveira,

11
McCarthy, LISP tercümanını yazmadı. McCarthy matematiksel bir formalizm icat etti. O sırada MIT AI Lab'daki öğrencilerden biri olan Steve Russell, McCarthy'nin fantezi uçuşlarını yürütmek için tercüman yazabileceğini fark etti ve gerisi tarih oldu.
John R. Strohm

5
Aslında, McCarthy'nin LISP'nin uygulanamaz olduğuna inandığını duydum. Bu LISP manuel a dan McCarthy'nin evrensel fonksiyonu) fark Russell oldu oldu tercüman ve b) uygulanabilir oldu.
Jörg W Mittag

Yanıtlar:


97

Derleyici yazmak, tercümandan çok daha zor bir problem gibi görünüyor.

Bugün doğru olabilir, ancak 60 yıl önce durum böyle olmadığını savunuyorum. Bunun birkaç nedeni:

  • Bir tercüman ile hem programı hem de hafızada tutmanız gerekir. 1kb hafızanın büyük bir lüks olduğu bir çağda, çalışan hafızanın ayak izini düşük tutmak kilit öneme sahipti. Ve yorumlama, derlenmiş bir programı çalıştırmaktan biraz daha fazla bellek gerektirir.
  • Modern CPU'lar büyük talimat kataloglarıyla oldukça karmaşıktır. Bu yüzden iyi bir derleyici yazmak gerçekten zor bir iştir. Eski CPU'lar daha basitti, derleme bile daha basitti.
  • Modern diller eski dillerden çok daha karmaşıktır, bu nedenle derleyiciler bile daha karmaşıktır. Eski diller böylece daha basit derleyiciler olurdu.

65
ve bir derleyici olmadan tercümanı mecliste yazmak zorunda kalırsınız
cırcır

34
İnsanların bulunduğu ilk derleyiciler. (İnsanlar tercüman olduğunda bilgisayara ihtiyacımız yoktur). Öyleyse, birileri derleyiciyi derlenmiş bir dilde yazmayı düşünmüş olmalı (sahip oldukları tek kişi, ancak zaman insanlarımı derlerken).
ctrl-alt-delor

1
Aslında .... Geçenlerde 60'ların ay uçuşlarında kullanılan Apollo Rehberlik Bilgisayarının bir tercümanı olduğunu okudum: wiki girişi "... tercüman, AGC'nin yerel olarak desteklediğinden daha fazla talimat verdi ..." Bu "tercüman" dı. gibi daha "Sweet 16" LISP gibi bir şey daha eski Apple II bilgisayarları gömülü tercüman.
Calphool

6
@ ratchetfreak Ve öyleydi. İlk derleyiciler gibi.
RBarryYoung

3
@richard: İnsanlar tercüman / hesapçı olduklarında iş unvanına "bilgisayar" denirdi. Böylece insanlar tercüman olduklarında tam anlamıyla bilgisayardı. Manhattan projesi, nükleer fizikçilerin hesaplamalarını posta yoluyla gönderilmek üzere gönderdikleri binlerce "bilgisayar" (fiili iş unvanı, cidden) kullandı. Aslında, proje aynı zamanda "bilgisayarlara" gönderilmek üzere fizikçilerin teorilerinden hesaplamaları yapan mühendislerden hesaplamaları yapan matematikçiler kullandı.
slebetman

42

Temel nokta, 1950'lerin bilgi işlem donanım ortamının, o zamanlar bilgisayarların toplu yönelimli işlenmesi göz önüne alındığında, yalnızca bir derleyicinin mümkün olmasını sağlamasıydı.

O zamanlar, daha iyi kullanıcı arayüzleri esasen delikli kartlar ve teletype yazıcılar ile sınırlıydı . 1961'de SAGE sistemi bilgisayardaki ilk Katot-Işın Tüpü (CRT) ekranı oldu. Bu nedenle, bir tercümanın etkileşimli doğası, daha sonraya kadar tercih edilemez ya da doğal değildi.

1950'lerde sayısız bilgisayar, talimatları yüklemek için ön panel anahtarlarını kullandı ve çıktı basitçe lamba / LED sıralarıydı ve hobiler bile 1970'lerde ön panel anahtarlarını ve LED'lerini kullandılar. Belki de ünlü Altair 8800'ü tanıyorsunuzdur .

Diğer donanım sınırlamaları da tercümanları olanaksız kılıyor. 1950'lerde bilgisayarlarda birincil bellek (örn. RAM) aşırı sınırlı kullanılabilirliği vardı. Yarı iletken tümleşik devreden önce (ki bu 1958'e kadar gelmedi) bellek, manyetik çekirdekli bellek ya da bit ya da sözcüklerle ölçülen gecikme hattı belleği ile sınırlıydı , ön ek. İkincil depolama belleğinin yavaşlığı (örneğin, disk veya teyp) ile birlikte, yorumlayıcı için kullanılan belleğin büyük bir kısmına sahip olmanın mümkün olmadığı durumlarda, yorumlayıcı program yüklenmeden önce bile zararlı olduğu kabul edilir.

IBM’deki John Backus’un liderliğini yaptığı FORTRAN derleyicisini 1954-57’de oluşturduğunda, bellek kısıtlamaları hala önemli bir faktördü. Bu yenilikçi derleyici, yalnızca optimize edici bir derleyici olduğundan başarılı oldu .

1950'lerde bilgisayarların çoğunda, dinamik bağlantı ve sanal bellek yönetimi gibi modern özelliklerin yanı sıra, herhangi bir İşletim Sistemine neredeyse hiç sahip değildi , bu nedenle tercüman fikri o zaman çok radikal ve pratikti.

ek

1950'lerin dilleri ilkeldi. Bunlar genellikle altta yatan donanımın talimatlarından veya hedeflenen kullanımlarının problem tanımından etkilenen küçük bir avuç dolusu işlem içeriyordu .

O zamanlar bilgisayarlar bugün nadiren genel amaçlı bilgisayarlardı; Yeniden inşa edilmek zorunda kalmadan yeniden programlanabilir olduklarının devrimci bir kavram olduğu düşünülüyordu - daha önce insanlar cevapları hesaplamak ya da hesaplamak için elektromekanik makineler kullanıyorlardı (tipik olarak hesap makineleri) ( 1950'lerde uygulamaların çoğu doğada sayısaldı).

Bir Bilgisayar Bilimi bakış açısına göre, derleyiciler ve tercümanlar hem çevirmendir , hem de kabaca uygulanması karmaşıktır.


Bilgisayarlar, zaman paylaşımının ortaya çıkmasından önce teletypes kullandılar mı? Satır yazıcılarını kullanmalarını ya da bantlama için biriktirmelerini beklerdim. Aksi halde, 1-8 saniyelik bir bilgisayarın, her bir metin satırının bilgisayarın yapabileceği 1-8 saniyeyi temsil edeceği, ancak faydalı bir şey yapamayacağı bir süre beklemesi gerekecektir.
supercat

2
@supercat - evet, teletypes kullanıldı, ancak "etkileşimli" den çok uzaklardı. Programladığım ilk bilgisayarda 1 bit olmak üzere 18 bit kelimeden oluşan bir hafıza vardı. Belleğin kendisi dönen bir tamburdu , bu yüzden bilgisayarı açtığınızda bellek hızlanana kadar beklemeniz gerekiyordu. Bir teletip ekliydi ve A) klavyeden girilen bir karakteri okuyabilir ya da kâğıt şerit okuyucusu tarafından okuyabilirsiniz (bilgisayarın bakış açısıyla aynıydı), B) "yazıcıya bir karakter yazabilir "Teletipte" Ah, harika günler - BÜYÜK günler ..! MY GRUEL WARM YET EĞER Mİ? :-)
Bob Jarvis

@BobJarvis: Hangi yıl olurdu?
supercat

1
@ supercat - 1973 - ancak söz konusu bilgisayar (EDP-18, Eğitimsel Veri Ürünleri) o zaman bile nispeten yaşlıydı. Yine de, sahip olduğumuz şeydi (ve ortaokulun ortasında 70'lerin ortalarında lise ile uğraşacak herhangi bir bilgisayarın olması olağandışıydı). :-)
Bob Jarvis

2
Bu, kabul edilenden çok daha iyi ve eksiksiz bir cevap.
Jim Garrison

12

İlk programlama dilleri oldukça basitti (örneğin, özyinelemesiz) ve kendisi de basit olan makine mimarisine yakındı. Çeviri sonra basit bir işlemdi .

Bir derleyici, program yürütme verilerini ve kaynak kodu yorumlama tablolarını bir arada tutması gereken bir tercümandan daha basitti. Ve tercüman , kendisi için program kaynak kodu ve sembolik tablolar için daha fazla yer kaplardı.

Hafıza o kadar az olabilir ki (hem maliyet hem de mimari sebeplerden dolayı), derleyiciler işletim sisteminin üzerine yazılan bağımsız programlar olabilir (bunlardan birini kullandım). Derlenmiş programı çalıştırmak için işletim sisteminin derlemeden sonra yeniden yüklenmesi gerekiyordu. ... bu, gerçek iş için tercüman çalıştırmanın bir seçenek olmadığını açıkça ortaya koyuyor .

Doğruyu söylemek gerekirse, derleyicilerin gereken sadeliği derleyicilerin çok iyi olmadığı şekilde olmuştur (kod optimizasyonu henüz düşünüldüğünde, henüz başlangıç ​​aşamasındaydı). Elle yazılmış makine kodu, en azından bazı yerlerdeki altmışlı yılların sonlarına kadar, derleyici tarafından üretilen koddan önemli ölçüde daha verimli olma ününe sahipti. Derlenmiş kodun boyutunu çok iyi bir programcının çalışmasıyla karşılaştıran bir kod genişletme oranı kavramı bile vardı . Çoğu (tümü?) Derleyiciler için genellikle 1'den büyüktü; bu, daha yavaş programlar ve daha da önemlisi daha fazla bellek gerektiren daha büyük programlar anlamına geliyordu. Bu hala altmışlı yıllarda bir sorun oldu.

Derleyicinin ilgisi, özellikle çeşitli alanlardaki bilim adamları gibi bilgi işlem uzmanı olmayan kullanıcılar için programlama kolaylığıydı. Bu ilgi kod performansı değildi. Ancak yine de programcının zamanı daha ucuz bir kaynak olarak kabul edildi. Maliyet bilgisayardan, 1975-1980'e kadar, donanımdan yazılıma geçtiğinde idi. Bu, derleyicinin bile bazı profesyoneller tarafından ciddiye alınmadığı anlamına gelir .

Bilgisayar süresinin çok yüksek maliyeti, tercümanların diskalifiye edilmesinin bir başka nedenidir , yani fikrin çoğu insan için gülünç olacağı noktaya gelmişti.

Lisp vakası çok özel bir konu, çünkü uygulanabilir hale getiren son derece basit bir dildi (ve bilgisayar 58'de biraz daha büyümüştü). Daha da önemlisi, Lisp tercümanı, herhangi bir kullanılabilirlik sorunundan bağımsız olarak, Lisp'in ( meta-dairesellilik ) öz tanımına ilişkin bir kavram kanıtıydı .

Lisp başarısı büyük ölçüde, bu kendiliğinden tanımlanabilirliğin onu programlama yapılarını incelemek ve yeni diller tasarlamak için (ve ayrıca sembolik hesaplamaya uygun olması için) mükemmel bir test ortamı haline getirmesinden kaynaklanmaktadır.


3
Benim, ne kadar cesur .
Pharap

@Pharap Bu uygunsuz tarzı mı? Amacım, basit bilgilerin sıralanmasından daha özgür bir tarza izin verirken, kilit bilgilerin bulunmasını kolaylaştırmaktır. Bu SE sitesinde gerçekten çok etkili görünmediğini itiraf etmeliyim.
babou

@ anonim-downvoter Açıklayıcı bir yorum olmadan Downvoting, birinin aptal olabileceğini gösterir. Ancak kim olduğunu söylemez.
babou

4

Sorunun öncülüne katılmıyorum.

Amiral Hopper'ın ilk derleyicisi (A-0) daha çok bağlayıcı ya da makro dili gibiydi. Bir kasette alt rutinleri sakladı (her biri bir numara atandı) ve programları alt rutinlerin ve argümanların bir listesi olarak yazılacaktı. Derleyici, istenen alt yordamları banttan kopyalar ve bunları tam bir programa yeniden sıralar.

"Derleme" kelimesini, şiirlerin bir antolojisini derlediği gibi kullandı: çeşitli eşyaları bir ciltte bir araya getirmek.

Bu ilk derleyicide, söyleyebileceğim kadarıyla, onu modern bir derleyicinin uzak atası yapan bir söz sahibi ya da çözümleyici yoktu. Daha sonra daha ingilizce benzeri bir sözdizimi amacıyla başka bir derleyici (B-0, aka FLOW-MATIC) yarattı, ancak 1958 ya da 1959 yılına kadar tamamlanmadı - Lisp tercümanı ile aynı zamanda.

Bu nedenle, sorunun kendisinin biraz hatalı olduğunu düşünüyorum. Derleyicilerin ve tercümanların aynı anda neredeyse tam olarak aynı anda geliştiği görülüyor, pek çok bilim insanının aynı gün boyunca aynı çizgide düşünmesini sağlayacak fikirlerin paylaşımı nedeniyle hiç şüphesiz.

Buradaki alıntılarla daha iyi bir cevap: https://stackoverflow.com/a/7719098/122763 .


3

Denklemin diğer kısmı, derleyicilerin bir birleştiricinin üzerinde bir adım soyutlaması olmasıdır. İlk önce kodlanmış makine kodumuz vardı. "Biz" montajcıydık. Her atlama ve ofset, vb., Hex (veya sekizli) olarak elle hesaplandı ve daha sonra kağıt bant veya kartlara delindi. Yani montajcılar sahneye çıktığında, çok büyük bir zaman kazandı. Bir sonraki adım makro montajcılarıydı. Bu, bir dizi makine talimatına yayılacak bir makro yazma yeteneği verdi. Yani Fortran ve Cobol ileriye doğru büyük bir adım attılar. Kaynakların eksikliği (depolama, bellek ve işlemci döngüleri), genel amaçlı tercümanların teknolojinin büyümesini beklemesi gerektiği anlamına geliyordu. İlk tercümanların çoğu bayt kodlu motorlardı (bugün Java veya CLR gibi, ancak daha az yetenekli). UCSD Pascal çok popüler (ve hızlı) bir dildi. MS Basic, başlık altında bir byte kod motoruydu.

Genel giderler açısından, hangi işlemcinin çalıştırıldığına tamamen bağlıydı. Endüstri bir süredir CISC kargaşasına karşı büyük bir RISC'den geçti. Şahsen IBM, Data General, Motorola, Intel (göründüğünde), TI ve diğer birçokları için assembler yazdım. Bir p kodunu "yorumlamak" için gerekenleri etkileyecek olan talimat kümelerinde, kayıt defterlerinde vs. oldukça önemli bir fark vardı.

Bir zaman referansı olarak, 1972'de telefon şirketinden programlama yapmaya başladım.


2

Her şeyi bellekte tutmuyorsanız, derlenmiş kod çok daha hızlıdır. Unutmayın, bu zamanlarda fonksiyonlar derlenen koda dahil edildi. Derleme yapmazsanız, hangi fonksiyonlara ihtiyacınız olacağını bilmiyorsunuz. Yani, işlevleri çağırıyorsunuz ... Ah, henüz diskten değil, 50 bağların başındayız, fakat kartlardan! Çalışma zamanı!

Elbette, bir geçici çözüm bulmak mümkündür, ancak diller henüz bulunamamıştır, çünkü diller çok basitti ve makine kodundan çok uzak değildi. Ve derleme kolay ve yeterliydi.


1

İlk derleyici yazılmadan önce insanlar düz ikili kodla karşılaştırıldığında çok büyük bir ilerleme olan assembler kodunu yazdılar. O zaman, bir derleyici tarafından derlenen kodun, montajcı kodundan daha az etkili olacağına dair güçlü bir argüman vardı - o zamanlar (bilgisayar maliyeti) ile (programcı maliyeti) arasındaki ilişki bugünden çok daha farklıydı. Bu yüzden derleyicilere bu açıdan güçlü bir direnç geldi.

Ancak derleyiciler tercümanlardan çok daha etkilidir. O zaman tercüman yazmayı önerseydin, insanlar senin deli olduğunu düşünürlerdi. Bir milyon dolarlık bilgisayar satın alıp daha sonra kodunu yorumlama gücünün% 90'ını boşa harcayabileceğinizi düşünebiliyor musunuz?


1950'lerin bilgisayarları hakkında pek bir şey bilmiyorum, ama en azından sonraki on yılların basit von Neumann makineleri için, tercüman ek yükü yorumlanmış talimat başına iki ila beş komut (toplamda dört ila on döngü) olacaktır: Kod çözme, dolaylı atlama, belki kod çözme ek argümanlar. Tercüme edilmiş talimat setini yeterince yüksek bir seviyeye getirirseniz (bu nedenle tercüman talimatı başına birkaç makine talimatı uygularsınız), bu% 90'dan az ve hatta belki de kabul edilebilir. Ayrıca bakınız: İleri.

3
İlk derleyici yazılmadan önce, programların çoğu asıl makine dilinde değil, derleme dilinde (op-kod anımsatıcıları) yazılmıştı.
mctylr

2
@delnan Bu sistemler kiloHertz'de saatlerle çalıştığından, performanstaki 3-5 zaman azalmasını boşa harcamak büyük olasılıkla sistem donanım arızası (örn. vakum tüpü üflenir) nedeniyle başarısızlıkla sonuçlanmadan önce başarıyla tamamlanan program arasındaki fark olabilir. Donanım hataları, doğru hatırlıyorsam 1950'lerde günlük bir olaydı.
mctylr

delnan: Bana beş talimat ek yükü ile yorumlayabilecek bir tercüman göster. Ve Forth, yorumlanmış bir dil değil, bir kötülük :-). Üzgünüm, dişli dili kastediyorum. BASIC gibi bir şey bir ifadeyi yorumlamak için çok sayıda talimat alır.
gnasher729

@gnasher: 1974'te, BASIC deyimini kodlamak için bayt odaklı bir P kodu kullanan Keronix (ahem, Data General Nova klonları) için yüksek performanslı bir BASIC tercümanı oluşturdum. Bir pCode'u "yorumlamak" için yaklaşık 25-50 makine talimatı aldı, bunlardan 10 tanesi bayt alımı için. (1969'da ifadelerini yeniden ayrıştırması gerektiğinden daha fazla alan bir yazıyı geri aldım). Ama değildi ve "gazillions" değil.
Ira Baxter,

1

Bir döngü programının yorumlanabilmesi için, tekrar tekrar okunabilen bir ortamda saklanması gerekir. Çoğu durumda, tek uygun ortam RAM olacaktır. Kod, tipik olarak - okunabilir diller için - büyük ölçüde boş olması muhtemel olan delikli kartlara girileceği için, RAM'de depolanmadan önce kod üzerinde bir tür işlem yapılması gerekir. Çoğu durumda, delikli kart metnini işlemcinin doğrudan yürütmesi için uygun bir forma sokmak, bir tercüman aracılığıyla verimli bir şekilde işlenebilecek bir forma dönüştürmekten çok daha zor değildir.

İlk derleyicilerin hedefinin diskte bir montaj dili veya nesne kodu dosyası üretmek değil, RAM'de yürütmeye hazır olan kodu sonlandırmak olduğunu unutmayın. Bu, içine girecek bir işletim sistemi olmadığında şaşırtıcı bir şekilde kolaydır. Bir derleyici, belleğin bir ucundan başlayarak kod üretebilir ve diğerinden başlayarak değişkenleri ve dal hedeflerini tahsis edebilir. Bir deyim "1234" etiketiyle işaretlenmişse, derleyici geçerli kod oluşturma adresine atlamak için bir komut "1234" olarak adlandırılan değişkende saklar, yoksa bu değişkeni oluşturur. "Goto 1234" ifadesi, mevcut değilse "1234" değişkeni yaratacak ve daha sonra bu değişkene atlayacaktır (umarım bu ifade çalıştırılmadan önce içinde depolanan uygun yere atlayacaktır).gotoHenüz tanımlanmamış bir etiket, çünkü ne zaman gotoatlayacağı derlenir - bir değişkene. Kod oluşturmanın en etkili yolu bu olmayabilir, ancak bilgisayarların işlemesi beklenen programların boyutları için bu yeterlidir.


1
Disk? Hayır ... ummmm. Teyp. Büyük, yavaş, makaradan makaraya bantlar. Ve birçoğu. Grace Murray Hopper tarafından verilen bir konferansa gittiğimi hatırlıyorum (benim için iki kat ilginçti; çünkü sistem analizinde büyük ve kampüsteki Donanma ROTC dekolmanında bir orta sınıftaydım ve CAPT Hopper hizmet veren bir deniz subayıydı). Programın kullanılmayan kısımlarını kasete yazmak fikriyle geldiği bir hikayeyle ilgili olduğunu söyledi - “yardımcı depolamayı kullanarak” olarak adlandırdı. "Ama", "IBM aynı şeyi yapıp Sanal Bellek olarak adlandırıncaya kadar fikir aklıma gelmedi" dedi. CAPT Hopper gerçekten IBM'den hoşlanmadı ... :-)
Bob Jarvis

@BobJarvis: Bu yönü düşünmemiştim, ancak çalışmaya hazır kodu RAM'e derlemek için kullanılan aynı genel tek geçişli tasarım bir teyp sürücüsü ile iyi çalışabilirdi; derleyiciden gelen çıktı teybe gider, daha sonra teyp geri sarılır ve sıralı hafıza adreslerine okunur ve aynı anda derleyicinin herhangi bir kısmının hafızada kalmasına gerek kalmadan doğrudan çalıştırılır.
supercat

0

Çünkü tercümanların çalışması için derleyicilere ihtiyacı vardır.

Yukarıdaki ifade gerçekten doğru değil. Kesin konuşmak gerekirse, sen yapabilirsiniz şimdiye kullanarak ya da başka bir derleyici ile etkileşime girmeden bir tercüman yapmak. Ancak bunu yapmanın sonuçları, bu terimlerle ne demek istediğinizi düşündüğüm gibi görünmez.

Kesin anlamda, derleyiciler ve tercümanlar tamamen farklı şeyler yaparlar. Bir derleyici, bir kaynaktan gelen metni okur ve başka bir biçime dönüştürür: montaj dili, makine kodu, başka bir üst düzey dil, bir veri yapısı veya başka bir şey. Bu arada bir tercüman da bir tür veri yapısına bürünmekte ve buna dayalı talimatlar uygulamaktadır.

Bugünlerde "derleyici" olarak düşünme eğiliminde olduğumuz şey aslında bir kod oluşturucu ile eşleştirilen bir derleyicidir : bazı kaynaklardan veri alan ve gördüklerini temel alan bir kod çıktısı veren bir program. Bu derleyiciler için oldukça sezgisel bir kullanımdır ve derleyicilerin yaratıldığı ilk şeylerden biriydi. Ancak, başka bir şekilde bakarsanız, bu bir tercümanın yaptığı ile çok benzer görünüyor. Daha genel işlemler yapmak yerine her zaman kod çıkarır, ancak ilke aynıdır.

Buna diğer taraftan bakarsak, bir tercümanın verilerini bir yerden alması gerekir . Bu sadece veridir, yani başka türlü veri oluşturduğunuz şekilde oluşturabilirsiniz. Yorumdan bahsettiğimizden, verilerinizi bir metin dosyasındaki talimatlara dayanarak oluşturmanız doğal görünüyor. Ama bunu yapmak için, metinde okuyacak ve veri yapınızı oluşturacak bir şeye ihtiyacınız olacak ve bu bir derleyici . Kod oluşturucu yerine tercümana bağlı, ama aynı şekilde bir derleyici.

Bu yüzden ilk önce derleyiciler yazılmıştı. Veri yapılarını yorumlama fikri, derleyiciler tasarlandığında bile yeni değildi, ancak derleyiciler programcıların bu yapıları metnin dışına inşa etmelerini sağlayan "eksik bağlantı" idi.


Apple'ın orijinal Temel tercümanı] [anladığım kadarıyla, makine koduna elle çevrildi ve hiçbir zaman makine tarafından okunabilen kaynak kodu biçiminde yoktu. Söylemek için kullanacağınız "derleyici" nin ne olduğundan emin değilim.
supercat

@supercat: Bahsettiğiniz Temel tercümanın nasıl üretildiğini bilmiyorum, ama tercüman üretmek için kullanılan derleyicilerden bahsetmiyorum . Tercümanların bir parçası olan derleyicilerden bahsediyorum . Kodunun bir parçası olarak, Apple] [BASIC tercümanı, BASIC kodunu içeren metin dosyalarını okumak ve o metinden sonra sözdizimi ağacı oluşturmak için bir yol gerektiriyor. Bunu yapan kod bir derleyicidir; makine kodu üretmez, ancak yine de kodda okuma ve başka bir forma dönüştürme görevlerini yerine getirir.
The Spooniest,

Tipik bir mikro bilgisayar BASIC yorumlayıcıları, uzaktan sözdizimi ağacına bile benzeyen bir şey üretmez. Orijinal Apple BASIC tercümanına ("integer BASIC" olarak adlandırılır) aşina değilim, ancak Microsoft tarafından Apple için ("Applesoft BASIC"), Commodore ve program metni depolayan diğer iki şirketin haricinde başka şirketler tarafından uygulanan BASIC tercümanı : (1) her satırdan önce 16 bitlik bir satır numarası ve sonraki satırın 16 bitlik adresinden önce bir sıfır bayt; (2) her bir anahtar kelime, yüksek bit kümesine sahip tek bir bayt ile değiştirildi. Bunun dışında ifadeler ayrıştırıldı ...
supercat

... karakter karakter, soldan sağa; A = 1234 "gibi bir ifade, 1, 2, 3 ve 4 rakamlarını çalışma zamanında kayan nokta sayısına dönüştürür.
supercat

@supercat: Bu bir sözdizimi ağacından daha byte koduna daha yakın geliyor, o zaman bu konuda hatalıyım. Ancak asıl nokta hala duruyor: sözde bayt kodunun hala metinden yapılmış olması ve bunu yapan kodun bir derleyici olması gerekiyor.
The Spooniest

-1

Diğer bir faktör: İlk derleyiciler yazıldığında, makine zamanının maliyeti şimdi olduğundan çok daha fazlaydı. Tercümanlar çok daha fazla makine kullanıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.