OberonCore https://forum.oberoncore.ru/ |
|
Oml - МультиОберон для LLVM https://forum.oberoncore.ru/viewtopic.php?f=157&t=6426 |
Страница 2 из 3 |
Автор: | Artyemov [ Суббота, 04 Июль, 2020 01:41 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Цитата: С сегодняшнего дня завершена регистрация домена obertone.ru В смысле: прекращено существование? |
Автор: | Иван Денисов [ Суббота, 04 Июль, 2020 07:11 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Artyemov писал(а): Цитата: С сегодняшнего дня завершена регистрация домена obertone.ru В смысле: прекращено существование? ответил тут: viewtopic.php?f=127&t=6491&p=112120#p112120 |
Автор: | arlean1 [ Воскресенье, 05 Июль, 2020 17:19 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Дмитрий Дагаев писал(а): МультиОберон для LLVM содержит в себе полностью новый бэкенд LLVM версии 5.0. интересно - возможно ли будет использовать хотя бы в перспективе многоязычный LTO из проекта LLVM? |
Автор: | Дмитрий Дагаев [ Воскресенье, 05 Июль, 2020 20:10 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
arlean1 писал(а): Дмитрий Дагаев писал(а): МультиОберон для LLVM содержит в себе полностью новый бэкенд LLVM версии 5.0. интересно - возможно ли будет использовать хотя бы в перспективе многоязычный LTO из проекта LLVM? Непонятен вопрос, что значит использовать? Что мы хотим получить? Удаление неиспользуемых библиотечных функций, как в примере LTO - Link Time Optimization? |
Автор: | arlean1 [ Воскресенье, 05 Июль, 2020 21:00 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Дмитрий Дагаев писал(а): Непонятен вопрос, что значит использовать? Что мы хотим получить? Удаление неиспользуемых библиотечных функций, как в примере LTO - Link Time Optimization? Другое имелось в виду - LTO - это Кросс-язык LLVM, как независимая от языка основа, обеспечивает базис, на котором исходный язык (на котором был написан конкретный фрагмент кода) больше не имеет значения. Например - существенные части кодовой базы Firefox написана на Rust. Команда разработчиков низкоуровневых инструментов Mozilla реализовали его в компиляторе Rust, и теперь Rust можно интегрировать с существующей кодовой базой C / C ++. |
Автор: | Дмитрий Дагаев [ Понедельник, 06 Июль, 2020 09:24 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
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, идет в несколько другую сторону, не скажу, в лучшую или в худшую. |
Автор: | Comdiv [ Воскресенье, 11 Апрель, 2021 15:34 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Не помню, было ли это где. В чём была мотивация сделать LLVM версию вдобавок к компиляции через С? |
Автор: | Дмитрий Дагаев [ Воскресенье, 11 Апрель, 2021 17:33 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Получить бэкенд компилятора, имеющий возможности, предоставляемые llvm. С генерацией объектников. |
Автор: | Comdiv [ Воскресенье, 11 Апрель, 2021 17:56 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Но эти возможности даёт и С через соответствующий frontend. Есть же что-то особенное? |
Автор: | Иван Денисов [ Воскресенье, 11 Апрель, 2021 18:29 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Идея в оптимизирующих алгоритмах для LLVM была... А теперь вроде и в WebAssembly через LLVM проще транслировать? И ещё слышал, что Apple теперь принимает в AppStore только код на LLVM, так что смысл точно есть! |
Автор: | Comdiv [ Воскресенье, 11 Апрель, 2021 18:57 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Я повторю, что это достижимо и через clang - соответствующий frontend к LLVM. Что сверх этого? И за изменениями от Apple Вы не угонитесь, а WebAssembly лучше транслировать напрямую. |
Автор: | Дмитрий Дагаев [ Воскресенье, 11 Апрель, 2021 21:13 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Вам, наверное, нужен партнёр для форумной борьбы. Это не ко мне. |
Автор: | Дмитрий Дагаев [ Понедельник, 12 Апрель, 2021 11:03 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
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. И до сих пор считаю, поступил правильно. |
Автор: | Comdiv [ Понедельник, 12 Апрель, 2021 14:45 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Спасибо за столь подробный ответ. Жаль, что пришлось Вас заставить дублировать уже проделанную работу. Дмитрий Дагаев писал(а): 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. И до сих пор считаю, поступил правильно. Вы так пишете, будто это что-то плохое
|
Автор: | Дмитрий Дагаев [ Вторник, 13 Апрель, 2021 10:01 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Comdiv писал(а): А, кстати, почему не используется 11-я или любая другая версия новей 5-й? С-шное API не такое стабильное, как хотелось бы? Именно так Comdiv писал(а): Нет, нужно взять только Apple'вскую версию LLVM, только на Apple'вской инфраструктуре и всё это на свежих версиях, на которые укажет Apple. И всё равно будут сюрпризы, потому что вы лезете туда, куда вас не звали. И так постоянно. Стоит с этим связываться? Только если очень надо. Да, так постоянно, игра на чужом поле. Именно это я и имел в виду. |
Автор: | Иван Денисов [ Суббота, 24 Апрель, 2021 18:51 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Попробовал сегодня ещё раз подступиться. Выполнение получается. Код: 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 |
Автор: | Дмитрий Дагаев [ Понедельник, 26 Апрель, 2021 10:58 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Линкер в 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 не могу, пишите. |
Автор: | Иван Денисов [ Понедельник, 26 Апрель, 2021 11:35 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Спасибо, помогло! Опишу ход своих действий на 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 Семантическая нагрузка на однобуквенные коды почти полностью ингибирует возможность что-либо понять логически Тем не менее. Надо будет ещё через Блэкбокс попробовать. Там есть инструкция, попробую как-нибудь, обязательно. |
Автор: | TheAthlete [ Воскресенье, 23 Октябрь, 2022 12:31 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Компиляция для Fedora 31. Вместо Код: sudo apt install gcc clang llvm libtinfo5 multioberon нужно выполнитьКод: sudo dnf install gcc clang llvm ncurses-compat-libs Все остальное по иснтрукции выше. |
Автор: | TheAthlete [ Воскресенье, 23 Октябрь, 2022 14:24 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Реализовал тестовый пример: Код: 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 |
Страница 2 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |