OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 08:22

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




Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Суббота, 04 Июль, 2020 01:41 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 592
Цитата:
С сегодняшнего дня завершена регистрация домена obertone.ru

В смысле: прекращено существование?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Суббота, 04 Июль, 2020 07:11 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Artyemov писал(а):
Цитата:
С сегодняшнего дня завершена регистрация домена obertone.ru

В смысле: прекращено существование?

ответил тут: viewtopic.php?f=127&t=6491&p=112120#p112120


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 05 Июль, 2020 17:19 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 244
Дмитрий Дагаев писал(а):
МультиОберон для LLVM содержит в себе полностью новый бэкенд LLVM версии 5.0.


интересно - возможно ли будет использовать хотя бы в перспективе многоязычный LTO из проекта
LLVM
?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 05 Июль, 2020 20:10 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
arlean1 писал(а):
Дмитрий Дагаев писал(а):
МультиОберон для LLVM содержит в себе полностью новый бэкенд LLVM версии 5.0.


интересно - возможно ли будет использовать хотя бы в перспективе многоязычный LTO из проекта
LLVM
?

Непонятен вопрос, что значит использовать? Что мы хотим получить? Удаление неиспользуемых библиотечных функций, как в примере LTO - Link Time Optimization?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 05 Июль, 2020 21:00 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 244
Дмитрий Дагаев писал(а):
Непонятен вопрос, что значит использовать? Что мы хотим получить? Удаление неиспользуемых библиотечных функций, как в примере LTO - Link Time Optimization?

Другое имелось в виду - LTO - это Кросс-язык
LLVM, как независимая от языка основа, обеспечивает базис, на котором исходный язык (на котором был написан конкретный фрагмент кода) больше не имеет значения.

Например - существенные части кодовой базы Firefox написана на Rust.
Команда разработчиков низкоуровневых инструментов Mozilla реализовали его в компиляторе Rust, и теперь Rust можно интегрировать с существующей кодовой базой C / C ++.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Понедельник, 06 Июль, 2020 09:24 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
arlean1 писал(а):
Дмитрий Дагаев писал(а):
Непонятен вопрос, что значит использовать? Что мы хотим получить? Удаление неиспользуемых библиотечных функций, как в примере LTO - Link Time Optimization?

Другое имелось в виду - LTO - это Кросс-язык
LLVM, как независимая от языка основа, обеспечивает базис, на котором исходный язык (на котором был написан конкретный фрагмент кода) больше не имеет значения.

Например - существенные части кодовой базы Firefox написана на Rust.
Команда разработчиков низкоуровневых инструментов Mozilla реализовали его в компиляторе Rust, и теперь Rust можно интегрировать с существующей кодовой базой C / C ++.

Ну, здесь (Rust, Mozilla) я не очень в теме. Если у Вас есть что рассказать, расскажите подробнее. А вариантов сопряжения мультиязыковых систем я на своем веку видел десятки.

Что касается МультиОберона и LLVM, то нужно понимать 2 вещи:
1. МультиОберон не основывается на LLVM, это лишь один из бэкендов, не лучше и не хуже нативного BlackBox или OFront'a - принцип диверсификации соблюдается строго;
2. Модульность Оберона - это не одно и то же, что модульность в LLVM. И оптимизация использования памяти в Оберонах, кроме всего прочего, основывается и на динамической загрузке модулей. Поэтому Link Time Optimization, как это заявляется в документации LLVM, идет в несколько другую сторону, не скажу, в лучшую или в худшую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 11 Апрель, 2021 15:34 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Не помню, было ли это где. В чём была мотивация сделать LLVM версию вдобавок к компиляции через С?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 11 Апрель, 2021 17:33 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
Получить бэкенд компилятора, имеющий возможности, предоставляемые llvm. С генерацией объектников.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 11 Апрель, 2021 17:56 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Но эти возможности даёт и С через соответствующий frontend. Есть же что-то особенное?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 11 Апрель, 2021 18:29 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Идея в оптимизирующих алгоритмах для LLVM была... А теперь вроде и в WebAssembly через LLVM проще транслировать? И ещё слышал, что Apple теперь принимает в AppStore только код на LLVM, так что смысл точно есть!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 11 Апрель, 2021 18:57 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Я повторю, что это достижимо и через clang - соответствующий frontend к LLVM. Что сверх этого?

