LINUX.ORG.RU

Вышла версия 1.0 GNU Modula-2

 gm-2, ,


0

0

11 декабря 2010 разработчики представили версию 1.0 компилятора языка Modula-2.

К релизу были достигнуты следующие цели:

  • Функциональность и API библиотек полностью приведены к соответствию стандартам ISO.
  • Сам компилятор теперь соответствует ISO-стандарту языка Modula-2.
  • Компилятор полностью проходит 10040 тестов на платформах x86 и x86_64 (тем не менее пока имеются некоторые регрессии на Mac OS X и Solaris LP64).

Компилятор GM2 распространяется как дополнение к GCC.

>>> Сайт проекта

★★★★★

Проверено: mono ()
Последнее исправление: Dendy (всего исправлений: 3)

Ответ на: комментарий от Magister2k7

AFAIK докинг недавно добавили, только по-умолчанию он не включен (надо пакет какой-то поставить. Сам не смотрел, это сотрудник рассказывал).

Я видел этот докинг... окошко Messages прикрепляется к редактору коду и... все. Хотя надо будет посмотреть, может чего изменилось.

Ну а разную мелочевку давно как можно, что я успешно и делаю.

Я, да и не только, даже больше чем «не мелочевкой» на нем занимаюсь, но более юзабельным он от этого не становится :)

Andru ★★★★
()
Ответ на: комментарий от AVL2

>Круто. Типа, нафиг придумывали с++...

Прикинь, типа, нафиг. Ты лучше возьми первое издание Страуструпа и последнее и найди десять совпадений. Фиговый листок «Это язык для реальных проектов» не канает. Всё что его держит на плаву - это совместимость с сишными библиотеками.

Attila ★★
()

По поводу goto в си отсылаю к книге Голуба «Веревка достаточной длины...»

Цитаты: Множество переходов goto к единственной метке, стоящей перед оператором return, лучше, чем множество операторов return. Такую процедуру легче отлаживать, так как для перехвата выхода из нее вы можете установить единственную точку прерывания.

Переходы goto вниз по программе, обеспечивающие выход из системы вложенных циклов, лучше, чем флаг завершения типа «готов», который должен проверяться в каждом операторе управления циклом. Если каждый из операторов while в следующем примере выполнить по 100 раз, то флаг «готов» нужно проверить 1000000 раз, хотя он установлен всего лишь на случай ошибки.

anonymous
()
Ответ на: комментарий от anonymous

ну дык в Си же обычная практика писать что-то типа:

if( MY_ERR == my_system_call(my_arg)) goto CLEANUP;

Или нет?

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

> Множество переходов goto к единственной метке, стоящей перед оператором return, лучше, чем множество операторов return. Такую процедуру легче отлаживать, так как для перехвата выхода из нее вы можете установить единственную точку прерывания.

Это удобство спорное: иногда да, иногда нет. В общем - неоднозначно.

Переходы goto вниз по программе, обеспечивающие выход из системы вложенных циклов, лучше, чем флаг завершения типа «готов», который должен проверяться в каждом операторе управления циклом. Если каждый из операторов while в следующем примере выполнить по 100 раз, то флаг «готов» нужно проверить 1000000 раз, хотя он установлен всего лишь на случай ошибки.

Здесь возразить нЕчего. Хотя, зачастую, подобные «вложенные циклы с необходимостью выхода наружу из внутреннего цикла» - от неэффективного/непродуманного алгоритма или его реализации.

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

>Такую процедуру легче отлаживать, так как для перехвата выхода из нее вы можете установить единственную точку прерывания.

таких упырей-процедурщиков, которые вместо доказательства алгоритма пишут невпопад быдлокод , а потом упорно дебажат надо сразу перемещать в камеру для безусловной и немедленой эвтаназии.

Вообще каким некомпетентным надо быть, чтобы прикрываться флагом некомпентентности - дебагом?

Переходы goto вниз по программе, обеспечивающие выход из системы вложенных циклов, лучше, чем флаг завершения типа «готов», который должен проверяться в каждом операторе управления циклом.

это ваще тупизм. во первых, куда он дел break? А во вторых, кто сказал, что предсказуемая проверка не будет оптимизирована лучше goto?

Таких неадекватов надо посылать на каторжные работы в цпу, чтоб он там своими руками разгружал конвейер на каждом goto. глядишь и дойдет до понимания пагубности и дебага и гото.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

