Modula-3 - Modula-3

Modula-3
Modula-3.svg
Paradigmazorunlu, yapılandırılmış, prosedürel, modüler, eşzamanlı
AileWirth Modula
Tarafından tasarlandıLuca Cardelli James Donahue, Lucille Glassman, Mick Jordan; Bill Kalsow, Greg Nelson
GeliştiricilerARALIK
Olivetti
elego Software Solutions GmbH
İlk ortaya çıktı1988; 32 yıl önce (1988)
Kararlı sürüm
5.8.6 / 14 Temmuz 2010; 10 yıl önce (2010-07-14)
Önizleme sürümü
5.8.6 / 14 Temmuz 2010; 10 yıl önce (2010-07-14)
Yazma disiplinikuvvetli, statik, kasa ya da eğer güvensiz açıkça güvenli izole
PlatformIA-32, x86-64, PowerPC, SPARC
işletim sistemiÇapraz platform: FreeBSD, Linux, Darwin, SunOS
İnternet sitesiwww.modula3.org
Majör uygulamalar
SRC Modula-3, CM3,[1] PM3,[2] EZM3,[3] M3 / PC Klagenfurt[4]
Tarafından etkilenmiş
Algol, Öklid, Mesa, Modula-2, Modula-2 +, Oberon, Pascal
Etkilenen
C #, Java, Nim,[5] OCaml, Python[6]

Modula-3 bir Programlama dili yükseltilmiş bir sürümünün halefi olarak tasarlandı Modula-2 olarak bilinir Modula-2 +. Araştırma çevrelerinde etkili olsa da (gibi dillerin tasarımlarını etkiler) Java, C #, ve Python[7]) endüstride yaygın olarak benimsenmemiştir. Tarafından tasarlandı Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan (daha önce Olivetti Yazılım Teknolojisi Laboratuvarı), Bill Kalsow ve Greg Nelson -de Digital Equipment Corporation (ARALIK) Sistem Araştırma Merkezi (SRC) ve Olivetti 1980'lerin sonunda Araştırma Merkezi (ORC).

Modula-3'ün ana özellikleri, bir sistem programlama dilinin gücünü korurken basitlik ve güvenliktir. Modula-3, Pascal pratik gerçek dünya programlama için yeni yapılar sunarken, tip güvenliği geleneği. Özellikle Modula-3, aşağıdakiler için destek ekledi: genel programlama (benzer şablonlar ), çok iş parçacıklı, istisna işleme, çöp toplama, nesne yönelimli programlama, kısmi ifşa ve güvenli olmayan kodun açık olarak işaretlenmesi. Modula-3'ün tasarım hedefi, modernin en önemli özelliklerini uygulayan bir dildi. zorunlu programlama oldukça basit biçimlerde diller. Bu nedenle tehlikeli olduğu iddia edilen ve karmaşık özellikler çoklu miras ve operatör aşırı yükleme ihmal edildi.

Tarihsel gelişim

Modula-3 projesi Kasım 1986'da başladı. Maurice Wilkes yazdı Niklaus Wirth Modula'nın yeni bir sürümü için bazı fikirlerle. Wilkes, bu noktadan hemen önce DEC'te çalışıyordu ve İngiltere'ye dönerek Olivetti'nin Araştırma Stratejisi Kuruluna katıldı. Wirth çoktan Oberon, ancak Wilkes'in ekibinin Modula adı altında geliştirmeye devam etmesiyle hiçbir sorunu yoktu. Dil tanımı Ağustos 1988'de tamamlandı ve güncellenmiş versiyonu Ocak 1989'da tamamlandı. Kısa süre sonra DEC ve Olivetti'den derleyiciler ve ardından 3. taraf uygulamaları izledi.

Tasarımı, büyük ölçüde Modula-2 + SRC'de ve Acorn Bilgisayarlar Araştırma Merkezi (ARC, daha sonra ORC ne zaman Olivetti Edinilen Meşe palamudu) o zaman, işletim sisteminin işletim sisteminin Aralık Ateşböceği çok işlemcili VAX Acorn C için Acorn Derleyicisinin ve ARC'deki Modula Yürütme Kitaplığının (CAMEL) ARX işletim sistemi projesi KOL dayalı Meşe palamudu Arşimet bilgisayar aralığı yazılmıştır. Revize edilmiş Modula-3 Raporunda belirtildiği gibi, dil, aşağıdaki gibi diğer dillerden etkilenmiştir: Mesa, Sedir, Nesne Pascal, Oberon ve Öklid.[8]

1990'larda Modula-3, bir öğretim dili olarak önemli ölçüde geçerlilik kazandı, ancak endüstriyel kullanım için hiçbir zaman yaygın olarak benimsenmedi. Buna katkıda bulunan, önemli bir Modula-3 destekçisi olan DEC'in ölümü olabilir (özellikle de DEC satılmadan önce etkin bir şekilde sürdürmeyi bıraktığında) Compaq 1998 yılında). Her halükarda, Modula-3'ün sadeliğine ve gücüne rağmen, prosedürle ilgili çok az talep olduğu görülüyor. derlenmiş dil kısıtlı uygulaması ile nesne yönelimli programlama. Bir süreliğine reklam derleyici adlı CM3, DEC satılmadan önce işe alınan DEC SRC'den önce baş uygulayıcılardan biri tarafından tutulur Compaq, bir entegre geliştirme ortamı (IDE) adlı Reactor ve genişletilebilir Java sanal makinesi (lisanslı ikili kod ve kaynak kodu biçimleri ve Reactor ile oluşturulabilir) Critical Mass, Inc. tarafından sunuldu, ancak bu şirket 2000 yılında aktif faaliyetlerini durdurdu ve ürünlerinin bir kısmını elego Software Solutions GmbH'ye verdi. Modula-3 şu anda üniversitelerde çoğunlukla karşılaştırmalı programlama dili derslerinde öğretiliyor ve ders kitaplarının baskısı yok. Esasen Modula-3'ün tek kurumsal destekçisi, kaynakları Critical Mass'tan devralan ve o zamandan beri CM3 sisteminin kaynak ve ikili kodda birkaç sürümünü yapan elego'dur. Reactor IDE, yeni adıyla CM3-IDE ile birkaç yıl sonra piyasaya sürülen açık kaynak oldu. Mart 2002'de elego, başka bir aktif Modula-3 dağıtımı olan PM3'ün deposunu da devraldı ve o zamana kadar Ecole Polytechnique de Montréal ancak daha sonra HM3 üzerindeki çalışmalarla devam eden, yıllar sonra kullanımdan kaldırılana kadar geliştirildi.

Sözdizimi

Bir dilin yaygın bir örneği sözdizimi ... "Selam Dünya!" program.

 MODÜL Ana;  İTHALAT IO; BAŞLA   IO.Koymak("Merhaba Dünya  n") SON Ana.

Modula-3'teki tüm programlar en az bir modül dosyasına sahipken, çoğu aynı zamanda istemciler tarafından modülden verilere erişmek için kullanılan bir arayüz dosyası içerir. Diğer dillerde olduğu gibi, bir Modula-3 programı, Main.m3 adında bir dosya olabilen veya bir dosya çağırabilen bir Ana modülü dışa aktarmalıdır. İHRACAT Ana modülü dışa aktarmak için.

MODÜL Foo İHRACAT Ana

Modül dosya adlarının kaynak koddaki adlarla aynı olması önerilir. Farklılarsa, derleyici yalnızca bir uyarı verir.

Sözdizimindeki diğer kurallar, bir arabirimin dışa aktarılan türünün adlandırılmasını içerir. T, türler genellikle tam adlarıyla nitelendirildiğinden, bir tür T Foo adlı bir modülün içinde Ayak. Bu okunabilirliğe yardımcı olur. Bir başka benzer kural, genel bir nesneyi adlandırmaktır halka açık yukarıdaki OOP örneklerinde olduğu gibi.

Dil özellikleri

Modülerlik

