Pascal'ın evrimine hangi özellikler katkıda bulundu?


17

Pascal dilinin ayrıntılı bir geçmişini derliyorum ve eksik olduğum birkaç ayrıntı var.

Bugün kabul ettiğimiz birçok özellik var. Pascal'ın evrimine hangi özellikler önemli katkıda bulundu ve neden önemliydi?

Platform veya çerçeve özelliklerini değil, dil özelliklerini arıyorum. Operatör aşırı yüklenmesi veya varsayılan parametreler gibi, ancak Linux desteği veya yeni Zengin Metin widget'ı gibi.

Pascal'ın (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal, vb.) Birkaç farklı çeşidi olduğunu biliyorum ve aynı özellikleri farklı zamanlarda ve paralel olarak tanıttılar. Sorun değil. Ben bütün olarak Delphiye bakıyor ve ben ne zaman önemli kilometre taşları oluştu (tarihler, sürümler, vs.)


@Jim Sorunuz bir tarih listesi istedi, ancak birisinin neden önemli olduğunu düşündüğü konusunda girdi sormadı. Sorunuzu bu yönü yakalamak için yeniden yazdım ve yeniden açtım.

2
Turbo Pascal ürününün Pascal dünyasında devrim yarattığını biliyor musunuz? Ve aslında IBM PC dünyası? Özellikle telleri sabitlediğinden beri.

4
UCSD Pascal'ı unutma! Java, Sun'ın gözünde parıldamadan çok önce bayt kodlarını (p kodları) tanıttı.
Macneil

1
+1 @Macneil UCSD p-Code ve Smalltalk VM, modern yönetilen kod (Java, .NET) hakkında konuşurken her zaman açıkladığım şeylerdir. 'Modern' bir sürü şey gördüğünüzde bir déjà vu'ya sahip olmak eğlencelidir (örneğin Apps, istemci-sunucunun yeni bir lezzeti gibi).
Jeroen Wiert Pluimers

1
@Jeroen Pluimers: DVCS'nin bu "yeni" konuşmasından da çok eğlendim. Sun'da SCCS / Teamware kullandım, Torvalds BitKeeper kullandı. CVS gördüğümde kırıldığını biliyordum (Torvalds gibi). SVN'yi ilk duyduğumda, "ah, sonunda çözdüler" diye düşündüm. Ama hayır. OSS dünyası (ve Joel!) CVS tarafından her şeyi yanlış yapan çok hasar gördü, bunun yeni bir şey olduğuna inanmaları gerekiyor!
Macneil

Yanıtlar:


10

Bir dil tarihi bakış açısından, muhtemelen Pascal'ın en büyük katkısı güçlü tip güvenlikti. Bu savaş çoğunlukla bitti - Pascal'ın tarafı kazandı - ve endüstriyel devrilme noktası Java idi. Ancak çok uzun bir süre boyunca C, kendilerini büyük ölçüde kodlayıcı olarak büyüdüğünü düşünen insanlar tarafından Pascal'dan önce tercih edildi: insanlar, göstergelerini tamsayı gibi manipüle etme özgürlüğünü istiyorlardı. Bununla birlikte, Pascal'ın pratik uygulamalarında, ayrımcı alanı dinamik olarak kontrol etmeyen sendikalar gibi boşluklar vardı, hatta C eşdeğeri olma noktasına kadar işaretçilerin tam olarak tiplendirilmesi de vardı (Turbo Pascal bunlardan biriydi).

Bu ve karmaşık ALGOL 68 spesifikasyonunun [1] basitleştirilmesi bir başlangıç ​​noktası olabilir.

[1] Bir ara ALGOL 68 raporunu okumaya çalışın - kesinlikle 60'ların ürünü! Web'deki bir site tuhaf jargonundan bazılarından bahsediyor: 'otobüs belirteci', 'görünmez üretim ağaçları', 'ilkel çevre', 'ensest sendikaları', 'kavramlar', 'protonotions', 'metanotions', 'hipernotions', ' paranotions 'vb.


15

