OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 16 Декабрь, 2017 02:23

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Ошибка в компиляторе OO2C
СообщениеДобавлено: Вторник, 05 Апрель, 2016 08:20 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1158
Откуда: Tel-Aviv
Возможно, ошибка находится в оптимизаторе кода компилятора (не 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 09:28, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в компиляторе OO2C
СообщениеДобавлено: Вторник, 05 Апрель, 2016 08:51 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1158
Откуда: Tel-Aviv
kekc_leader писал(а):
Я нашёл ошибку в компиляторе OO2C, прошу вас помочь мне её устранить.
Какова версия сборки компилятора?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в компиляторе OO2C
СообщениеДобавлено: Вторник, 05 Апрель, 2016 16:38 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Alexander Shiryaev писал(а):
Это digitspace
Интересно. А зачем он там нужен, почему не просто space используется? Что лучше использовать вместо модуля Out? (или просто поправить его?)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в компиляторе OO2C
СообщениеДобавлено: Вторник, 05 Апрель, 2016 16:53 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Роман М. писал(а):
Возможно, ошибка находится в оптимизаторе кода компилятора (не GCC).
Да, я читал это. В код компилятора тоже порылся. Там, насколько я понял, оптимизация сделана не вполне отдельно от основной компиляции. То есть нельзя её «просто отключить». Но это точно из-за неё.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в компиляторе OO2C
СообщениеДобавлено: Вторник, 05 Апрель, 2016 16:55 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1158
Откуда: Tel-Aviv
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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в компиляторе OO2C
СообщениеДобавлено: Вторник, 05 Апрель, 2016 16:56 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1977
Откуда: Красноярск
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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в компиляторе OO2C
СообщениеДобавлено: Четверг, 07 Апрель, 2016 02:56 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Спасибо, буду использовать Log вместо Out.

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


Вложения:
Комментарий к файлу: Разница исходных текстов. Слева исходная программа, справа - изменённая.
sources_diff.png
sources_diff.png [ 37.31 КБ | Просмотров: 1105 ]
Комментарий к файлу: Разница вывода программ. Слева вывод исходной программы, справа - изменённой.
output_diff.png
output_diff.png [ 12.6 КБ | Просмотров: 1105 ]
Комментарий к файлу: Разница промежуточных файлов на Си. Слева исходная программа, справа - изменённая.
object_diff.png
object_diff.png [ 85.26 КБ | Просмотров: 1105 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в компиляторе OO2C
СообщениеДобавлено: Воскресенье, 10 Апрель, 2016 18:39 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в компиляторе OO2C
СообщениеДобавлено: Воскресенье, 10 Апрель, 2016 19:41 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB