Modül-2 - Modula-2
paradigmalar | zorunlu , yapılandırılmış , modüler , veri ve prosedür gizleme , eşzamanlı |
---|---|
Aile | Wirth Modülü |
Tarafından tasarlandı | niklaus wirth |
İlk ortaya çıktı | 1978 |
Yazma disiplini | Statik , güçlü , güvenli |
Kapsam | Sözcüksel (statik) |
platformu | Lilith ( AMD 2901 ) |
işletim sistemi | Çapraz platform |
Dosya adı uzantıları | .mod, .m2, .def, .MOD, .DEF, .mi, .md |
İnternet sitesi | www |
Başlıca uygulamalar | |
Niklaus Wirth GNU Modula-2 ADW Modula-2 tarafından yazılmış ETH derleyicisi | |
lehçeler | |
PIM2, PIM3, PIM4, ISO | |
Tarafından etkilenmiş | |
Modula , Mesa , Pascal , ALGOL W , Öklid | |
Etkilenen | |
Modula-3 , Oberon , Ada , Fortran 90 , Lua , Seed7 , Zonnon , Modula-GM |
Modula-2 , 1977 ve 1985 yılları arasında Niklaus Wirth tarafından ETH Zürih'te geliştirilen yapılandırılmış, prosedürel bir programlama dilidir . Bunun için dil olarak oluşturulduğu işletim sistemine ve uygulama yazılımları arasında Lilith kişisel iş istasyonu . Daha sonra Lilith bağlamı dışında programlama için kullanıldı.
Wirth, Modula-2'yi daha önceki programlama dilleri Pascal ve Modula'nın halefi olarak gördü . Ana kavramlar şunlardır:
- Modül, ayrı derleme için bir derleme birimi olarak
- Eşzamanlı süreçler için temel yapı taşı olarak eşyordam
- Makineye özel verilere erişime izin veren türler ve prosedürler
Dil tasarım etkilendi Mesa dil ve Xerox Alto hem, Xerox PARC onun 1976 döneminde Wirth testere, İnziva yıl orada. Bilgisayar dergisi Byte , Ağustos 1984 sayısını dile ve çevresindeki çevreye ayırdı.
Modula-2'yi Modula-3 ve daha sonra Oberon dil serisi izledi .
Açıklama
Modula-2, sistem programlaması yapmak için yeterince esnek , ancak çok daha geniş bir uygulama ile genel amaçlı bir prosedür dilidir . Özellikle, ayrı derleme ve veri soyutlamayı basit bir şekilde desteklemek için tasarlanmıştır. Sözdiziminin çoğu, Wirth'in daha eski ve daha iyi bilinen dili Pascal'a dayanmaktadır . Modula-2, bazı öğeler ve sözdizimsel belirsizlikler kaldırılmış ve bir modül kavramının önemli eklenmesi ve çoklu programlama için doğrudan dil desteği ile Pascal'a geniş ölçüde benzer olacak şekilde tasarlanmıştır .
Dil, tek geçişli derleyicilerin kullanımına izin verir . Gutknecht ve Wirth'in böyle bir derleyicisi , önceki çok geçişli derleyicilerden yaklaşık dört kat daha hızlıydı .
"Merhaba dünya" programının kaynak koduna bir örnek:
MODULE Hello;
FROM STextIO IMPORT WriteString;
BEGIN
WriteString("Hello World!")
END Hello.
Bir Modula-2 modülü , bir dizi ilgili alt programı ve veri yapısını kapsüllemek ve bunların programın diğer bölümlerinden görünürlüğünü kısıtlamak için kullanılabilir. Modül tasarımı, Modula-2'nin veri soyutlama özelliğini çok temiz bir şekilde uyguladı. Modula-2 programları, her biri iki bölümden oluşan modüllerden oluşur: bir tanım modülü , yalnızca alt sistemin dışa aktarılan (diğer modüller tarafından görülebilen) kısımlarını içeren arayüz kısmı ve bir uygulama modülü , modülün içindeki çalışma kodunu içerir.
Dilin sıkı kapsam kontrolü vardır. Bir modülün kapsamı, aşılmaz bir duvar olarak düşünülebilir: Standart tanımlayıcılar dışında, açıkça içe aktarılmadığı sürece, modülün içinde dışarıdan hiçbir nesne görünmez; açıkça dışa aktarılmadığı sürece hiçbir dahili modül nesnesi dışarıdan görünmez.
M1 modülünün tanımlayıcılarını açık bir dışa aktarma listesinde numaralandırarak a, b, c ve P nesnelerini dışa aktardığını varsayalım.
DEFINITION MODULE M1;
EXPORT QUALIFIED a, b, c, P;
...
Daha sonra M1 modülündeki a, b,c ve P nesneleri artık M1 modülü dışında M1.a, M1.b, M1.c ve M1.P olarak bilinir hale gelir. Dışarıya nitelikli bir şekilde ihraç edilirler (M1 modülünün global olduğu varsayılır). Dışa aktaran modülün adı, yani M1, niteleyici olarak ve ardından nesnenin adı olarak kullanılır.
M2 modülünün aşağıdaki IMPORT bildirimini içerdiğini varsayalım
MODULE M2;
IMPORT M1;
...
O zaman bu, M1 modülü tarafından onu çevreleyen programın dışına aktarılan nesnelerin artık M2 modülü içinde kullanılabileceği anlamına gelir. Nitelikli bir şekilde atıfta bulunulur, bu nedenle: M1.a, M1.b, M1.c ve M1.P. Örnek:
...
M1.a := 0;
M1.c := M1.P(M1.a + M1.b);
...
Nitelikli dışa aktarma, ad çakışmalarını önler: Örneğin, başka bir M3 modülü P adlı bir nesneyi de dışa aktarırsa, M1.P, M3.P'den farklı olduğundan, iki nesneyi yine de ayırt edebiliriz. Nitelikli dışa aktarma sayesinde, her iki nesnenin de dışa aktarma modülleri M1 ve M3 içinde P olarak adlandırılması önemli değildir.
Modula-2 programcıları tarafından yaygın olarak kullanılan alternatif bir yöntem mevcuttur. M4 modülünün şu şekilde formüle edildiğini varsayalım:
MODULE M4;
FROM M1 IMPORT a, b, c, P;
O zaman bu, M1 modülü tarafından dışa aktarılan nesnelerin tekrar M4 modülü içinde kullanılabileceği anlamına gelir, ancak şimdi yalnızca dışa aktarılan tanımlayıcılara niteliksiz bir şekilde referanslar yoluyla, böylece : a, b, c ve P. Örnek:
...
a := 0;
c := P(a + b);
...
Bu niteliksiz içe aktarma yöntemi, dışa aktarma modülünün dışındaki değişkenlerin ve diğer nesnelerin, dışa aktarma modülünün içindekiyle tamamen aynı basit, yani niteliksiz şekilde kullanılmasına izin verir . Tüm modülleri çevreleyen duvarlar, buna açıkça izin verilen tüm nesneler için artık alakasız hale geldi. Elbette niteliksiz içe aktarma, yalnızca ad çakışması olmadığında kullanılabilir.
Bu ihracat ve ithalat kuralları gereksiz yere kısıtlayıcı ve ayrıntılı görünebilir. Ancak, nesneleri yalnızca istenmeyen erişime karşı korumakla kalmazlar, aynı zamanda bir programdaki her tanımlayıcının tanımının otomatik çapraz referansını sağlama gibi hoş bir yan etkiye de sahiptirler: tanımlayıcı bir modül adıyla niteleniyorsa, tanım şuradan gelir: o modül. Aksi takdirde, niteliksiz olarak gerçekleşirse, geriye doğru arama yapın ve bu tanımlayıcının bir bildirimi veya geldiği modülü adlandıran bir IMPORT ifadesinde ortaya çıkmasıyla karşılaşacaksınız. Bu özellik, birçok modül içeren büyük programları anlamaya çalışırken çok kullanışlı hale gelir.
Dil (sınırlı) tek işlemcili eşzamanlılık (sağlar monitör , değiş tokuş eden kavramlar (mutlak adresleri, bit manipülasyon, ve bunları kontrol açık transferi) ve donanım erişim için kesme ). Nominal tip bir sistem kullanır .
lehçeler
Modula-2'nin iki ana lehçesi vardır. Birincisi, Niklaus Wirth'in Modula-2'de Programlama kitabından alan PIM'dir . PIM'in üç ana sürümü vardı: ikinci, üçüncü (düzeltilmiş) ve dördüncü. Her biri dilin küçük varyantlarını tanımlar. İkinci önemli lehçesi olan ISO tarafından standardizasyon çaba için adlandırılmış, Uluslararası Standardizasyon Örgütü . İşte aralarındaki farklardan birkaçı.
-
PIM2 (1983)
EXPORT
Tanım modüllerinde gerekli açık madde.- İşlevin
SIZE
modülden içe aktarılması gerekiyorSYSTEM
-
PIM3 (1985)
EXPORT
Bir tanım modülündeki her şeyin o modülün arayüzünü tanımladığı gözleminin ardından tanım modüllerinden yan tümce kaldırıldı , bu nedenleEXPORT
yan tümce gereksizdi.- İşlev
SIZE
yaygındır (içe aktarma olmadan herhangi bir kapsamda görülebilir)
-
PIM4 (1988)
MOD
İşlenenler negatif olduğunda operatörün davranışı belirtilir .ARRAY OF CHAR
Dize tam olarak dizisine uysa bile, tüm dizelerin ASCII NUL tarafından sonlandırılmasını gerektiriyordu.
-
ISO (1996, 1998)
- ISO Modula-2, PIM Modula-2'deki belirsizliklerin çoğunu çözdü. Veri türlerini
COMPLEX
veLONGCOMPLEX
istisnaları, modül sonlandırma (FINALLY
madde) ve eksiksiz bir standart giriş/çıkış (G/Ç) kitaplığı ekledi . Birçok küçük farklılık ve açıklama var.
- ISO Modula-2, PIM Modula-2'deki belirsizliklerin çoğunu çözdü. Veri türlerini
süper setler
Modula-2'nin belirli uygulama alanları için dil uzantılarına sahip birkaç üst kümesi vardır:
-
PIM süper setleri
- Canterbury Modula-2 , Oberon benzeri genişletilebilir kayıtlarla genişletildi [Bu geri çekildi ve artık hiçbir yerde mevcut değil]
- Modula-2+ , önleyici iş parçacıkları ve istisnalarla genişletildi
- Modula-2* , paralel uzatma
- Modula-P , başka bir paralel uzantı
- Modula–Prolog, bir Prolog katmanı ekler
- Modula/R, ilişkisel veritabanı uzantıları ekler
- Modula-GM, gömülü sistem uzantıları ekler
-
ISO süper setleri
- ISO10514-2, nesne yönelimli bir programlama katmanı ekler
- ISO10514-3, genel bir programlama (jenerik) katmanı ekler
-
IEC süper setleri
- Mod51 , gömülü geliştirme için IEC1131 yapıları ile genişletildi
türevler
Modula-2'ye çok benzeyen ancak kendi başlarına yeni diller olan birkaç türev dil vardır. Çoğu, farklı amaçları olan ve kendi güçlü ve zayıf yönleri olan farklı dillerdir:
- DEC ve Olivetti'ye taşınan eski Xerox çalışanlarından oluşan bir ekip tarafından geliştirilen Modula-3
- ETH Zürih'te geliştirilen Oberon , System Oberon için çevrimiçi olarak mevcuttur .
- Oberon-2 , OO uzantılı Oberon
- Aktif Oberon , yine bir başka nesne yönelimli Uzatma Oberon altındadır geliştirilen ETH ana hedefi ile çok işlemcili ve çok çekirdekli sistemlerde paralel programlama desteklemek için.
- Parallaxis, makineden bağımsız veri-paralel programlama dili
- Umbriel, Pat Terry tarafından bir öğretim dili olarak geliştirildi
- YAFL, Darius Blasband tarafından bir araştırma dili
Diğer birçok güncel programlama dili Modula-2'nin özelliklerini benimsemiştir.
dil öğeleri
Ayrılmış kelimeler
PIM [2,3,4] 40 ayrılmış kelimeyi tanımlar :
AND ELSIF LOOP REPEAT ARRAY END MOD RETURN BEGIN EXIT MODULE SET BY EXPORT NOT THEN CASE FOR OF TO CONST FROM OR TYPE DEFINITION IF POINTER UNTIL DIV IMPLEMENTATION PROCEDURE VAR DO IMPORT QUALIFIED WHILE ELSE IN RECORD WITH
Yerleşik tanımlayıcılar
PIM [3,4], 29 yerleşik tanımlayıcıyı tanımlar :
ABS EXCL LONGINT REAL BITSET FALSE LONGREAL SIZE BOOLEAN FLOAT MAX TRUE CAP HALT MIN TRUNC CARDINAL HIGH NIL VAL CHAR INC ODD CHR INCL ORD DEC INTEGER PROC
Gömülü sistem kullanımı
Modula-2, birçok gömülü sistemi programlamak için kullanılır .
Cambridge Modülü-2
Cambridge Mikroişlemci Sistemleri tarafından geliştirilen Cambridge Modula-2, gömülü geliştirme için dil uzantılarına sahip bir PIM4 alt kümesine dayanmaktadır. Derleyici DOS üzerinde çalışır ve bir MINOS işletim sistemi çalıştıran Motorola 68000 serisi (M68k) tabanlı gömülü mikro denetleyiciler için kod üretir .
Mod51
Mandeno Granville Electronics'in Mod51'i, Modula-2 ile yakından ilişkili programlanabilir mantık denetleyicileri (PLC) için bir endüstri standardı olan IEC1131'i takip eden gömülü geliştirme için dil uzantılarına sahip ISO Modula-2'ye dayanmaktadır . Mod51 derleyicisi, 80C51 tabanlı mikro denetleyiciler için bağımsız kod üretir.
Modül-GM
Daha sonra GM Hughes Electronics'in bir yan kuruluşu olan Delco Electronics , 1985'ten başlayarak gömülü kontrol sistemleri için Modula-2'nin bir versiyonunu geliştirdi. Delco buna Modula-GM adını verdi. Delco'nun motor kontrol ünitelerindeki (ECU'lar) gömülü sistemler için makine kodunu (dili) değiştirmek için kullanılan ilk üst düzey programlama diliydi. Bu önemliydi çünkü Delco 1988'de GM için günde 28.000'den fazla ECU üretiyordu. Bu, o zaman dünyanın en büyük ECU üreticisiydi. Modula-GM'nin yerleşik bir denetleyicide ilk deneysel kullanımı , Motorola 68xxx mikroişlemcisine dayanan 1985 Kilitlenme Önleyici Fren Sistemi Kontrol Cihazı ve 1993'te Champ Car World Series Championship Auto Racing Teams (CART) tarafından kullanılan Gen-4 ECU'daydı. ve Indy Racing League (IRL) ekipleri. Modula-GM'nin ilk üretim kullanımı, GM Powertrain'in Vortec motorlarını yönetmek için kullanılan 1990 model yılı araç kontrol modülü (VCM) ile başlayan GM kamyonlarında kullanımıydı . Modula-GM, 1997-2005 model yılı Buick Park Avenue'de kullanılan GM'nin 90° Buick V6 motor ailesi 3800 Serisi II için tüm ECU'larda da kullanıldı . Modula-GM derleyicileri ve ilgili yazılım yönetim araçları, Intermetrics'ten Delco tarafından sağlandı .
Modula-2, 1986'da diğer alternatif dil seçeneklerine göre birçok güçlü yanı nedeniyle Delco'nun üst düzey dilinin temeli olarak seçildi. Delco Electronics, 1995 yılında GM'den (diğer bileşen bölümleriyle birlikte) Delphi Automotive Systems'i oluşturmak üzere ayrıldıktan sonra , küresel kaynak kullanımı tescilli olmayan bir üst düzey yazılım dilinin kullanılmasını gerektirmiştir. Artık Delphi'de geliştirilen ECU gömülü yazılımı, C dili için ticari derleyicilerle derlenmektedir .
Amerika Birleşik Devletleri Küresel Konumlandırma Sistemine (GPS) benzer şekilde Rus radyonavigasyon-uydu hizmet çerçevesi GLONASS'ın uyduları Modula-2'de programlanmıştır.
derleyiciler
- Amsterdam Derleyici Kiti (ACK) Modula-2 – MINIX için ; ücretsiz yazılım
- ADW Modula-2 – Windows için, ISO uyumlu, ISO/IEC 10514-1, ISO/IEC 10514-2 (OO uzantısı), ISO/IEC 10514-3 (Genel uzantı); ücretsiz yazılım
- Aglet Modula-2 – PowerPC için AmigaOS 4.0 için ; ücretsiz yazılım
- Donanımlı Yazılım Araçları (FST) Modula-2 – DOS için; ücretsiz yazılım
- Gardens Point Modula-2 (GPM) – BSD, Linux, OS/2, Solaris için ; ISO uyumlu; 30 Temmuz 2014 itibariyle ücretsiz yazılım
- Gardens Point Modula-2 (GPM/CLR) – .NET Framework için ; ücretsiz yazılım
- GNU Modula-2 – GCC platformları için, sürüm 1.0, 11 Aralık 2010'da yayınlandı; uyumluluk: PIM2, PIM3, PIM4, ISO; özgür yazılım , GNU Genel Kamu Lisansı (GPL)
- M2Amiga – Amiga için ; ücretsiz yazılım
- M2M – N. Wirth ve ETH Zurich'ten ortak çalışanlar tarafından, çapraz platform, sanal makine için M kodu oluşturur ; ücretsiz yazılım
- MacMETH – N. Wirth ve Macintosh için ETH Zürih'ten ortak çalışanlar tarafından, yalnızca Classic; ücretsiz yazılım
- Mod51 – Intel 80x51 mikro denetleyici ailesi için, ISO uyumlu, IEC1132 uzantıları; tescilli yazılım
- Megamax Modula-2 – yalnızca Almanca belgelerle Atari ST için; ücretsiz yazılım
- Modula-2 R10 – bu Modula için referans derleyici; açık kaynak, meslektaş incelemesi
- ModulaWare – OpenVMS için ( VAX ve Alpha ), ISO uyumlu; tescilli yazılım
- ORCA/Modula-2 – Apple Programmer's Workshop için The Byte Works tarafından Apple IIGS için
- p1 Modula-2 – Macintosh , Classic ve macOS için ( yalnızca PowerPC ve Carbon (API) ), ISO uyumlu; tescilli yazılım
- MOCKA – çeşitli platformlar için, PIM uyumlu; ticari, ücretsiz Linux/BSD sürümleri
- TDI Modula-2 – Atari ST için , TDI Software tarafından
- Terra M2VMS – OpenVMS için ( VAX ve Alpha ), PIM uyumlu; tescilli yazılım
- m2c, Ulm Modula-2 Sistemi – Solaris için (Sun SPARC ve Motorola 68k ); özgür yazılım, GNU Genel Kamu Lisansı (GPL)
- XDS – ISO uyumlu, TopSpeed uyumlu kitaplık: x86 için yerel XDS- x86 (Windows ve Linux); Windows ve Linux için XDS-C (16 ve 32 bit sürümleri), C'yi hedefler ( K&R & ANSI ); ücretsiz yazılım
Turbo Modül-2
Turbo Modula-2, Borland tarafından geliştirilen, ancak yayınlanmayan MS-DOS için bir derleyici ve entegre bir geliştirme ortamıydı . Borland kurucu ortağı Niels Jensen'i içeren Jensen ve Partners, yayınlanmamış kod tabanını satın aldı ve onu TopSpeed Modula-2'ye dönüştürdü. Sonunda, şu anda SoftVelocity'nin sahibi olduğu ve hala Modula-2 derleyicisini Clarion ürün hattının bir parçası olarak sunan Clarion'a satıldı .
Turbo Modula-2'nin bir Zilog Z80 CP/M versiyonu, Borland lisansı altında Echelon tarafından kısa süreliğine pazarlandı. Hitachi HD64180 için tamamlayıcı bir sürüm, Micromint tarafından SB-180 tek kartlı bilgisayarları için bir geliştirme aracı olarak satıldı.
IBM Modül-2
IBM, hem ran dahili kullanım için Modula-2 derleyici vardı OS / 2 ve AIX ve IBM'in birinci sınıf destek vardı E2 editörü. IBM Modula-2, OS/400 Dikey Lisanslı Dahili Kodunun (etkili olarak OS/400'ün çekirdeği) bölümleri için kullanıldı. OS/400, IBM RS64 işlemci ailesine taşındığında bu kod C++ ile değiştirildi . Gömülü sistem ürünlerinde kullanılmış olabilecek bir Motorola 68000 arka ucu da mevcuttu.
İşletim sistemleri
Modula-2, bazı işletim sistemlerini (OS'ler) programlamak için kullanılır . Modula-2 modül yapısı ve desteği, doğrudan ilgili iki işletim sisteminde kullanılır.
Lilith iş istasyonu için Medos-2 adlı işletim sistemi, Wirth'in tavsiyesi ile Svend Erik Knudsen tarafından ETH Zürih'te geliştirildi. Modula-2 modüllerinden oluşturulmuş tek kullanıcılı, nesne yönelimli bir işletim sistemidir .
Kronos iş istasyonu için Excelsior adlı işletim sistemi , Sovyetler Birliği Bilimler Akademisi , Sibirya şubesi, Novosibirsk Bilgi İşlem Merkezi, Modüler Asenkron Geliştirilebilir Sistemler (MARS) projesi, Kronos Araştırma Grubu (KRG) tarafından geliştirildi. Modula-2 modüllerine dayalı tek kullanıcılı bir sistemdir.
Kitabın
- Wirth, Niklaus (1988). Modula-2'de Programlama (4. baskı). Berlin Heidelberg : Springer-Verlag . doi : 10.1007/978-3-642-83565-0 . ISBN'si 978-0-387-96051-7.
- Kral, KN (1 Ocak 1988). Modula-2: Eksiksiz Bir Kılavuz . Burlington, Massachusetts : Jones ve Bartlett Yayıncılar. ISBN'si 978-0669110913.
- Sutcliffe, Richard J. (2004-2005). Modula-2: Veri ve Programlama Yapıları için Soyutlamalar . Arjay Kitapları. ISBN'si 978-0-669-11091-3. ISO standardı Modula-2'yi kullanır.
- Gleaves, Richard (1984). Pascal Programcılar için Modula-2 . Profesyonel Hesaplama Üzerine Springer Kitapları (1. baskı). İsviçre: Springer Doğa. doi : 10.1007/978-1-4613-8531-8 . ISBN'si 978-0-387-96051-7.
- Cooper, Doug (1 Eylül 1990). Aman! Modula-2: Programlamaya Giriş . New York , New York : WW Norton & Company . ISBN'si 978-0393960099.
Referanslar
Dış bağlantılar
Bu makale, 1 Kasım 2008'den önce Ücretsiz Çevrimiçi Hesaplama Sözlüğü'nden alınan ve GFDL , sürüm 1.3 veya sonraki sürümlerin "yeniden lisanslama" koşulları altında dahil edilen materyale dayanmaktadır .