OberonCore
https://forum.oberoncore.ru/

Восток - Транслятор Oberon-07
https://forum.oberoncore.ru/viewtopic.php?f=115&t=6217
Страница 2 из 3

Автор:  Comdiv [ Вторник, 23 Январь, 2018 13:23 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Trurl писал(а):
А разве Vostok там есть?
Как дозреет, так будет.
А вопрос был о том, что для того, чтобы ставить что-то со стороны, оно должно того стоить. Борис на него приблизительно ответил.

Автор:  ilovb [ Вторник, 23 Январь, 2018 14:07 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Кстати, Comdiv, не думали чат создать как нынче принято в gitter.im?
Ну и все общение с двух форумов туда перенести?
Там площадка более удобная для этих целей с подсветкой синтаксиса в комментах и вообще интеграция с гитхабом.
Там вам любой чел с гитхаба сможет вопрос задать.

Подключиться туда очень просто. Заходите по адресу и следуете указаниям.
Оно вам создаст пулреквест с бейджиком-ссылкой на чат в ридми.

Автор:  Comdiv [ Вторник, 23 Январь, 2018 14:22 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Не слышал до сих пор о таком. Гляну.
Хотя, в принципе, форумы меня устраивают.

Автор:  Comdiv [ Вторник, 19 Июнь, 2018 10:15 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Oleg N. Cher писал(а):
P.S. Видел там на форуме, Ваш Восток вообще трудно и собирать, и пользоваться им. Половину не понял из того, что там ему надо. Так что буду рад, если Вы как-то упростите этот процесс.
Как минимум, одна часть людей смогла им воспользоваться, не задавая вопросов, а другая часть смогла после моих ответов. О молчащих мне трудно судить. Для пользователей Windows может быть сложность в том, что у меня нет Windows и я не всё учитываю и мне сложно тестировать работоспособность в этом семействе ОС.

Среди неожиданного для меня было то, что часть вопросов пользователей была вызвана тем, что транслятор работает с командами в стиле Оберон, а не с файлами, как принято в Си.

Так, например, можно собрать сам транслятор из каталога проекта
Код:
$ result/o7c to-bin Translator.Start result/o7c-1 -infr . -m source
Где Translator.Start - это та самая команда.
А так - запустить его прямо из исходников для вывода справки, где можно почитать что к чему:
Код:
$ result/o7c run Translator.Start -infr . -m source -- help

Первоначальная сборка осуществляется скриптами для соответствующих ОС.

Вроде бы, не трудно. Если есть вопросы, готов ответить.

Автор:  Димыч [ Понедельник, 20 Август, 2018 14:44 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Запустил vostok на маке под Clang.

Пришлось несколько гаек подкрутить:
https://github.com/dmitrys99/vostok/commits/master
Clang, похоже, очень трепетно относится к именам файлов, поэтому тест MathTest не собирается, ругается на -Wnonportable-include-path

Кроме того, собирал так:
Код:
make test SANITIZE:=-std=c99


Дополнительно изменил функции, связанные с undefined double и undefined float.
Как я понял, memcpy используется для записи в предоставленную ячейку значения, которое соответствует IEEE 754 NaN, но для этого в C99 есть соответствующая функция nan(), что я и использовал.

Попробую теперь собрать под Windows в Visual Studio, благо никаких сверхъестественных особенностей языка и ОС не используется.

Автор:  Comdiv [ Понедельник, 20 Август, 2018 23:54 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Димыч писал(а):
Запустил vostok на маке под Clang.
Код:
+#if ... || defined(__APPLE__)
ЗдОрово, про мак я совсем забыл

Димыч писал(а):
Clang, похоже, очень трепетно относится к именам файлов, поэтому тест MathTest не собирается, ругается на -Wnonportable-include-path
Довольно странно, на моей памяти файловая система на макоси регистрозависимая, и тогда не должно было быть проблемы с
Код:
#include "Math.h"
На WINE тоже была проблема - из-за регистронезависимости было пересечение со стандартным math.h, но добавив явные определения стандартных функций, я решил эту проблему. Изначально она, вообще, решалась тем, что math и Math считались особыми словами и отображались в math_.h и Math_.h. Надо будет ещё подумать над этой проблемой в свете новой информации.

Цитата:
Переименованы файлы для компиляции с помощью CLANG
singularity/implementation/Math.c → singularity/implementation/O7Math.c
singularity/implementation/Math.h → singularity/implementation/O7Math.h

Непонятно за счёт чего такое переименование помогло пройти тесту. Обероновский модуль Math отображается на сишные Math.[hc] и транслятор подключает при трансляции соответствующие файлы. O7Мath.[hc] должны быть проигнорированы. Если это не так, то надо разбираться почему.

Цитата:
Кроме того, собирал так:
Код:
make test SANITIZE:=-std=c99
Похоже, что используется старая версия clang. В новых версиях и >=С99 стоит по умолчанию, и опции *sanitize* доступны. Или же это связано с тем, что clang в sanitize режиме некорректно отрабатывает как неопределённое поведение
Код:
((P*)NULL)->a
где а лежит по 0-му смещению

Это не принципиально, но с точки зрении задумки структуры Makefile, корректней запускать так:
Код:
make test SANITIZE:= OPT:=-std=c99

Также, я теперь больше использую для сборки модуль make.mod, написанный на самом Обероне, так как он работает и в WINE, и, наверно, в Windows, в отличии от Makefile.

Цитата:
Дополнительно изменил функции, связанные с undefined double и undefined float.
Как я понял, memcpy используется для записи в предоставленную ячейку значения, которое соответствует IEEE 754 NaN, но для этого в C99 есть соответствующая функция nan(), что я и использовал.
Не совсем. Это сигнальная неопределённость, то есть, такая, что должна приводить к АВОСТ при попытке работать со значением. Я хотел по максимуму использовать стандартные возможности. Стандарт упоминает о ней, но компиляторы на неё не обращает внимания, работая как с обычной неопределённостью, поэтому приходится делать проверку явно. Я придерживаю эту возможность для более продвинутых компиляторов, которые, возможно, появятся в будущем или, может, даже есть, к примеру, для Эльбруса. Я видел более цивилизованный способ задать битовое содержимое double, но упустил его из виду и руки пока не дошли. Также, я стараюсь использовать возможности более современных стандартов так, чтобы не блокировать возможность сбора под старый.

Цитата:
Попробую теперь собрать под Windows в Visual Studio, благо никаких сверхъестественных особенностей языка и ОС не используется.
Спасибо, у меня самого нет прямой возможности, а её создать мне не хватает желания.

Автор:  Димыч [ Вторник, 11 Сентябрь, 2018 11:27 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Заработала компиляция под Visual Studio 2015.

https://github.com/ComdivByZero/vostok/pull/2

Там, правда, в PR влезли и остальные модификации (nan и MacOS).

Я этот PR не проверял пока на маке, чуть позже проверю, но должно работать.
По C/C++ коду не очень понятно, зачем в условной компиляции C++, это намеренно сделано?
Кроме того, я не до конца понял, к чему такие сложности с o7_bool с его определением.
Раз уж завязались на unsigned char, пусть бы так везде и было. Это, впрочем, не критика,
мое недопонимание архитектуры.

Генерацию не переделывал, собирается пока только bootstrap.

Автор:  Comdiv [ Вторник, 11 Сентябрь, 2018 12:18 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Димыч писал(а):
Заработала компиляция под Visual Studio 2015.

https://github.com/ComdivByZero/vostok/pull/2

Там, правда, в PR влезли и остальные модификации (nan и MacOS).
Хорошо. Я приму запрос, потом подкорректирую.

Цитата:
По C/C++ коду не очень понятно, зачем в условной компиляции C++, это намеренно сделано?
Изначально я хотел, чтобы генерировался код, компилируемый и как C, и как C++. Пока это не так из-за чехарды с тэгами структур, но планируется в конечном итоге исправить.

Цитата:
Кроме того, я не до конца понял, к чему такие сложности с o7_bool с его определением.
Раз уж завязались на unsigned char, пусть бы так везде и было.
Желание усидеть на двух стульях. С одной стороны я хочу получить защищённый код, для чего нужен bool в виде unsigned char для хранения вспомогательного значения неинициализированности. С другой стороны хочу иметь возможность максимально приблизить конечный код к идиомам выходного языка. Более того, делать выбор между режимами можно и без необходимости перегенерировать код на C. В целом, у меня было желание сделать не столько компилятор, сколько преобразователь одной формы исходного кода в другую, хотя и с упором на работоспособность, а не красоту выходного кода.

Цитата:
Это, впрочем, не критика, мое недопонимание архитектуры.
Ничего не имею против критики в истинном понимании этого слова.

Автор:  Comdiv [ Вторник, 11 Сентябрь, 2018 12:24 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Код:
-#include <stdbool.h>

Расскажите, пожалуйста, почему эта строчка препятствует сборке через VS.

Автор:  Димыч [ Вторник, 11 Сентябрь, 2018 13:44 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Comdiv писал(а):
Код:
-#include <stdbool.h>

Расскажите, пожалуйста, почему эта строчка препятствует сборке через VS.

Изначально я начал собирать на VS 2012, однако stdbool.h появился в VS2013

https://blogs.msdn.microsoft.com/vcblog/2013/07/19/c99-library-support-in-visual-studio-2013/

В общем сейчас проверил, можно stdbool не убирать, на VS 2015 компилируется и без этого. Но я бы все-равно убрал #include <stdbool.h> внутрь o7.h.

Автор:  Димыч [ Вторник, 11 Сентябрь, 2018 13:47 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Comdiv писал(а):
Димыч писал(а):
По C/C++ коду не очень понятно, зачем в условной компиляции C++, это намеренно сделано?
Изначально я хотел, чтобы генерировался код, компилируемый и как C, и как C++. Пока это не так из-за чехарды с тэгами структур, но планируется в конечном итоге исправить.

Мне кажется, что это как раз избыточно, пусть уже будет C, для C++ код получается не совсем "родной".

Автор:  Comdiv [ Вторник, 11 Сентябрь, 2018 14:40 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Димыч писал(а):
Изначально я начал собирать на VS 2012, однако stdbool.h появился в VS2013

https://blogs.msdn.microsoft.com/vcblog/2013/07/19/c99-library-support-in-visual-studio-2013/

В общем сейчас проверил, можно stdbool не убирать, на VS 2015 компилируется и без этого. Но я бы все-равно убрал #include <stdbool.h> внутрь o7.h.

В Microsoft, конечно, с юмором подходят/подходили к стандартам, но я постараюсь это учесть.

Автор:  Comdiv [ Вторник, 11 Сентябрь, 2018 14:45 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Димыч писал(а):
Цитата:
Изначально я хотел, чтобы генерировался код, компилируемый и как C, и как C++. Пока это не так из-за чехарды с тэгами структур, но планируется в конечном итоге исправить.
Мне кажется, что это как раз избыточно, пусть уже будет C, для C++ код получается не совсем "родной".
Тут дело не в том, чтобы сделать код родным для С++, а в том, чтобы упростить возможность использования кода из С++. Это мой обычный подход при создании кода на C. В любом случае эта задача не в приоритете.

Автор:  Димыч [ Среда, 12 Сентябрь, 2018 12:43 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Да, теперь из мастера собирается в VS2015 корректно.

Автор:  Comdiv [ Суббота, 15 Сентябрь, 2018 12:11 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Добавил сборщик простых Android-приложений - http://comdivbyzero.blogspot.com/2018/0 ... droid.html

Автор:  Kemet [ Суббота, 15 Сентябрь, 2018 13:06 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

В VS2017 bootstrap собирается, а дальше...
Код:
g:\H\SOURCE\compilers\OBERON\vostok>result\bs-o7c run make.Help -infr . -m source -cc cl.exe
Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.15.26726 для x64
(C) Корпорация Майкрософт (Microsoft Corporation).  Все права защищены.

cl: командная строка warning D9035: использование параметра "o" нежелательно, он будет удален в следующих выпусках
cl: командная строка warning D9026: параметры применяются ко всей командной строке
CFiles.c
Platform.c
Out.c
Log.c
V.c
Utf8.c
OsExec.c
VDataStream.c
StringStore.c
PlatformExec.c
PosixDir.c
WindowsDir.c
Dir.c
make.c
o7.c
Создание кода...
Microsoft (R) Incremental Linker Version 14.15.26726.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:CFiles.exe
/out:C:\Users\D899~1\AppData\Local\Temp\o7c-make\make.exe
CFiles.obj
Platform.obj
Out.obj
Log.obj
V.obj
Utf8.obj
OsExec.obj
VDataStream.obj
StringStore.obj
PlatformExec.obj
PosixDir.obj
WindowsDir.obj
Dir.obj
make.obj
o7.obj
WindowsDir.obj : error LNK2019: ссылка на неразрешенный внешний символ findfirst в функции WindowsDir_FindFirst
WindowsDir.obj : error LNK2019: ссылка на неразрешенный внешний символ findnext в функции WindowsDir_FindNext
WindowsDir.obj : error LNK2019: ссылка на неразрешенный внешний символ findclose в функции WindowsDir_Close
C:\Users\D899~1\AppData\Local\Temp\o7c-make\make.exe : fatal error LNK1120: неразрешенных внешних элементов: 3
Error during C compiler call

Автор:  Comdiv [ Суббота, 15 Сентябрь, 2018 13:13 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Для трансляции через cl.exe нужно сделать обёртку компилятора, поддерживающую его ключи. Но как-то подозрительно далеко зашла трансляция без этой поддержки.

Автор:  Comdiv [ Суббота, 15 Сентябрь, 2018 13:21 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Я смотрю в документации Windows есть _findfirst, но нет findfirst. Они сделали чистку? В чём был её смысл?

Автор:  Comdiv [ Суббота, 15 Сентябрь, 2018 13:37 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

Добавил _ к именам недостающих функций - в WINE этот вариант тоже работает.

Автор:  Kemet [ Суббота, 15 Сентябрь, 2018 16:09 ]
Заголовок сообщения:  Re: Восток - Транслятор Oberon-07

да, сборка нормально проходит

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