> Ананимус резанул правду матку. Круто. Типа, нафиг придумывали с++... Сам удивляюсь. с++ - громкое слово в костылестроении.

anonymous
()
Ответ на: комментарий от AVL2

>А во вторых, кто сказал, что предсказуемая проверка не будет оптимизирована лучше goto?

Я сказал. Не будет - проверено многократно.

В то же время, как я выше и написал, сам факт таких «вложенных циклов с необходимостью break через все циклы, как правило, следствие неправильного проектирования/реализации.

Led ★★★☆☆
()
Ответ на: комментарий от AVL2

> прикрываться флагом некомпентентности - дебагом?

пагубности дебага

Действительно, нафиг отладка нужна? Что накодили - сразу в релиз, всë как есть, не проверяя.

куда он дел break?

У тебя особенный C[++], в котором «break» может выйти из двух и более циклов сразу?

Таких неадекватов надо посылать на каторжные работы

Тех, кто для выхода из вложенных циклов лепит проверки, бесполезные 99.999999% времени выполнения этих циклов, копипастит перед каждым аварийным «return»-ом код очистки ресурсов и при добавлении нового ресурса старается не забыть накопипастить код его очистки, и использует прочие говнокодерские методы по принципу «лишь бы не было goto» (просто потому, что не умеют им пользоваться), нужно даже не на каторгу, а куда-нибудь подальше.

anonymous
()

Спасибо за ссылку. Не знал об этом проекте ранее. Надо будет попробовать Модулу, когда руки дойдут. Кстати, кто-нибудь может сказать: там есть deb для Ленни, на Сквизе пойдёт? А на Убунте 10.04?

Vudod ★★★★★
()
Ответ на: комментарий от AVL2

> Таких неадекватов надо посылать на каторжные работы в цпу Мы сейчас в матрице?

это ваще тупизм. во первых, куда он дел break?

Похоже, ты тут больше всех тупишь. Путаешь сёвый бряк с perl'овым last на метку или чем то аналогичным.

Камеры, эвтаназия, упыри-процедурщики.. - надо поменьше триллеров смотреть по ночам.

anonymous
()
Ответ на: комментарий от anonymous

Тех, кто для выхода из вложенных циклов лепит проверки, бесполезные 99.999999% времени выполнения этих циклов, копипастит перед каждым аварийным «return»-ом код очистки ресурсов и при добавлении нового ресурса старается не забыть накопипастить код его очистки, и использует прочие говнокодерские методы по принципу «лишь бы не было goto» (просто потому, что не умеют им пользоваться), нужно даже не на каторгу, а куда-нибудь подальше.

На C++ не писал, поэтому ничего не могу сказать про обязательное удаление всех объектов. В Pascal, Fortran, Python, D это не нужно.

Несколько return обычно гораздо лучше одного, потому что существенно упрощает код и городить костыли с goto не приходится. К тому же они могут возвращать результаты различных типов, что с помощью одного делать очень накладно.

Обычно while уже есть и дописать лишнее условие на проверку флага не сложно. А учитывая ленивое выполнение во многих языках, это дополнительное условие и вовсе не будет проверяться в 99% случаев

Vudod ★★★★★
()
Ответ на: комментарий от anonymous

Путаешь сёвый бряк с perl'овым last на метку или чем то аналогичным.

Да с джавским break-ом он путает.

На C++ не писал, поэтому ничего не могу сказать про обязательное удаление всех объектов. В Pascal

В какком Pascal есть сборка мусора?

Begemoth ★★★★★
()
Ответ на: комментарий от Vudod

> Обычно while уже есть и дописать лишнее условие на проверку флага не сложно. А учитывая ленивое выполнение во многих языках, это дополнительное условие и вовсе не будет проверяться в 99% случаев

Если подумаешь немного дольше, то сообразишь, что цифра эта не 99%, а 1%.

anonymous
()
Ответ на: комментарий от ilias

очевидно, что выделять жирным шрифтом зарезервированные слова возможно было уже в восьмидесятые. Однако Вирт - сторонник минимализма. То есть я пытаюсь объяснить как он думает: если есть uppercase буквы, не имеет смысла иметь зависимость от текстового редактора. А позаимствовал он идею из Симулы.

Мне самому вначале было сложно, потом свыкся и стало удобно :)

noch
()

я так понимаю, много комментариев в духе:

- модула устарела Гугловский Гоу кажется современный язык, а на самом деле удивительно напоминает Модулу :) Наконец-то появилась модульность, к примеру. Корутины в Модуле в библиотеках, в Гоу - на уровне языка гоурутины.

