76
Общий раздел / Re: Расширенный тест на производительность.
« : Декабрь 03, 2016, 02:28:48 pm »
Теперь тестовые прогоны делаются на сервере. Результаты в абсолютных величинах могут измениться (и изменятся).
Онлайн компилятор Oberon-07/11
Путеводитель по Оберон-проектам.
Логи jabber-конференции.
Онлайн исходники BlackBox: тут:WeBB и на github
Исходники Project Oberon V4 на github.
Сборник решений задач книги "Современное программирование с нуля!" тут. А обсуждение здесь.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Не, я не к тому что реализация без GC это что-то плохое :-) Я просто уточнил. Есть туча оберонов без GC. И они без GC, полагаю, ровно по той же причине.Сборщика мусора ведь нет?
С самого начала разработки компилятора, я решил максимально упростить задачу. Я не был уверен, что у меня на это хватит способностей. Поэтому, получилось то, что получилось. Однопоточный сборщик мусора не ахти какая сложная вещь, но он меня не интересует. Многопоточный, напротив слишком сложен, поэтому я от него отказался. Вообще, я решился опубликовать компилятор, только потому, что Rifat каким-то образом умудрился сделать кодогенерацию еще хуже. А раз так, думаю, то и я могу. Хотя сначала, делал только для себя и не собирался это никому показывать.
Я прикрепил архив, добавил туда бинарники для Windows и Linux, а также файл test.ob07 -- пример консольного вывода для Linux.
Сначала, надо уяснить, что Oberon-07, это язык, предназначенный для быстрой реализации с минимальными затратами и сравнительно эффективного применения в случае простейшей реализации. В связи с этим, все разговоры об умных компиляторах, современных средствах отладки, шаблонах, замыканиях и т. д. лишены смысла. Многие недостатки языка либо упрощают реализацию, либо упрощают отладку в условиях, когда есть только голый компилятор без каких-либо инструментов.Полностью согласен. Ещё нюанс - до кучи оно еще оптимизировано под то, чтобы писать в одиночку и без IDE. Собственно как Вирт и работает над системой Оберон. В этом плане язык весьма неплохо продуман и довольно удобен.
- ран-тайм проверки (индексы, указатели). Замедляют и так небыстрые программы. Но оказывают неоценимую помощь, позволяют быстро выявить такие ошибки, которые бывает очень трудно найти без пошагового отладчика и прочих средств. Вряд ли я хоть что-нибудь написал бы на O7 без них. Конечно, люди разные, есть и такие, которые могут кодировать сразу без ошибок на любом языке, но я к таким не отношусь.Это всё же не часть языка, в сообщении о языке про это ничего не сказано. Это часть Оберона как операционки. Ну и, бывает полезно иметь возможность их отключать.
- сильная типизация. Тоже отлавливает очень много ошибок. И да, упрощает реализацию ).Согласен.
- единственный выход из процедуры, отсутствие прерываний циклов. Спорная фича. Затрудняет кодинг, увеличивает размер и снижает эффективность кода, немного упрощает отладку.Идея визуализации потока управления через "отступы". Это работает не очень хорошо на таком уровне, мягко говоря.
- обязательная квалификация идентификаторов. На первый взгляд, избыточно. Раздувает и без того не очень компактный оберон-код. Но вот, как-то мне надо было просмотреть одну программу на паскале, так я задолбался искать процедуры по всем модулям. Конечно, эту проблему легко решает IDE, но ведь я говорю о простейшей реализации...С одной стороны полезная штука, с другой стороны, можно было сделать более человечески - разрешить использовать идентификаторы без квалификации если они в импортах были явным образом перечислены. Т.е. что-то вроде IMPORT (function1, typeT, somthingElse) from MyModule, MyModule; -- тут можно без квалификации будет использовать function1, typeT, somethingElse а все остальное из модуля MyModule придется использовать с квалификатором: MyModule.something .
- SET. Применяется нечасто, но бывает полезен, когда надо упаковать несколько булевских значений в одну переменную, чтобы не раздувать список параметров.SET я использовал (при программировании микроконтроллеров) для работы с битиками. Весьма удобно. Железяки иногда требуют записи определенных битиков в определенные места - вот для этого оно вполне ничего себе.
- Беззнаковое целое. Я ни разу не пожалел о его отсутствии. Конечно, бывают случаи, когда этот тип был бы полезен, но для 32-битной реализации это бывает нечасто. Для 64-бит, ИМХО, вообще "не стОит выделки".Стоит выделки. См. задачку например. Т.е. на моей практике регулярно попадается что-то такое, что требует именно беззнакового целого. И не из за того, что оно в два раза более емкое чем знаковое. Т.е. востребованность беззнаковых типов сильно зависит от множества задач решаемых человеком. Некоторым программистам наверняка беззнаковые и не потребуются, но если вдруг потребуются, будет неприятно.
Давно уже можно генерить для Linux, в инструкции написано. Только без библиотек это неудобно. И зачем тестировать на производительность игрушечный компилятор?Теперь осознал и отвечу: специфика этой задачки такова, что она реально очень похожа на реальные задачи. Т.е. на задачи, где все упирается в IO и продуманность алгоритмов. Твой компилятор не имеет особого смысла тестировать на передыдущей задаче (где мы сортировали пузырьком), но вот на этой - имеет смысл.
Хм. А собирать его чем? В архиве предположительно только исполняемый файл для калибри. А я эльфов хочу...Да, еще вопрос к akron1: где взять актуальную версию компилятора?Вроде вот последняя версия: http://board.kolibrios.org/viewtopic.php?f=33&t=2443&sid=06ed798bbd09a775c48ce781636a1776&start=30#p66481
MODULE hello ;
FROM StrIO IMPORT WriteString, WriteLn ;
BEGIN
WriteString('hello world') ; WriteLn
END hello.
Ну, WinAPI в *nix'ах нет :-) А что сейчас модно использовать вместо Files?Так в *nix'ах и ББ нет официально. Но там же есть системные вызовы и libc.
А вместо Files обычно используют Files. Для обычной-то работы нормально.
Костыль.Ну, WinAPI в *nix'ах нет :-) А что сейчас модно использовать вместо Files?А Wine тогда что такое?