И за изменениями от Apple Вы не угонитесь, а WebAssembly лучше транслировать напрямую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 11 Апрель, 2021 21:13 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
Вам, наверное, нужен партнёр для форумной борьбы. Это не ко мне.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Понедельник, 12 Апрель, 2021 11:03 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
Comdiv писал(а):
Не помню, было ли это где. В чём была мотивация сделать LLVM версию вдобавок к компиляции через С?

Comdiv писал(а):
Я повторю, что это достижимо и через clang - соответствующий frontend к LLVM. Что сверх этого?

И за изменениями от Apple Вы не угонитесь, а WebAssembly лучше транслировать напрямую.

Я все эти мысли формулировал раньше, в докладах на днях Оберона в связном виде.

1. Резервирование. Мы живем в конкурентном мире. Даже природа резервирована: две руки, например. При этом левая рука ничего не дает сверх правой не дает. Столько лет я сталкиваюсь, что задачи нужно решать вчера и теми силами, которые есть в данный момент. Я не могу даже и предположить, какая задача у меня возникнет завтра, и что мне будет лучше для нее использовать: Omb, Omf или Oml.

2. Диверсификация. Мы живем в диверсифицирванном мире. У нас есть две ноздри и еще рот. Отказ одной из систем не даст нам задохнуться. Вот и у компиляторов/загрузчиков могут быть отказы/ошибки, а пользоваться ими нужно вчера. Это вопрос выживаемости.

3. Различия. Omf требует инфраструктуры gcc (clang, cl). Но продукты мы, как предприятие, поставляем Заказчику без исходников и среды разработки. Но если часть средств, как в BlackBox, требует динамической разработки, редактирования и подгрузки, то проще это делать, через библиотеку LLVM или натив Omb. С Oml можно напрямую генерить объектник и с ним работать, как с Omb.
3.1 Сборка объектников Omf из-под среды BlackBox выдает огромную кучу Warning'ов, и непонятно как с этим жить, работать из среды - неудобно. А еще на разных компиляторах и платформах.

4. Оптимизация кода. На сегодня используемая в версии LLVM 5.0 оптимизация кода уступает gcc. Что будет с версией 11 - не представляю. Что будет с разными архитектурами - тоже неясно.

5. Погоня за Apple. Погоня бессмысленна, догнать, чтобы дышать в спину? Нам нужно выживать в условиях Apple.

6. О постижении истины. Я, как-то приближаясь, к возрасту Сократа (только к возрасту), все дальше от постижения истины. Поэтому, говорить о том, какой их подходов будет жить, затрудняюсь. Как и затрудняюсь сказать, будет ли жить кот Шредингера. Условно примем, что Omb, Omf, Oml - это три кота Шредингера разных пород, находящиеся в клетке с любезно предложенной Вам крупицей с неизвестной функцией распада. Выжить должен хотя бы один.

6. Стратегия. По крайней мере, какая-то (плохая или хорошая) стратегия была заявлена, и я ей честно следую. Если мульти-бэкенды, есть версия 1.1, и есть задачи, которые ими решаются. Да, признаюсь, каюсь, я не стал тогда экономить на бэкендах: сделал три, а не 1 или 2. И до сих пор считаю, поступил правильно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Понедельник, 12 Апрель, 2021 14:45 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Спасибо за столь подробный ответ. Жаль, что пришлось Вас заставить дублировать уже проделанную работу.

