вторник, 23 ноября 2010 г.

Язык Модула-2

Давно не публиковал новых статей в данную рубрику – вот все-таки решил это сделать. Сегодня тоже поговорю про довольно старенький язык программирования, о котором я только слышал (не использовал никогда, даже компиляторы не ставил). А узнаем мы сегодня про такой язык, как Модула-2.

Кстати, сразу скажу, почему он называется именно Модула-2. Точнее – про версию этого языка хочу сказать. Раньше (ясное дело) был и язык Модула, но разработчики не стали доводить его до конца и немного подзабили. Поэтому, первая версия языка так и не была завершена. Зато потом его все-таки доделали. Сейчас узнаем как.

Разрабатывался этот язык нашим знакомым, о котором я уже писал в рубрике Личности (жаль, не получится в субботу сделать логичное продолжение данной статьи) – Никлаусом Виртом. Произошло это событие в далеком 1978 году. Как говориться – меня тогда еще даже и в планах никаких не было.

Разработка этого языка велась для того, чтобы создавать системное ПО специального компьютера, который делали в Цюрихе. Благодаря этому, у Модула-2 появились некоторые особенности. Понятное дело, он разрабатывался для промышленности (для ученых тоже) – поэтому должен был быть понятным и простым, но – одновременно и функциональным. А так как он нужен был для разработки системного ПО – то с его помощью нужно было получать прямой доступ к аппаратуре. Вот какая задача стояла перед Виртом. И он с ней справился, реализовав все, что требовалось.


Модула-2 – это модульный язык программирования (основан на Паскаль и Модула первой версии). Как уже я сказал – он модульный, поэтому – программа – это набор модулей, которые можно компилировать отдельно. Также – очень хорошо развито межмодульное взаимодействие – можно «взять» из одного модуля, например, переменные – и импортировать в другой. Таким образом можно поступать почти со всеми объектами, которые есть в модулях. Но в языке нет операторов ввода-вывода. Они содержатся в специализированных библиотеках. Также существуют средства для многопоточного программирования и поддержка параллельных программ. И, как уже было сказано, существовал прямой доступ к аппаратуре и памяти.

Если вспомнить язык программирования паскаль – Никлаус Вирт и его разработал тоже. Но есть большие различия между этими двумя языками. Например,        в Модуле-2 все слова зависят от регистра, а ключевые слова пишутся только прописными буквами. Почти все сложные конструкции (например – операторы условия) немного упрощены – есть открывающее и закрывающее слово. А также – еще существуют некоторые улучшения (по сравнению с паскалем), но об этом не будем сегодня говорить.

У Модула-2 есть достоинства, такие как – тесная связь с паскалем (собственно, все положительные черты этого языка перешли в Модула-2). Также – он больше заточен под системное программирование (уже было сказано почему). А также – Модула-2 лаконичный и очень понятный, Вирт постарался.


Но существуют и некоторые недостатки. К примеру – хоть в Модула-2 и включена поддержка параллельного программирования – но в не полной мере, такой поддержки не хватает. Оказывается, в Модула-2 нет строк и динамических массивов (прикольно, а как на нем вообще программируют). И еще один недостаток, который довольно существенен – это слишком сложная система модулей. В дальнейшем Никлаус Вирт пересмотрел свой взгляд на это дело.

В Советском Союзе Модулу-2 начали использовать уже в 1982 году, тогда появился первый компилятор языка. А также, его использовали в научных целях в Европе. Но – другое детище Вирта – язык Паскаль – обогнал по популярности Модулу-2, ее почти нигде не стали использовать и развивать. Даже крупные компании отказывались от этого дела. Поэтому – сейчас и нету нормальных компиляторов данного языка.

2 комментария:

  1. Язык Модула-2 сейчас используется для разработки бортового программного обеспечения, например ГЛОНАС полностью работает на нем. Так же, на нем пишут операционные системы реального времени для космических аппаратов и по сей день.

    ОтветитьУдалить
    Ответы
    1. Спасибо, когда статью писал - не нашел такой информации, теперь буду знать.

      Удалить