Кіріспе

Modula 3 – Modula 2+ деп аталатын Modula 2 тілінің жаңартылған нұсқасының ізбасары ретінде жасалған бағдарламалау тілі. Ол зерттеу салаларында елеулі әсер еткенімен (Java, C#, Python және Nim сияқты тілдердің дизайнына ықпал еткен), өнеркәсіпте кеңінен қолданылмады. Оны 1980-ші жылдардың соңында Лука Карделли, Джеймс Донахью, Люсиль Глассман, Мик Джордан (бұрын Olivetti Software Technology Laboratory-де жұмыс істеген), Билл Калсоу және Грег Нельсон Digital Equipment Corporation (DEC) Systems Research Center (SRC) және Olivetti Research Center (ORC) орталықтарында жасаған. Modula 3 тілінің негізгі ерекшеліктері – модульділік, қарапайымдық және қауіпсіздік, сонымен бірге жүйелік бағдарламалау тілінің мүмкіндіктерін сақтайды. Modula 3 Паскаль тілінің типтік қауіпсіздік дәстүрін жалғастыруды мақсат етті, сонымен қатар нақты қолдану үшін жаңа құрылымдарды енгізді. Атап айтқанда, Modula 3 жалпы бағдарламалауды (шаблондарға ұқсас), көп жіптілікті, қателерді өңдеуді, қоқыс жинауды, объектіге бағытталған бағдарламалауды, ішінара ашуды және қауіпсіз емес кодты нақты көрсетуді қолдайды. Modula 3 тілін жобалаудың мақсаты – қазіргі заманғы императивті бағдарламалау тілдерінің ең маңызды мүмкіндіктерін қарапайым түрінде іске асыратын тіл жасау болды. Сондықтан, қауіпті және күрделірек сипаттамалар, мысалы, көптеген мұрагерлік және операторларды жүктеу мүмкіндігі алынып тасталды.

Тарихи дамуы

Modula 3 жобасы 1986 жылғы қарашада Морис Уилкс Niklaus Wirth-ке Modula-ның жаңа нұсқасы туралы бірнеше идеяларын жазғанда басталды. Уилкс осыған дейін DEC-те жұмыс істеп, Англияға оралғаннан кейін Olivetti-дің ғылыми-зерттеу стратегиялық кеңесіне қосылды. Вирт бұл кезде Oberon-ға көшкен еді, бірақ Уилкс командасының Modula атауымен әзірлеуді жалғастыруына кедергі жасамады. Тілдің сипаттамасы 1988 жылғы тамызда, ал жаңартылған нұсқасы 1989 жылғы қаңтарда аяқталды. Содан кейін DEC және Olivetti-ден компиляторлар, одан әрі үшінші тараптардың енгізулері пайда болды. Оның дизайнына сол кезде SRC-де және Acorn Computers Research Center-де (ARC, кейін Olivetti Acorn-ды сатып алғаннан кейін ORC) қолданылып келген Modula 2+ тіліне қатысты жұмыстардың үлкен әсері болды. Бұл DEC Firefly көппроцессорлық VAX жұмыс станциясының операциялық жүйесін жазу үшін қолданылған тіл болды, сондай-ақ ARM негізіндегі Acorn Archimedes компьютерлерінің ARX операциялық жүйесі жобасы үшін ARC-дегі Acorn C және Modula Execution Library (CAMEL) үшін Acorn компиляторы да осы тілде жазылған. Modula 3 есебінде айтылғандай, тілге Mesa, Cedar, Object Pascal, Oberon және Euclid сияқты басқа тілдер де әсер еткен. 1990 жылдары Modula 3 оқыту тілі ретінде кеңінен танымал болды, бірақ өнеркәсіптік қолдануда кеңінен қолданылмады. Мұның себебі Modula 3-тің маңызды қолдаушысы болған DEC компаниясының құлдырауы болуы мүмкін (әсіресе 1998 жылы Compaq компаниясына сатылар алдында оны тиімді түрде қолдауды тоқтатуы). Дегенмен, Modula 3-тің қарапайымдылығы мен қуатына қарамастан, объектіге бағытталған бағдарламалаудың шектеулі енгізілуімен процедуралық компиляцияланған тілге сұраныс аз болған сияқты. Бір кезде CM3 деп аталған коммерциялық компилятор, DEC Compaq-қа сатылар алдында DEC SRC-де жұмыс істеген бас дамытушылардың бірімен ұсталды, Reactor деп аталған интеграцияланған даму ортасы (IDE) және кеңейтілген Java виртуалды машинасы (бинарлық код пен бастапқы код форматтарында лицензияланған және Reactor арқылы құрастырылатын) Critical Mass, Inc. компаниясымен ұсынылды, бірақ бұл компания 2000 жылы белсенді қызметін тоқтатты және өнімдерінің бастапқы кодын Software Solutions GmbH компаниясына берді. Қазіргі уақытта Modula 3 университеттерде көбінесе салыстырмалы бағдарламалау тілдері курстарында оқытылады, ал оқулықтары басылымнан түсірілген. Негізінен Modula 3-тің корпоративтік қолдаушысы – Critical Mass компаниясынан кодты мұра еткен және содан бері CM3 жүйесінің бірнеше нұсқасын бастапқы және бинарлық кодта шығарған компания. Reactor IDE бірнеше жылдан кейін ашық код ретінде CM3 IDE деген жаңа атаумен жарияланды. 2002 жылғы наурыз айында сонымен қатар, тағы бір белсенді Modula 3 дистрибутивінің репозиторийін, PM3-ті алды, ол бұрын Монреаль политехникалық мектебінде сақталған, бірақ кейіннен HM3 бойынша жұмыс жалғасты, ол жылдар бойы жетілдірілді және ескіргенше қолданылды.

Қауіпсіз және қауіпсіз емес

Кейбір мүмкіндіктер қауіпсіз деп есептеледі, онда компилятор нәтижелердің үнемі бірдей болатынына кепілдік бере алмайды; мысалы, C тілімен байланыс жасағанда. `UNSAFE` кілт сөзін `INTERFACE` немесе `MODULE` сөздерінің алдына қою арқылы компиляторға тілдің төмен деңгейдегі белгілі бір мүмкіндіктерін қосуға рұқсат етуге болады. Мысалы, қауіпсіз операция – `LOOPHOLE` арқылы бүтін санның биттерін қозғалмалы нүктелі `REAL` санға көшіру арқылы типтік жүйенің қатарынан шығу. Қауіпсіз модульді импорттаған интерфейс те қауіпсіз емес болуы керек. Қауіпсіз интерфейс қауіпсіз емес іске асыру модулімен экспорттала алады. Бұл сыртқы кітапханалармен байланыс жасағанда қолданылатын стандартты тәсіл, онда екі интерфейс жасалады: біреуі қауіпсіз емес, екіншісі қауіпсіз.

Динамикалық бөлу

Модула 3 жұмыс уақытында деректерді бөлуді қолдайды. Бөліп беруге болатын жадтың екі түрі бар: ТРАЦЕЙД және НЕТРАЦЕЙД. Олардың айырмашылығы – қоқыс жинаушы осы жадты көре ала ма, көре алмай ма. NEW командасы осы жад түрлерінің кез келгеніне дерек бөлу үшін қолданылады. UNSAFE модульде, DISPOSE ізденбеген жадты босату үшін қолданылады.

Ерекшеліктер

Ерекшеліктерді өңдеу TRY EXCEPT блогы жүйесіне негізделген, ол кейіннен кеңінен таралды. Дельфи, Питон, Скала және Visual Basic .NET-тің айрық жағдайларын қоспағанда, бұл мүмкіндік басқа тілдерде қабылданылмады. EXCEPT конструкциясы әр мүмкін ерекшелікті өз EXCEPT тармағында жағдай ретінде анықтайтын switch операторының түрін білдірді. Modula 3 сондай-ақ LOOP EXIT END конструкциясын қолдайды, ол EXIT оқиғасы болғанға дейін циклді қайталайды, бұл TRY EXCEPT блогындағы қарапайым циклмен тең құрылым.

Көптірікті

Тіл көп жіпті қолдауды және жіптер арасындағы синхронизацияны қамтамасыз етеді. Іске қосылу кітапханасында (m3core) Thread деп аталатын стандартты модуль бар, ол көп жіпті қолданбаларды қолдайды. Modula 3 іске қосылу ортасы қоқыс жинау сияқты ішкі тапсырмалар үшін жеке жіпті пайдалана алады. Бірнеше жіпті синхронизациялау және дерек құрылымдарын бір уақытта қол жеткізуден, бұзылу немесе жарыс жағдайларынан қорғау үшін MUTEX деп аталатын құрылымдық дерек қолданылады. LOCK операторы mutex-ті құлыптаған блокпен таныстырады. MUTEX-тің ашылуы код орындалу орнының блоктан шығуымен автоматты түрде жүзеге асырылады. MUTEX – объекті, сондықтан одан басқа объектілер туындауы мүмкін. Мысалы, libm3 кітапханасының кіріс/шығыс (I/O) бөлімінде оқырмандар мен жазушылар (Rd. T және Wr. T) MUTEX-тен туындаған, және олар буферлер сияқты ішкі деректерге қол жеткізу немесе өзгерту алдында өздерін құлыптайды.

Басқа бағдарламалау тілдеріне әсері

Modula 3 кең таралмаса да, DEC SRC M3 дистрибуциясының бірнеше бөлігі танымал болды. Ең ықпалдысы желілік объектілер кітапханасы болды, ол Java-ның алғашқы қашықтықтан әдіс шақыру (RMI) жүзеге асыруының негізін құрады, соның ішінде желілік протокол да. Sun Common Object Request Broker Architecture (CORBA) стандартынан IIOP негізіндегі протоколға көшкен кезде ғана ол қолданудан шығарылды. Java құжаттамасында қашықтағы объектілердің қоқысын жинау туралы Modula 3 желілік объектілері үшін жасалған алғашқы жұмыстар әлі де еске алынады. Python-ның кластарды іске асыруы C++ және Modula 3-тегі кластар механизмінен шабыттанды. Сондай-ақ, Nim тілі Modula 3-тің ізделмелі және ізделмейтін көрсеткіштер сияқты кейбір ерекшеліктерін пайдаланады.