Pascal tarihi boyunca en önemli iki itici gücün:

  1. Tip güvenliği: Pascal, tip güvenliğinin bir dilde önemli ve kritik olduğu inancını yaratmada önemli bir rol oynamıştır.
  2. Derleyici verimliliği: Pascal her zaman tek geçiş dili olarak tasarlanmıştır ve dünyaya bir derleyicinin güçten vazgeçmeden ne kadar hızlı olabileceğini gösterdi. Hızlı bir derleyici için yapılan şeyler de iyi tasarlanmış, okunması kolay bir dil için yapılan şeylerdir. Borland'ın genuis'i de tüm bunları ve performansı sağlıyordu.

PASCAL ayrıca derleyicinin PASCAL'de yazıldığı ilk dil değil miydi? O zamanlar dikkat çeken bir diğer şey, sanal bir paskal makinesi için P kodu idi. Farklı bir makineye PASCAL uygulamak için tek yapılması gereken, P kodu için bir tercüman veya montajcı yazmaktı.
Ingo

Tip güvenliğinin, çoğu pascal derleyicisinde çalışma zamanı denetimleri olarak bilinen mekanizmaları da içerdiğini ekleyebilirim. (Neredeyse?) Her derleyicide C derleyicilerinin tercih ettiği LINT yaklaşımından temel olarak farklı olan bu derleyiciler vardır.
Marco van de Voort

11

Kökenlere geri dönmeniz gerekiyor - Niklaus Wirth'in bazı tarihlerini bulun. Pascal hayatına bir öğretim dili olarak başladı. "Algoritmalar + Veri Yapıları = Programlar" iyi bir başlangıç ​​noktasıdır.

O sırada Pascal, Algol 68 ve PL / 1'den çok daha basitti. Fortran4'ün aksine yapı ve beyanı ve güçlü tip güvenliği zorladı (Fortran 77 orada işleri biraz geliştirdi, ancak yine de çok hızlı bir şekilde gevşek oynayabilirsiniz). COBOL ile karşılaştırıldığında program yazmak kısa, basit ve daha kolaydı. (Merhaba dünya 600 yerine 6 satır).

Kökeni ortaya çıktığında, Pascal'da karakter dizileri gibi şeyler vardı - dize kullanımı için olan buydu. Yıllar içinde işler düzeldi.