- что пишут на модуле? Смотря. Когда пишут коммерческие приложения, ентерпрайс выбирает яву, дотнеты, или когда нужен нейтив код - c++, или если переносимость не нужна - delphi. Свободные разработки делают люди на том, на чем удобно. Однако не все умеют, и имеют столько ресурсов, для того, чтобы написать себе средства разработки. Модула не популярна в ентерпрайс, но это не делает ее плохой. То, что сейчас есть рабочее средство разработки означает, что на нем можно писать, а наличие средства разработки означает что его можно рассматривать как инструмент. Напротив, отсутствие средства разработки, или его де-факто отсутствие, когда есть масса неработающих «компиляторов» без возможности связок, без библиотек, с массой багов - означает что такой язык невозможно рассматривать как инструмент даже для любительского проекта.

- кто пишет на модуле? Собственно, какая разница? Как я сказал, если есть относительно стабильный компилятор, своя библиотека, и можно делать связки к си коду, следовательно, можно писать все что заблагорассудится.

А то, что квалифицированный специалист пишет на чем угодно красиво, а «индус» независимо от национальности, даже белобрысый и в Москве, пишет страшно, это кажется, всем понятно, кроме нацистов.

И давайте общаться не на уровне «ребята, которые пишут на си - „тру“, а на модуле „ацтой“» или наоборот. Красиво можно писать даже на пхп Другое дело, что я предпочту сделать связки, ну, скажем к модуле апачевских заголовков, и написать компилируемый модуль. Хорошо, что сейчас это стало возможным не только на си или паскале.

Что касается паскаля, есть относительно неплохие средства разработки, но язык и объемнее, и не так хорошо спроектирован. Меня напрягает отсутствие ELSIF, к примеру. Вокруг GNU pascal нет сообщества, да и развивать его не имеет смысла, fpc превосходит его во всем, разве, что кроме количества бессмысленных платформ вроде hp-ux. То есть hp-ux все равно живут только на предприятиях, где врядли предпочтут GNU Pascal. Как-то так.

noch
()
Ответ на: комментарий от noch

а насчет goto:

a) очевидно, что с ним иногда быстрее

б) очевидно, что такой стиль не назвать академическим.

в) очевидно, что компилятор может растеряться и не сможет оптимизировать код с goto. В этом смысле не факт, что goto - это эффективно. Нужно взвесить, посмотреть генерируемый ассемблер. Что эффективнее, goto или оптимизация?

г) очевидно, что использовать goto нужно очень очень осторожно, и со знанием дела.

д) очевидно, что можно спокойно обойтись без него.

е) goto не нужен (c) Дейкстра

noch
()
Ответ на: комментарий от noch

> е) goto, оказывается, не так уж и нужен (c) Дейкстра

fixed

anonymous
()
Ответ на: комментарий от Vudod

>Несколько return обычно гораздо лучше одного, потому что существенно упрощает код и городить костыли с goto не приходится. К тому же они могут возвращать результаты различных типов

У вас сгущенка из попы торчит...

anonymous
()
Ответ на: комментарий от noch

да ладно, зачем тебе ide? когда пишу на паскале, хотя собственно на чем угодно - vi мой редактор.

когда твой проект состоит не только из Unit1.pas и количество строк кода исчисляется не сотнями, а тысячами/десятками тысяч, то vi становится абсолютно бесполезным. Меня не убедишь в обратном :}

Andru ★★★★
()
Ответ на: комментарий от anonymous

>Действительно, нафиг отладка нужна? Что накодили - сразу в релиз, всë как есть, не проверяя.

Я как раз предлагаю законодательно закрепить норму. Сказал слово «дебаг» - все, никаких релизов, пока ты в этом дебаге не оттрасируешь _все_ ветки выполнения кода на _всех_ паттернах данных.

У тебя особенный C[++], в котором «break» может выйти из двух и более циклов сразу?

не надо писать такие циклы.

перед каждым аварийным «return»-ом код очистки ресурсов

теперь, значит, исключения отменили?

Писец, что у вас творится.

просто потому, что не умеют им пользоваться

научитесь уже пользоваться ядом. Не нужно усиливать нарастание энтропии во вселенной.

AVL2 ★★★★★
()
Ответ на: комментарий от Led

>В то же время, как я выше и написал, сам факт таких «вложенных циклов с необходимостью break через все циклы, как правило, следствие неправильного проектирования/реализации.

agree