Öncelikle ve en önemlisi, tüm derlenmiş birimler ya ARAYÜZ veya uygulama MODÜLs, bir tada veya diğerine. Anahtar kelimeden başlayarak arayüz derlenmiş birim ARAYÜZ, sabitleri, türleri, değişkenleri, istisnaları ve prosedürleri tanımlar. Anahtar kelime ile başlayan uygulama modülü MODÜL, kodu ve arabirimi uygulamak için gereken diğer sabitleri, türleri veya değişkenleri sağlar. Varsayılan olarak, bir uygulama modülü aynı ada sahip arabirimi uygulayacaktır, ancak bir modül açıkça İHRACAT aynı isimde olmayan bir modüle. Örneğin, ana program, Ana arayüz için bir uygulama modülünü dışa aktarır.

 MODÜL Selam Dünya İHRACAT Ana;  İTHALAT IO; BAŞLA   IO.Koymak("Merhaba Dünya  n") SON Selam Dünya.

Derlenmiş herhangi bir birim, İTHALAT diğer arayüzler, döngüsel içe aktarmalar yasak olsa da. Bu, MODULE uygulamasından içe aktarma yapılarak çözülebilir. İçe aktarılan modül içindeki varlıklar, yalnızca modül adı yerine, MODÜL İTHALAT Öğesi [, Öğe] * sözdizimi:

 MODÜL Selam Dünya İHRACAT Ana;  FROM IO İTHALAT Koymak; BAŞLA   Koymak("Merhaba Dünya  n") SON Selam Dünya.

Tipik olarak, biri sadece arayüzü içe aktarır ve arayüz içindeki öğelere erişmek için 'nokta' gösterimini kullanır (bir kayıt içindeki alanlara erişmeye benzer). Tipik bir kullanım, birini tanımlamaktır veri yapısı (kayıt veya nesne), destek prosedürleriyle birlikte arabirim başına. Burada ana tür 'T' adını alacak ve biri şu şekilde kullanılır: MyModule.T.

İçe aktarılan bir modül ile modül içindeki diğer varlık arasında bir isim çakışması olması durumunda, ayrılmış kelimeGİBİ olduğu gibi kullanılabilir IMPORT CollidingModule AS X;

Güvenli ve güvensiz

Derleyicinin artık sonuçların tutarlı olacağını garanti edemediği bazı beceriler güvensiz kabul edilir; örneğin, C dil. Anahtar kelime GÜVENLİ DEĞİL önüne eklenmiş ARAYÜZ veya MODÜL, derleyiciye dilin belirli düşük seviyeli özelliklerini etkinleştirmesini söylemek için kullanılabilir. Örneğin, güvenli olmayan bir işlem, tür sistemini atlayarak DÖNGÜ bir tamsayının bitlerini bir kayan noktaya kopyalamak için GERÇEK numara.

Güvenli olmayan bir modülü içe aktaran bir arabirim de güvenli olmamalıdır. Güvenli bir arayüz, güvenli olmayan bir uygulama modülü tarafından dışa aktarılabilir. Bu, harici cihazlarla arayüz oluştururken tipik kullanımdır. kütüphaneler, iki arabirimin oluşturulduğu yerde: biri güvenli değil, diğeri güvenli.

Jenerikler

Genel bir arayüz ve ilgili genel modülü, ARAYÜZ veya MODÜL anahtar kelime ile GENELve diğer arayüzleri resmi argümanlar olarak alın. Böylece (gibi C ++ şablonları ) soyut veri türlerini kolayca tanımlayabilir ve kullanabilir, ancak C ++, ayrıntı düzeyi modül düzeyindedir. Genel arayüze ve uygulama modüllerine argüman olarak bir arayüz geçirilir ve derleyici somut modüller üretir.

Örneğin, bir GenericStack tanımlayabilir, ardından bunu aşağıdaki gibi arabirimlerle başlatabilir: TamsayıElemveya RealElemveya hatta Nesnelere arabirimler, bu arabirimlerin her biri genel modüller tarafından ihtiyaç duyulan özellikleri tanımladığı sürece.

Çıplak tipler TAMveya GERÇEK kullanılamazlar çünkü bunlar modüller değildir ve jenerik sistem modülleri argüman olarak kullanmaya dayanır. Karşılaştırıldığında, bir C ++ şablonunda çıplak bir tür kullanılacaktır.