Bir Pascal geçmişini gerçekten araştırmak istiyorsanız, dikkate almanız gereken bazı noktalar:

  • Wirth'in orijinali (Standart Pascal)
  • Equipment Corp (DEC) tarafından Vax üzerindeki dahili uzantılar
  • UCSD p Sistemi (birçok makinede ancak özellikle Apple-2'de)
  • Turbo Pascal
  • Apollo Domain Pascal (Aegis olarak da adlandırılan Domain / OS işletim sistemini yazmak için kullanılır)
  • Nesneleri ve birimleri olan Turbo Pascal (sürüm 5.5 ve üstü. Düzenleme: yeni TP 5.5 OOP PDF dosyasını buldum )
  • Delphi

1980'lerde Pascal ve C arasında devasa bir sümüklüböcek vardı. Her iki kampta da büyük miktarda gelişme ve faaliyet yaşandı.

Sonuç olarak, Bliss-32, Algol ve PL / 1 gibi garip ve harika şeyler neredeyse ortadan kayboldu - ancak bunlardan gelen fikirler Pascal'a girdi.

DÜZENLEME: bazı özel özellikler kazandı karakter dizileri paketlenmiş olabilir, ama şimdi dize işleme olarak bildiğimiz şey istiyorsanız, kendiniz büyümeye ihtiyaç vardı.


IIRC packed array[1..n] of char;, örneğin Read (ln) ve Write (ln) için az miktarda özel kullanım vardı
Gerry

Evet, readln, writeln değişken sayıda karakterin girdi / çıktılarını işleyebilmeleri için biraz özeldi. 1980'lerin sonunda kötü ve günahkâr olmaları ve dil yapısını kırma konusunda değişken bir parametre kabul ettikleri için biraz toz vardı. Püristler bundan nefret ediyordu. Geri kalanımız onu çok fazla endişelenmeden kullandık.
quickly_now

Belki "diğer" Wirth dili Modula2'den modül / birim sistemleri. (Pascal standartlarına ulaşmak için ortaya çıkan çabalarla dolaylı olsa da, nihayetinde farklı sözdizimine rağmen Genişletilmiş Pascal standardını oluşturdu)
Marco van de Voort

5

Nesneye Dayalı uzantılar! Object Pascal, 90'lı yılların ortalarında Delphi'nin (1) piyasaya sürülmesiyle en büyük (resmi olmayan) standart sıçramaydı. Sadece bir tanesini seçmek zor, ama bir bütün olarak nesne modelinin tüm çekirdeği, dili modern duruma getirmeye yardımcı oldu. Ne yazık ki bugüne kadar tüm derleyicilerin kodlama simetrisi için uygun olacağı resmi bir tek birleşik standart haline getirilmemiştir.

Neyse ki Free Pascal proje geliştiricileri, hem Borland hem de Embarcadero tarafından Delphi'ye eklenen özellikleri oldukça ağırladı. RemObjects çok fazla değil ama en azından hey Delphi Prism altında Embarcadero ile bağları var, bu nedenle bir standarttan (dili daha .NET uyumlu hale getirmek için) herhangi bir sapma oldukça belgelenecektir.


8
Nesneler, Turbo Pascal 5.5 ile Pascal'a tanıtıldı
mcottle

1
prosedürler ve fonksiyonlar varsayılan olarak statiktir. virtualAnahtar kelimeleri alt sınıflar tarafından geçersiz kılmak için kullanmanız gerekiyordu.

1
Sanal Delphi'de ayrılmış bir sözcük değil. Delphi ayrılmış kelimelerin ve Prizma anahtar kelimelerinin listesini burada ve burada bulabilirsiniz .
David I

2
Nesneler Apple tarafından Pascal'a tanıtıldı. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster

2
@Carl - Klasik Mac'lerin Pascal'da programlandığını unutmuştum ve bunun Wirth tarafından birlikte oluşturulan Pascal'ın OO versiyonu olduğunu bilmiyordum.
mcottle

4

Pascal'ı uzun zaman önce MS-DOS ile kullanmaktan hatırladığım sadece bir veya iki şey:

Turbo Pascal 80'lerde aşağı yukarı bir çeşit IDE tanıttı (ve derleme performansı UCSD Pascal'a kıyasla büyük bir artış gösterdi

Bir şekilde 90'lı yılların ortalarında Borland, adı Turbo'dan Borland Pascal'a değiştirdi . İlk adım olarak, büyük projeleri ayrı derleme birimlerine bölmeye izin veren birimler tanıtıldı.

Daha sonra nesne yönelimli programlama da eklediler.


Turbo Pascal basit bir üründü. Borland Pascal montajcılar vb. Gibi bir çok şey vardı

2
Turbo Pascal'da (v4 IIRC) tanıtılan birimler. Bunlar, geçerli dcu dosyalarının öncüsü olan .tpu (turbo pascal unit) dosyalarına derlendi. Wirth'in Modula-2 dilindeki kavramlara dayandıklarına inanıyorum.
Gerry

1
ISTR UCSD p-Sisteminde de birimler vardı, ancak Turbo Pascal'ı önceden seçip seçmediklerini bilmiyorum.
TMN

İlginç bir şekilde, Atari 2600 için "TEMEL PROGRAMLAMA" kartuşu 1980'de bir CodeView ekranına şaşırtıcı bir şekilde benzeyen bir programlama ekranı sağladı; biri ekranın bir alanında programı (geçerli yürütme noktası vurgulanmış olarak), saniyedeki değişkenlerin değerlerini ve üçüncüsündeki "print" ifadelerinden çıktıları görüntüleyebilir. Ne yazık ki, programcı için kullanılabilir RAM miktarı o kadar kısıtlanmıştı ki, sadece "oyuncak" uygulamalarla sınırlı değildi - bir oyuncak bile değildi. Hala bir platform için ilginç bir teknik başarı ...
supercat

... 128 bayt RAM (ekran işaretçileri için gerekli olan 24 bayt dahil) ve 4K geliştirme sisteminin tamamı (karakter şekilleri dahil) ile uyumlu. Bu kısıtlamalar göz önüne alındığında, kullanıcıların 64 bayt RAM'in programlarını, değişkenlerini ve çıktılarını tutmasına izin vermek oldukça düzgün bir numaraydı. Çok kötü Atari, "SARA" çiplerini (RAM'i 128 bayttan 256'ya çıkaran) geliştirmeden önce Temel Programlama'yı yayınladı. Program için 128 bayt RAM artı değişkenler ve çıktı için 64 bayt kullanabilmek, her şey için 64 bayta sahip olmaktan çok daha iyi olurdu.
supercat

4

Pascal'daki temel evrim adımlarından biri, doğru tel kavramlarıydı. ISO 7185 ("Standart Pascal") bunlara sahip değildi, bu bir tür utanç verici. Bununla birlikte, tüm gerçek programcıların onlara ihtiyacı vardı ve uygulanabilir Pascal uygulamaları (Borland / Turbo Pascal gibi) bunları sağladı.


4

Delphi'nin Pascal dil yeniliklerine baktığımda, sınıflar için Özellik, Yöntem, Etkinlik (PME) modelini ve "Yayınlandı" bölümünü eklerdim. Bu, yerel kodu, kullanımı kolay ve bileşen yapımını genişletmeyi mümkün kıldı. Bileşenler Brad Cox'un Yazılım IC'lerine verdiği sözü yerine getirdi.



3

80'lerde ve 90'ların başında Pascal'ın birçok lezzeti arasındaki mücadele.

Sen vardı Elma Pascal , Microsoft Pascal ve QuickPascal ve Turbo Pascal .

Hepsi Nesne Pascal'ı şu ya da bu şekilde tanıttı (QuickPascal 1.0 ve Turbo Pascal 5.5 aynı zaman dilimi etrafında). Apple, platformları için ihtiyaç duydukları için Microsoft ve Borland, çünkü OO 'serin' hale geldi (QuickPascal kısa süre sonra öldü ve Turbo Pascal 6.0, Turbo Vision adı verilen makul bir OO çerçevesi ekledi ).

Rudy Velthuis forum gönderisinde bu konuda oldukça eksiksiz .

DOS 6.22 ve bir kaç DOS Pascal derleyicisi ile bir ISO görüntüsünü o dönemden indirebilirsiniz .


2

Arayüzlerin tanıtımı (Delphi 3 IIRC'de) modern bir nesne yönelimli dil yapmak için çok önemliydi.


Not anayüz değil OO o kendini içinde, ama bu polimorfizm en gerçek biçimlerinden biri olarak kabul edilir. COM ile aynı VMT formatını paylaştığından, COM ile birlikte çalışmayı çok daha kolay hale getirdi (insanların bunun iyi ya da kötü bir şey olduğu konusunda geniş fikirleri var <g>).
Jeroen Wiert Pluimers

2

Karışıma anonim yöntemler ve jenerikler ekleyeceğim.


1
Belki de Delphi'nin en son sürümlerine. Delphi 7'ye kadar kullandım, bu yüzden elbette anonim yöntemler veya jenerikler kullanmadım!
Frank Shearar


2

Benim için en büyük iki şey (C ... gibi diğer dillerden sonra) durum duyarsızlığı ve derleyici hızı idi.

Ve bundan sonra Fin klavyesi ile yazmanın daha kolay olması gerçeği, çünkü sürekli {} veya ulaşılması zor diğer tuşlara ihtiyacım yok ...

Delphi2'den beri gemideyim ama D1'i işte birkaç yıl kullandım ...


1

Dahl, Dijkstra ve Hoare tarafından "Yapısal Programlama" ile başlayın . Dijkstra'nın bölümü bugün bile esastır. Tony Hoare'nin veri yapılandırması bölümü PASCAL için temel oluşturdu. (Dahl'ın bölümü nihayetinde nesneye yönelik programlama haline geldiğinden bahsetti. Simula 67'de sınıf haline gelenleri anlattı.)

Wirth'in bir ALGOL-60 varyantı uygulaması olan ALGOL-W'ya bakın.

Ayrıca PL / I ve IBM 360 link editörü (linker) hakkında da bilgi sahibi olmanız gerekir. Genel bir harikaydı, küçük sorunuyla Ocak ayında Alaska Juneau'da pekmezden daha yavaş koştu. PASCAL, hız için tek geçişte derlenecek ve bağlanacak şekilde özel olarak tasarlanmıştır. (Dilin CDC 6400 junior süper bilgisayarda, çok belleğe sahip olmasına ve tek geçişli bir derleyiciyi pratik hale getirmesine yardımcı oldu.)

Aslında ETH Zürih'ten PASCAL'in iki büyük versiyonu vardı. Herkesin şu anda PASCAL olarak bildiği dil aslında ikinci versiyon olan PASCAL2 idi.

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.