Дмитрий Дагаев писал(а):
3.1 Сборка объектников Omf из-под среды BlackBox выдает огромную кучу Warning'ов, и непонятно как с этим жить, работать из среды - неудобно.
Если речь о предупреждениях, выдаваемых gcc/clang, и бессмысленных с точки зрения корректности генерируемого кода, то передача опции -w компилятору подавляет любые предупреждения. Более тонко можно настроить опциями в стиле "-Wno-pointer-sign", чтобы оставить возможность видеть другие, возможно, полезные предупреждения. Какие опции нужно использовать подсказывает сам компилятор в выводе предупреждений.

Дмитрий Дагаев писал(а):
4. Оптимизация кода. На сегодня используемая в версии LLVM 5.0 оптимизация кода уступает gcc. Что будет с версией 11 - не представляю. Что будет с разными архитектурами - тоже неясно.
А, кстати, почему не используется 11-я или любая другая версия новей 5-й? С-шное API не такое стабильное, как хотелось бы? Или что-то другое?

Дмитрий Дагаев писал(а):
5. Погоня за Apple. Погоня бессмысленна, догнать, чтобы дышать в спину? Нам нужно выживать в условиях Apple.
Эту часть я не понял. Когда я писал, что за изменениями от Apple не угнаться, то имел ввиду, что эта компания навязывает средства и инфраструктуру, которые активно меняет. Например, рассчитывать генерировать объектники для iPhone на GNU/Linux, да ещё со старым LLVM было бы очень наивно. Нет, нужно взять только Apple'вскую версию LLVM, только на Apple'вской инфраструктуре и всё это на свежих версиях, на которые укажет Apple. И всё равно будут сюрпризы, потому что вы лезете туда, куда вас не звали. И так постоянно. Стоит с этим связываться? Только если очень надо.

Дмитрий Дагаев писал(а):
Да, признаюсь, каюсь, я не стал тогда экономить на бэкендах: сделал три, а не 1 или 2. И до сих пор считаю, поступил правильно.
Вы так пишете, будто это что-то плохое :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Вторник, 13 Апрель, 2021 10:01 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
Comdiv писал(а):
А, кстати, почему не используется 11-я или любая другая версия новей 5-й? С-шное API не такое стабильное, как хотелось бы?

Именно так

Comdiv писал(а):
Нет, нужно взять только Apple'вскую версию LLVM, только на Apple'вской инфраструктуре и всё это на свежих версиях, на которые укажет Apple. И всё равно будут сюрпризы, потому что вы лезете туда, куда вас не звали. И так постоянно. Стоит с этим связываться? Только если очень надо.

Да, так постоянно, игра на чужом поле. Именно это я и имел в виду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Суббота, 24 Апрель, 2021 18:51 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Попробовал сегодня ещё раз подступиться. Выполнение получается.
Код:
ivan@lenovo:~/MyDir$ omlc run OmtestHelloWorld
Hello, World


Ставил через deb пакет на Mint 20.1.
(В зависимостях надо написать `libtinfo5`.)

Но вот при линковке выдаёт что-то такое
Код:
ivan@lenovo:~/MyDir$ omlc link -r OmtestHelloWorld
Omtest/Clur>gcc OmtestHelloWorld.o -o ../../Omtest/Clur/OmtestHelloWorld ../../System/Clur/OStrings.o ../../System/Clur/OLog.o ../../Host/Clur/HostConLog.o ../../System/Clur/Kernel.o ../../System/Clur/Runner.o -m64 -O0 -lm -ldl
/usr/bin/ld: OmtestHelloWorld.o: relocation R_X86_64_32S against symbol `Kernel_dLink' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../System/Clur/OStrings.o: relocation R_X86_64_32S against symbol `Kernel_dLink' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../System/Clur/OLog.o: relocation R_X86_64_32S against symbol `Kernel_dLink' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../Host/Clur/HostConLog.o: relocation R_X86_64_32S against symbol `Kernel_dLink' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../System/Clur/Kernel.o: relocation R_X86_64_32S against symbol `Kernel_dLink' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../System/Clur/Runner.o: relocation R_X86_64_32S against symbol `Kernel_dLink' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
===== linking Omtest/Clur/OmtestHelloWorld *error*= -3


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Понедельник, 26 Апрель, 2021 10:58 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
Линкер в gcc развивается, сделали опцию -no-pie и далее переходят на позиционно-независимые релокации. Во всяком случае, в gcc 4.8.5 этого нет, а в gcc 10.2.0 - есть. У меня в X64 - старый, у Вас - новее.