DOSYA: IntegerElem.i3

 ARAYÜZ TamsayıElem; CONST İsim = "Tamsayı"; TÜR T = TAM; PROSEDÜR Biçim(x: T): METİN; PROSEDÜR Tarama(Txt: METİN; VAR x: T): BOOLE; SON TamsayıElem.

DOSYA: GenericStack.ig

 GENEL ARAYÜZ GenericStack(Eleman); (* Buradaki Öğe.T, genel yığında saklanacak türdür. *) TÜR    T = halka açık NESNE;    halka açık = NESNE    YÖNTEMLER        içinde(): TStack;        biçim(): METİN;        boş(): BOOLE;        Miktar(): TAM;        it(karaağaç: Eleman.T);        pop(VAR elem: Eleman.T): BOOLE;    SON; SON GenericStack.

DOSYA: GenericStack.mg

 GENEL MODÜL GenericStack(Eleman); < ... genel uygulama detaylar... > PROSEDÜR Biçim(kendini: T): METİN = VAR    str: METİN; BAŞLA    str := Eleman.İsim & "Yığın {";    İÇİN k := 0 KİME kendini.n -1 YAPMAK        EĞER k > 0 SONRA str := str & ", "; SON;            str := str & Eleman.Biçim(kendini.arr[k]);    SON;    str := str & "};";    DÖNÜŞ str; SON Biçim; < ... Daha genel uygulama detaylar... > SON GenericStack.

DOSYA: IntegerStack.i3

ARAYÜZ Tamsayı Yığın = GenericStack(TamsayıElem) SON Tamsayı Yığın.

DOSYA: IntegerStack.m3

MODÜL Tamsayı Yığın = GenericStack(TamsayıElem) SON Tamsayı Yığın.

İzlenebilirlik

Diğer dillerin 'dahil etme' özelliğinden farklı olarak, herhangi bir tanımlayıcı, geldiği yere kadar izlenebilir. Derlenmiş bir birim, diğer derlenmiş birimlerden tanımlayıcıları bir İTHALAT Beyan. Numaralandırmalar bile bir kaydın bir alanına erişilirken kullanılan aynı 'nokta' gösterimini kullanır.

ARAYÜZ Bir;TÜR Renk = {Siyah, Kahverengi, Kırmızı, turuncu, Sarı, Yeşil, Mavi, Menekşe, Gri, Beyaz};SON Bir;
MODÜL B;İTHALAT Bir;FROM Bir İTHALAT Renk;VAR  bir renk: Bir.Renk;  (* Modül adını önek olarak kullanır *)  renk: Renk;  (* Önek olarak modül adına sahip değildir *)  anotherColor: Bir.Renk;BAŞLA  bir renk := Bir.Renk.Kahverengi;  renk := Renk.Kırmızı;  anotherColor := Renk.turuncu;  (* Turuncu kullanamazsınız *)SON B.

Dinamik ayırma

Modula-3, veri tahsisini destekler Çalışma süresi. Ayrılabilen iki tür bellek vardır, İZLENEN ve İZLENMEMİŞarasındaki fark, Çöp toplayıcı görebilir ya da göremez. YENİ() bu bellek sınıflarından herhangi birinin verilerini tahsis etmek için kullanılır. Bir GÜVENLİ DEĞİL modül ELDEN ÇIKARMAK işlenmemiş belleği boşaltmak için kullanılabilir.

Nesne odaklı

Nesneye yönelik programlama teknikleri Modula-3'te kullanılabilir, ancak bunların kullanımına gerek yoktur. Modula-3'te sağlanan diğer özelliklerin çoğu (modüller, jenerikler) genellikle nesne yöneliminin yerini alabilir.

