OberonCore
https://forum.oberoncore.ru/

Ошибка в компиляторе OO2C
https://forum.oberoncore.ru/viewtopic.php?f=30&t=5656
Страница 2 из 2

Автор:  Роман М. [ Вторник, 05 Апрель, 2016 08:20 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

Возможно, ошибка находится в оптимизаторе кода компилятора (не GCC).

ooc/ooc2/doc/from-v1-to-v2/oo2c-v2.html
Цитата:
1. Introduction

oo2c v2 is a complete rewrite of the compiler and associated tools. Some highlights are

Reduced internal complexity, at the expense of more computational overhead. This goes hand in hand with the ability to add experimental language features to the compiler.
A simplified internal SSA code representation that eliminates the need to keep track the block structure of nested statements. This reduces the complexity of most code transformations. On the other hand, producing the target code becomes more difficult.
A broader range of code transformations, including loop rewriting and partial redundancy elimination on top of the existing ones (common subexpression elimination, loop invariant code motion, constant propagation, algebraic transformations, and dead code elimination).
A large set of regression tests, increasing the reliability and stability of compiler releases.
More built-in support for building and installing third party packages.
Writing FOREIGN modules to interface with external libraries has become easier. A simple #include pulls in all the run-time type and module meta data a module needs to provide to the run-time system.

The v2 compiler implements most, but not all, of the features of its predecessor. Most programs should compile without changes, although some of the more esoteric features and library modules have been dropped. The following sections summarize the omissions and additions. For the most part, the language extensions are experimental in nature and should not be considered final.

Автор:  Роман М. [ Вторник, 05 Апрель, 2016 08:51 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

kekc_leader писал(а):
Я нашёл ошибку в компиляторе OO2C, прошу вас помочь мне её устранить.
Какова версия сборки компилятора?

Автор:  kekc_leader [ Вторник, 05 Апрель, 2016 16:38 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

Alexander Shiryaev писал(а):
Это digitspace
Интересно. А зачем он там нужен, почему не просто space используется? Что лучше использовать вместо модуля Out? (или просто поправить его?)

Автор:  kekc_leader [ Вторник, 05 Апрель, 2016 16:53 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

Роман М. писал(а):
Возможно, ошибка находится в оптимизаторе кода компилятора (не GCC).
Да, я читал это. В код компилятора тоже порылся. Там, насколько я понял, оптимизация сделана не вполне отдельно от основной компиляции. То есть нельзя её «просто отключить». Но это точно из-за неё.

Роман М. писал(а):
Какова версия сборки компилятора?
Код:
$ oo2c --version
oo2c/gcc 2.1.11
Это версия, взятая с https://github.com/AlexIljin/oo2c

Автор:  Роман М. [ Вторник, 05 Апрель, 2016 16:55 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

kekc_leader писал(а):
Alexander Shiryaev писал(а):
Это digitspace
Интересно. А зачем он там нужен, почему не просто space используется? Что лучше использовать вместо модуля Out? (или просто поправить его?)

digitspace - это управляющий знак (control code). Мне кажется, что нужно изменять поведение где-то в конвертерах при получении Ascii-представления.

Добавлено позже:
https://github.com/romiras/BlackBox-Component-Framework/blob/master/Host/Mod/TextConv.cp#L153

Автор:  Иван Денисов [ Вторник, 05 Апрель, 2016 16:56 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

kekc_leader писал(а):
Alexander Shiryaev писал(а):
Это digitspace
Интересно. А зачем он там нужен, почему не просто space используется? Что лучше использовать вместо модуля Out? (или просто поправить его?)

Лучше использовать Log. Out оставлен для книги Вирта. Его не надо использовать.

Код:
This module is provided for compatibility with the book "Programming in Oberon" by Reiser/Wirth. It is useful when learning the language. It is not recommended for use in production programs.

Автор:  kekc_leader [ Четверг, 07 Апрель, 2016 02:56 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

Спасибо, буду использовать Log вместо Out.

Я откомпилировал исходник ошибки и откомпилировал слегка изменённую версию (единственное изменение - внутри процедуры Line - присваивание значения переменной i глобальной переменной globalVar), всё это дело пропустил через vimdiff и заснял. Прилагаю к сообщению три снимка: разница между исходниками, разница между, получающимися в процессе компиляции, файлами Си и разница между выводами получившихся программ. Выводы в обоих случаях неверные (точнее, в исходном варианте неверная вторая часть вывода, а в изменённом - первая часть). Сам я ещё это не изучал, просто хочу сразу поделиться. Удивляет обилие изменений в получившемся коде на Си при изменении всего одной строчки в процедуре. С другой стороны, большинство изменений - это смена номера регистра. Например, раньше было «i3 = i3+i2;», а теперь «i8 = i8+i2;».

Вложения:
Комментарий к файлу: Разница исходных текстов. Слева исходная программа, справа - изменённая.
sources_diff.png
sources_diff.png [ 37.31 КБ | Просмотров: 2622 ]
Комментарий к файлу: Разница вывода программ. Слева вывод исходной программы, справа - изменённой.
output_diff.png
output_diff.png [ 12.6 КБ | Просмотров: 2622 ]
Комментарий к файлу: Разница промежуточных файлов на Си. Слева исходная программа, справа - изменённая.
object_diff.png
object_diff.png [ 85.26 КБ | Просмотров: 2622 ]

Автор:  kekc_leader [ Воскресенье, 10 Апрель, 2016 18:39 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

Alexander Shiryaev писал(а):
Исполняемый файл собрать нельзя, только библиотеку .so
А тут вот лежит «минипакет для сборки линукс-приложений Блэкбокс15».
http://oberoncore.ru/projects/develflinker-distro
Он работает или устарел?

Автор:  Alexander Shiryaev [ Воскресенье, 10 Апрель, 2016 19:41 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

kekc_leader писал(а):
Alexander Shiryaev писал(а):
Исполняемый файл собрать нельзя, только библиотеку .so
А тут вот лежит «минипакет для сборки линукс-приложений Блэкбокс15».
http://oberoncore.ru/projects/develflinker-distro
Он работает или устарел?

Устарел или то же самое. Исполняемый файл собрать нельзя, только динамическую библиотеку.

Автор:  Sergej Durmanov [ Пятница, 06 Декабрь, 2019 15:17 ]
Заголовок сообщения:  Re: Ошибка в компиляторе OO2C

Временное решение.
В OOC/SSA/Destore.Mod процедура Transform, закомментировать строку pb .DeleteInstr (instr); в блоке, начинающемся с комментария
(* visit all "get" instructions that have no uses and eleminate them;

Проблема понятна, на ее полноценное решение нужно время

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/