На моей памяти основные проблемы с софтом были или связаны с тормозной платформой (жаба, питон) или с багами в самом софте. Ни одна из этих проблем не решалась и не решается оптимизацией через goto. Зато наломать дров в коде с goto на порядок проще, чем без оного.

AVL2 ★★★★★
()
Ответ на: комментарий от Led

>Феерично:)

ну ежели типы унаследованные, то технически почему бы и нет.

но туууупо...

AVL2 ★★★★★
()
Ответ на: комментарий от anonymous

>Императивщики отжигают :D

Да какой там императивщик? Ненавистник динамических языков и питонофил в одном лице - раздвоение личности и шизофрения (как диагноз) отдыхают:)

Led ★★★☆☆
()
Ответ на: комментарий от AVL2

> теперь, значит, исключения отменили?

Писец, что у вас творится.

Исключения в C (*не* C++!)???!!! O_O

Это у тебя что-то не то творится. Ты ж пойми, тут не только про C++ говорят, но и про plain C и подобные языки, в которых нет ни деструкторов, ни исключений, ни прочих адекватных (без разделения функции на сотню функций поменьше и постоянной перегонки данных из одной «подфункции» в другую, без копипасты кода деинициализации на каждый «return» и т.п.) способов упростить очистку ресурсов.

anonymous
()
Ответ на: комментарий от los_nikos

>> BlackBox

только под Винду

Вообще-то исходный код открыт и *компилятор* под линукс переносится без особых проблем. А вот GUI-средства да, к WinAPI привязаны. Был одно время герой-одиночка, который занимался BlackBox под Linux, даже какой-то рабочий прототип собрал.

be_nt_all ★★
()
Ответ на: комментарий от los_nikos

> А у него какая лицензия? По-моему, это даже не дотягивает до программ на Mono по легальности.

Black Box ComponentBuilder открыт под собственная копилефтной лицензией.

be_nt_all ★★
()
Ответ на: комментарий от be_nt_all

Реально на чем можно работать на любой платформе http://sourceforge.net/projects/ooc Я его на что только не переносил :) Включая восьмибитный нинтендо :)

noch
()
Ответ на: комментарий от anonymous

>Это у тебя что-то не то творится. Ты ж пойми, тут не только про C++ говорят, но и про plain C и подобные языки

если речь за ассемблер и С, как переносимый ассемблер, то таки да, без джампа никуда. Это в конце концов одна из основных машинных инструкций и по любому в машинном коде она будет присутствовать в огромных количествах, а раз инструкция есть, таки разумно ею пользоваться.

Однако это не повод превозносить goto. В прикладных, не ассемблерных ЯП он не нужен. И в С (как языке для больших проектов) в том числе.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

> Однако это не повод превозносить goto.

А тут никто его и не превозносит и не отрицает, что без крайней необходимости (когда другие варианты получаются ещё черезжопней, чем «goto») им лучше не пользоваться. А если уж совсем прижало, то пользоваться с большой осторожностью.

anonymous
()
Ответ на: комментарий от Led

К тому же они могут возвращать результаты различных типов

Феерично:)

Никогда не видели Питона? представьте, что в части случаев нужно вернуть число, а в других --- список.

Vudod ★★★★★
()
Ответ на: комментарий от Vudod

> Никогда не видели Питона? представьте, что в части случаев нужно вернуть число, а в других --- список.

Ну, реальную пользу действительно сложно представить, поскольку у них есть всего два с половиной общих метода, один из которых - __str__, а другой - __init__.

Несколько ретурнов, возврат типов с различными интерфейсами... А я думал, это в с++ ногу из базуки принято отстреливать...

anonymous
()
Ответ на: комментарий от Led

Очень-очень редко возникает необходимость выйти и глубоко вложенного цикла, но для этого, насколько я помню, в той же самой ISO Modula-2 есть такая возможность перед циклом поставить метку, а потом ее указать break.

mark: LOOP
LOOP
break mark;
END;
END;

anonymous
()
Ответ на: комментарий от Vudod

>Никогда не видели Питона?

Здесь, вообще-то говорилось о языках программирование, а не о питоне.

Led ★★★☆☆
()
Ответ на: комментарий от Vudod

>Никогда не видели Питона? представьте, что в части случаев нужно вернуть число, а в других --- список.

Это отличная фича петона, благодаря которой 95% питоновых программ время от времени выпадают в traceback. Других плюсов в возврате разнотипных результатов нет.

AVL2 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.