Nesne desteği kasıtlı olarak en basit koşullarında tutulur. Bir nesne türü (diğer nesne yönelimli dillerde "sınıf" olarak adlandırılır), NESNE esasen aynı sözdizimine sahip olan bildirim KAYIT bildirim, bir nesne türü bir başvuru türü olmasına rağmen, Modula-3'teki RECORD'lar değildir (C'deki yapılara benzer). Dışa aktarılan türler genellikle T olarak adlandırılır ve yöntemleri ve verileri göstermek için ayrı bir "Genel" tür oluşturur. Örneğin:

ARAYÜZ Kişi;TÜR T <: halka açık;  halka açık = NESNE   YÖNTEMLER    getAge(): TAM;    içinde(isim: METİN; yaş: TAM): T;  SON;SON Kişi.

Bu bir arayüz tanımlar Kişi iki tür ile T, ve halka açıkiki yöntemle bir nesne olarak tanımlanan, getAge () ve içinde(). T alt türü olarak tanımlanır halka açık kullanımı ile <: Şebeke.

Yeni oluşturmak için Kişi T nesne, yerleşik prosedürü kullanın YENİ yöntemle içinde() gibi

VAR jim := YENİ(Kişi.T).içinde("Jim", 25);

Modula-3'ler ORTAYA ÇIKARTMAK construct, istemcilerden uygulama ayrıntılarını gizlemek için kavramsal olarak basit ve temiz ancak çok güçlü bir mekanizma sağlar; samimiyet. Kullanım ORTAYA ÇIKARTMAK tam uygulandığını göstermek için Kişi yukarıdan arayüz.

MODÜL Kişi;ORTAYA ÇIKARTMAK T = halka açık MARKALI NESNE   isim: METİN;   (* Bu iki değişken *)  yaş: TAM; (* özeldir. *)OVERRIDES  getAge := Yaş;  içinde := İçinde;SON;PROSEDÜR Yaş(kendini: T): TAM =  BAŞLA    DÖNÜŞ kendini.yaş;  SON Yaş;PROSEDÜR İçinde(kendini: T; isim: METİN; yaş: TAM): T =  BAŞLA    kendini.isim := isim;    kendini.yaş := yaş;  DÖNÜŞ kendini;  SON İçinde;BAŞLASON Kişi.

Kullanımına dikkat edin MARKALI "markalar", yapısal denklikten kaçınmak için onları benzersiz kılan anahtar kelime. MARKALI argüman olarak bir dizge de alabilir, ancak atlandığında sizin için benzersiz bir dizge oluşturulur.

Modula-3, bir modülden kesinlikle nitelikli olması için harici referanslar gerektiren birkaç programlama dilinden biridir. Yani, modülde bir referans Bir nesneye x modülden dışa aktarıldı B formu almalı B.x. Modula-3'te içe aktarmak imkansızdır dışa aktarılan tüm isimler bir modülden.

Dilin isim nitelendirme ve metodu geçersiz kılma konusundaki gereksinimleri nedeniyle, bir arayüze (herhangi bir arayüze) yeni bildirimler ekleyerek çalışan bir programı kırmak imkansızdır. Bu, büyük programların birçok programcı tarafından adlandırma çakışmaları endişesi olmadan aynı anda düzenlenmesini mümkün kılar; ve ayrıca, mevcut hiçbir programın olmayacağına dair kesin bilgi ile çekirdek dil kitaplıklarını düzenlemeyi mümkün kılar. kırık süreç içerisinde.

İstisnalar

İstisna işleme dayanmaktadır DENEYİN...DIŞINDA o zamandan beri var olan blok sistemi[kaynak belirtilmeli ] yaygınlaşır. Diğer dillerde benimsenmemiş bir özellik[kaynak belirtilmeli ]dikkate değer istisnalar dışında Delphi, Python[1], Scala[2] ve Visual Basic.NET, bu mu DIŞINDA yapı bir biçim tanımladı anahtar deyimi kendi EXCEPT maddesinde bir durum olarak her olası istisna ile. Modula-3 ayrıca bir DÖNGÜ...ÇIKIŞ...SON kadar döngüleri inşa et ÇIKIŞ oluşur, bir içindeki basit bir döngüye eşdeğer bir yapı DENEYİN...DIŞINDA fıkra.

Çok iş parçacıklı

Dil, çoklu iş parçacığı kullanımını ve iş parçacıkları arasında senkronizasyonu destekler. İçinde standart bir modül vardır. çalışma zamanı kitaplığı (m3core) çok iş parçacıklı uygulamaların kullanımını destekleyen Thread adlı. Modula-3 çalışma zamanı, çöp toplama gibi dahili görevler için ayrı bir iş parçacığı kullanabilir.

Yerleşik bir veri yapısı MUTEX birden çok iş parçacığını senkronize etmek ve veri yapılarını olası bozulma veya yarış koşullarıyla eş zamanlı erişimden korumak için kullanılır. KİLİT ifadesi, muteksin kilitli olduğu bir blok sunar. Bir MUTEX kod yürütme lokusunun bloktan çıkmasıyla örtüktür. MUTEX bir nesnedir ve bu nedenle ondan başka nesneler türetilebilir.

Örneğin, giriş çıkış Kitaplığın (G / Ç) bölümü libm3, okuyucular ve yazarlar (Rd.T ve Wr.T) MUTEX'ten türetilir ve tamponlar gibi herhangi bir dahili veriye erişmeden veya bunları değiştirmeden önce kendilerini kilitlerler.

Özet

Özet olarak, dil özellikleri:

Modula-3, özelliklerinin evrimi belgelenen nadir dillerden biridir.

İçinde Modula-3 ile Sistem Programlama, dil tasarımının dört temel noktası yoğun bir şekilde tartışılmaktadır. Bu konular şunlardır: yapısal ve ad denkliği, alt tipleme kuralları, genel modüller ve aşağıdaki gibi parametre modları SADECE OKU.

Standart kitaplık özellikleri

Bir trendi sürdürmek, C gerçek programları yazmak için gereken özelliklerin çoğu dil tanımının dışında bırakıldı ve bunun yerine bir standart kitaplık Ayarlamak. Aşağıdaki arabirimlerin çoğu,[9]

Aşağıdaki özellikleri sağlayan standart kitaplıklar. Bunlar standart arayüzler olarak adlandırılır ve dilde gereklidir (sağlanmalıdır).

  • Metin: Değişmez dize referansları üzerinde işlemler, adı verilir METİNs
  • Konu: Diş açma ile ilgili işlemler, dahil MUTEX, koşul değişkeni ve iş parçacığı duraklatma. İş parçacığı kitaplığı, önleyici iş parçacığı geçişi sağlar
  • Word: İşaretsiz tam sayılar (veya makine sözcükleri) üzerinde bitsel işlemler. Normalde doğrudan derleyici tarafından uygulanır
  • Kayan nokta arayüzleri

Mevcut uygulamalarda uygulanan bazı önerilen arayüzler ancak gerekli değildir

  • Lex: Numarayı ve diğer verileri ayrıştırmak için
  • Fmt: Yazdırma için çeşitli veri türlerini biçimlendirme
  • Pkl (veya Turşu): Nesne serileştirme çöp toplayıcı tarafından erişilebilen herhangi bir referans türü
  • Tablo: için genel modüller haritalar

C'de olduğu gibi, G / Ç aynı zamanda kütüphaneler aracılığıyla sağlanır, Modula-3'te Rd ve Wr. Rd (okuyucular) ve Wr (yazarlar) kütüphanelerinin nesneye yönelik tasarımı, Greg Nelson'ın kitabında ayrıntılı olarak ele alınmıştır. Modula-3'ün ilginç bir yönü, standart kitaplıkların çeşitli böcek türlerini içermediği resmi olarak doğrulanan birkaç programlama dilinden biri olmasıdır. Bu, Karaçam / Modula-3'ün himayesinde yapıldı (bkz. Karaçam ailesi )[10] ve Genişletilmiş statik kontrol[11] projeler DEC Sistemleri Araştırma Merkezi.

Uygulamalar

Birçok derleyici mevcuttur, çoğu açık kaynak.

  • DEC-SRC M3, orijinal.[12]
  • Olivetti Araştırma Merkezi (ORC) Orijinal olarak bir derleyici olan Modula-3 araç seti, şimdi Modula-3 programlarının sözdizimsel, sözcüksel ve anlamsal analizi için bir kitaplık olarak mevcuttur.[13]
  • Critical Mass CM3, DEC-SRC M3'ün farklı bir halefi
  • DEC-SRC M3'ün halefi olan Polytechnique Montreal Modula-3 PM3, şu anda CM3 ile birleşiyor
  • CVSup ile bağlantılı olarak geliştirilmiş, bağımsız, hafif ve kolay taşınabilir bir uygulama olan EzM3
  • HM3, PM3'ün pm3-1.1.15 sürümünün halefi, yerel diş açma desteği ile NPTL
  • CM3, Critical Mass CM3'ün halefi. Bu, güncel, bakımı yapılan ve geliştirilmiş tek uygulamadır. Sürümler, http://www.opencm3.net/releng/.

C veri yapılarının Modula-3'te eksik olan tek yönü birleşim tipi olduğundan, mevcut tüm Modula-3 uygulamaları iyi ikili kod C dili türü bildirimleriyle uyumluluk diziler ve yapılar.

Kitabın

Bu kitapların hiçbiri hala basılmamaktadır, ancak kullanılmış kopyalar elde edilebilir ve bazıları kısmen veya tamamen dijital hale getirilmiştir ve bunların bazı bölümleri, web'den araştırma raporları olarak elde edilebilen önceki veya arka sürümlere sahiptir.

  • Greg Nelson, ed., Modula-3 ile Sistem Programlama Nesneye yönelik sistem yazılım yapısı üzerine ilginç makaleler ve dilin son özelliklerine götüren tartışmanın dokümantasyonu ile Modula-3 dili hakkında kesin referans. Önceden bazıları var (bkz.[8] İkinci Bölüm için[14] dördüncü bölüm için,[15] beşinci bölüm için,[16] altıncı bölüm için) ve bazıları posterior olarak (bkz.[17] Birinci ve daha fazla güncellenmiş ikinci Bölüm için, dolayısıyla dil tanımının önceki her iki sürümü için[8] ve,[9] üçüncü bölüm için ve[18] sekiz bölümünün çoğunun önceki yayınlarından ayrı ayrı elde edilebilen yayın sürümlerinin yedinci bölümü için DEC Sistemleri Araştırma Merkezi (SRC) indirilecek araştırma raporları olarak.
  • Samuel P. Harbison, Modula-3 Kullanımı kolay ders kitabı.
  • Robert Sedgewick, Modula-3'te Algoritmalar
  • Laszlo Boszormenyi ve Carsten Weich, Modula-3'te Programlama: Tarzla Programlamaya Giriş
  • Renzo Orsini, Agostino Cortesi Modula-3'teki Programmare: introduzione allla programmazione imperativa e a oggetti dilin temel özelliklerini açıklayan bir İtalyanca kitap.

Modula-3 kullanan projeler

Modula-3 programlanan yazılım şunları içerir:

  • ÇEVİRMEK işletim sistemi
  • CVSup yazılım deposu senkronizasyon programı
  • Obliq Modula-3 ağ nesnelerinin nesneleri şeffaf bir şekilde yerel ağlar üzerinden geçirme yeteneğini kullanan dil, Modula-3 nesne yönelimli programlama paradigmasına dağıtılmış bir yetenek sağlar. Modula-3'e komut dosyası uzantısı şeklinde dağıtılmış uygulamalar, bilgisayar animasyonları ve web programlama uygulamaları oluşturmak için kullanılmıştır.

Diğer programlama dilleri üzerindeki etkiler

Modula-3 genel statü kazanmasa da, DEC-SRC M3 dağıtımının birkaç bölümü kazandı. Muhtemelen en etkili kısım, ağ protokolü de dahil olmak üzere Java'nın ilk Uzaktan Yöntem Çağırma (RMI) uygulamasının temelini oluşturan Ağ Nesneleri kitaplığıydı. Sadece Sun oradan ayrıldığında Ortak Nesne İsteği Aracı Mimarisi (CORBA) standardı IIOP tabanlı protokol düşürüldü. Java belgeleri çöp toplama uzak nesnelerin% 50'si Modula-3 Ağ Nesneleri için yapılan öncü çalışmayı ifade etmektedir.[19] Python'un sınıf uygulaması, C ++ ve Modula-3'te bulunan sınıf mekanizmasından da esinlenmiştir.[20]Ayrıca dil Nim Modula-3'ün bazı yönlerini kullanır, örneğin izlenen ve traksız işaretçiler.

Referanslar

  1. ^ "Kritik Kütle Modülü-3 (CM3)". Kritik Kütle Modülü-3. elego Software Solutions GmbH. Alındı 2020-03-21.
  2. ^ "Polytechnique Montréal Modula-3 (PM3): Nedir?". Polytechnique Montréal Modula-3. elego Software Solutions GmbH. Alındı 2020-03-21.
  3. ^ Polstra, John D. (9 Kasım 2006). "Ezm3: Daha Kolay Modula-3 Dağıtımı". CVSup.org. Arşivlenen orijinal 10 Nisan 2013. Alındı 2020-03-21.
  4. ^ Weich, Carsten. "M3 / PC Klagenfurt 96: MS-DOS için Modula-3 ortamı". Bilişim Bölümü. Klagenfurt Üniversitesi. Arşivlenen orijinal 20 Mayıs 2000. Alındı 2020-03-21.
  5. ^ Picheta, Dominik; Locurcio, Hugo. "Sıkça Sorulan Sorular". Alındı 2020-03-21.
  6. ^ van Rossum, Guido (Mayıs 1996). "Python Programlama: Önsöz (1. baskı)". Python.org. Alındı 2020-03-21.
  7. ^ "Tasarım ve Tarih SSS: Neden 'öz' yöntem tanımlarında ve çağrılarında açıkça kullanılmalıdır?". Python.org. 21 Mart 2020. Alındı 2020-03-21.
  8. ^ a b c Modula-3 raporu (revize edildi) Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, Greg Nelson. DEC Sistemleri Araştırma Merkezi (SRC) Araştırma Raporu 52 (Kasım 1989)
  9. ^ a b Bazı Faydalı Modula-3 Arayüzleri Jim Horning, Bill Kalsow, Paul McJones, Greg Nelson. DEC Sistemleri Araştırma Merkezi (SRC) Araştırma Raporu 113 (Aralık 1993)
  10. ^ LM3 Kevin D. Jones. DEC Sistemleri Araştırma Merkezi (SRC) Araştırma Raporu 72 (Haziran 1991)
  11. ^ Genişletilmiş Statik Kontrol David L. Detlefs, K. Rustan M. Leino, Greg Nelson, James B. Saxe. Compaq SRC Araştırma Raporu 159 (Aralık 1998)
  12. ^ SRC Modula-3 3.3[kalıcı ölü bağlantı ] Bill Kalsow ve Eric Muller. Digital Equipment Corporation (Ocak 1995)
  13. ^ Ürdün, Mick (1990). "Modula-3 için genişletilebilir bir programlama ortamı". SIGSOFT Yazılım. Müh. Notlar. 15 (6): 66–76. doi:10.1145/99278.99285. Alındı 2009-09-08.
  14. ^ İş Parçacıklarıyla Programlamaya Giriş Andrew D. Birrell. DEC Sistemleri Araştırma Merkezi (SRC) Araştırma Raporu 35 (Ocak 1989)
  15. ^ Çoklu İşlemci İçin Senkronizasyon İlkelleri: Biçimsel Bir Şartname A. D. Birrell, J. V. Guttag, J. J. Horning, R. Levin. DEC Sistemleri Araştırma Merkezi (SRC) Araştırma Raporu 20 (Ağustos 1987)
  16. ^ IO Akışları: Soyut Türler, Gerçek Programlar Mark R. Brown ve Greg Nelson. DEC Sistemleri Araştırma Merkezi (SRC) Araştırma Raporu 53 (Kasım 1989)
  17. ^ Modula-3 Referans Kılavuzu Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, Greg Nelson. DEC Sistemleri Araştırma Merkezi (SRC) (Şubat 1995)
  18. ^ Sehpa Eğitimi Mark S. Manasse ve Greg Nelson. DEC Sistemleri Araştırma Merkezi (SRC) Araştırma Raporu 69 (Mayıs 1992)
  19. ^ Uzak Nesnelerin Çöp Toplanması, Java SE 8 için Java Remote Method Invocation Documentation.
  20. ^ Sınıflar, Resmi Python Belgeleri.

Dış bağlantılar