Предлагаю в Binur/Oml.cfg вставить -no-pie для линкера:
gcc_lnkopt=-no-pie -O0 -lm -ldl

Проверить на X64 не могу, пишите.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Понедельник, 26 Апрель, 2021 11:35 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Спасибо, помогло!

Опишу ход своих действий на Mint 20.1 x64.

Добавить репозиторий. Установить Мультиоберон из пакета и компиляторы. Создать рабочую папку и проинициализировать её.
Код:
sudo apt install gcc clang llvm libtinfo5 multioberon
mkdir mob
cd mob
/usr/local/bin/multioberon/omcr_install


после чего надо порправить файл Binur/Oml.cfg, добавить "-no-pie"
Код:
gcc_lnkopt=-no-pie -O0 -lm -ldl


Добавляем путь, компилируем, потом собираем все модули и собираем в один файл.
Код:
PATH=$PATH:/usr/local/bin/multioberon/Binur/
omlc co OmtestHelloWorld
omlc build OmtestHelloWorld
omlc build OStrings
omlc build OLog
omlc build Runner
omlc build Kernel
omlc link -r OmtestHelloWorld


Запускаем программу:
Код:
./Omtest/Clur/OmtestHelloWorld


Семантическая нагрузка на однобуквенные коды почти полностью ингибирует возможность что-либо понять логически :)
Тем не менее. Надо будет ещё через Блэкбокс попробовать. Там есть инструкция, попробую как-нибудь, обязательно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 23 Октябрь, 2022 12:31 

Зарегистрирован: Воскресенье, 23 Октябрь, 2022 12:23
Сообщения: 3
Компиляция для Fedora 31. Вместо
Код:
sudo apt install gcc clang llvm libtinfo5 multioberon
нужно выполнить
Код:
sudo dnf install gcc clang llvm ncurses-compat-libs


Все остальное по иснтрукции выше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 23 Октябрь, 2022 14:24 

Зарегистрирован: Воскресенье, 23 Октябрь, 2022 12:23
Сообщения: 3
Реализовал тестовый пример:
Код:
MODULE OmtestForLoop;
   IMPORT Runner, OLog;

   PROCEDURE MAIN*;
  VAR i: INTEGER;
   BEGIN
      OLog.String("Hellow, World"); OLog.Ln;

    FOR i := 0 TO 5 DO
      OLog.Int(i); OLog.Ln;
    END;
   END MAIN;

BEGIN
   Runner.SetRun(MAIN)
END OmtestForLoop.


Данный код нужно сохранить в файле Omtest/Mod/ForLoop.mod
Далее нужно выполнить следующие команды:
Код:
$ omlc co OmtestForLoop
oml:compiling ./Omtest/Mod/ForLoop.mob
  new symbol file >./Omtest/Clur/OmtestForLoop .ll=10708 .bc=3692
$ omlc build OmtestForLoop
===== obj-building HostConLog ... done
===== obj-building OmtestForLoop ... done
$ omlc link -r OmtestForLoop
===== linking Omtest/Clur/OmtestForLoop ... done
$ ./Omtest/Clur/OmtestForLoop
Hellow, World
 0
 1
 2
 3
 4
 5


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

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


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

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


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

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