OberonCore
https://forum.oberoncore.ru/

Сатори
https://forum.oberoncore.ru/viewtopic.php?f=6&t=769
Страница 2 из 2

Автор:  Vlad [ Суббота, 15 Декабрь, 2007 02:07 ]
Заголовок сообщения:  Re: Сатори

Geniepro писал(а):
Vlad писал(а):
P.S. Вообще если есть такая сильная уверенность в правильности оберонов для встроеннных систем, то кто мешает написать кросс-компилятор?
Ну, Вирту никто не мешает делать свои кросс-компиляторы Оберонов для микроконтроллеров Strong-ARM...


Так Вирт вроде как и не жалуется, что ему мешают жить убогие сишные компиляторы :)

Geniepro писал(а):
Ну, там ещё придётся сделать какую-никакую стандартную библиотечку, библиотеку арифметики с плавающей точкой, и т.д. и т.п....


Я думаю, что для начала даже этого не надо. Особенно для систем, про которые пишет Рэйлвэй Каген.

Geniepro писал(а):
Было у меня как-то желание сподвигнуться на это дело, но эти библиотеки перевесили сомнительные выгоды от такого транслятора. Меня лично Си вполне устраивает в микроконтроллерах, с чужим кодом общаться почти не приходится, а если и приходится, то переписываю всё нафик, а мой стиль написания программ на Си меня вполне устраивает и, по-моему, он вполне нормальный. Я не использую такие выкрутасы, как ++i+j++ и тому подобные маразмы... :о)


Я так понял, чту суть претензий Владимира в этом топике был к непредсказуемости поведения различных сишных компиляторов для разных платформ в смысле генерации кода. И к тому, что управлять этой генерацией в разных компиляторах приходится по разному. Если это не так, то пусть он меня поправит.

Автор:  Info21 [ Суббота, 15 Декабрь, 2007 13:00 ]
Заголовок сообщения:  Re: Сатори

Geniepro писал(а):
... но эти библиотеки перевесили сомнительные выгоды от такого транслятора. ...


Разве нет готовых таких библиотек (по кр. мере floating point) в, скажем, ETH Oberon?
Какие еще библиотеки тут имеются в виду?

Автор:  AVC [ Суббота, 15 Декабрь, 2007 14:52 ]
Заголовок сообщения:  Re: Сатори

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

А что такого с библиотекой арифметики с плавающей точкой?
Если можно, поясните, я живо интересуюсь этой темой, т.к. у нас своя библиотека для нашего процессора, у которого есть блок FPU, но там только простые операции (+, -, *, / и т.п.), функции приходится реализовывать самим.
Любая информация на эту тему может оказаться полезной.
Например, на недавней конференции в МАИ (точнее, на чаепитии непосредственно после нее :) ) Info21 сказал на эту тему пару слов (наверное, он и сам этого не заметил), а я их взял за основу и существенно повысил эффективность библиотечных функций (именно с плавающей точкой :) ).

Автор:  Geniepro [ Суббота, 15 Декабрь, 2007 23:39 ]
Заголовок сообщения:  Re: Сатори

Info21 писал(а):
Разве нет готовых таких библиотек (по кр. мере floating point) в, скажем, ETH Oberon?
Ну, наверное, есть. Просто в тот момент мне они как-то не попадались...

AVC писал(а):
А что такого с библиотекой арифметики с плавающей точкой?
Да вобщем-то ничего особенного, просто в тот момент готовой её под рукой у меня не было, без неё никак (а в контроллере никакой арифметики кроме целочисленной не было), и самому её с нуля на ассемблере делать хоть и интересно, но некогда было... :о)

AVC писал(а):
я их взял за основу и существенно повысил эффективность библиотечных функций (именно с плавающей точкой ).
Вот-вот, в промышленных компиляторах Си эта библиотека уже практически до совершенства доведена, и тратить время на самодельный велосипед...

Автор:  AVC [ Воскресенье, 16 Декабрь, 2007 01:59 ]
Заголовок сообщения:  Re: Сатори

Geniepro писал(а):
Вот-вот, в промышленных компиляторах Си эта библиотека уже практически до совершенства доведена, и тратить время на самодельный велосипед...

Интересно, что Вы имеете в виду?
У нас процессор свой, так же как и компилятор Си, и библиотека к нему.
Не думаю, что кто-то из создателей промышленных компиляторов успел осчастливить нас доведенной до совершенства библиотекой, разве что я не в курсе.

Автор:  Geniepro [ Воскресенье, 16 Декабрь, 2007 03:19 ]
Заголовок сообщения:  Re: Сатори

AVC писал(а):
У нас процессор свой, так же как и компилятор Си, и библиотека к нему.
Не думаю, что кто-то из создателей промышленных компиляторов успел осчастливить нас доведенной до совершенства библиотекой, разве что я не в курсе.

Ну, самопальные процессоры мне использовать не приходилось. увы... Но разве нельзя было портировать тот же GCC, например? По какой причине вы стали изобретать свой компилятор, если не секрет?

Автор:  AVC [ Воскресенье, 16 Декабрь, 2007 14:19 ]
Заголовок сообщения:  Re: Сатори

Geniepro писал(а):
Ну, самопальные процессоры мне использовать не приходилось. увы... Но разве нельзя было портировать тот же GCC, например? По какой причине вы стали изобретать свой компилятор, если не секрет?

Возможно, я несколько сбил Вас с толку, когда сказал про свой компилятор.
Его front-end (до построения синтаксических деревьев) взят из lcc.
http://en.wikipedia.org/wiki/LCC_%28compiler%29
http://www.cs.princeton.edu/software/lcc/
Дело было так. Как я устроился на работу, меня попросили написать компилятор Си за 2-3 месяца. Я прикинул, какой из доступных front-end'ов позволит мне надежнее справиться с этой задачей, и выбрал lcc.
(Для этого я целый день потратил на эксперимент: реализовал виртуальную стековую машину, быстро "сварганил" для нее генератор кода -- только для целых чисел, затем прогнал ряд тестов; в результате этого этого я почуствовал уверенность в том, что я выполню работу в срок.)
Документации у меня тогда не было, и я руководствовался исключительно документом, описывающим синтаксические деревья.
http://storage.webhop.net/documents/interface4.pdf
Поэтому я пошел в обход типичного для lcc back-end'а (через .md-файлы), а генерил код непосредственно по дереву. Т.к. синтаксический разбор в lcc осуществляется методом рекурсивного спуска (нетипично для компиляторов Си, хотя первый компилятор Ритчи тоже так делал), то у меня возникла мысль облегчить себе генерацию кода с помощью (свободного от парсинга) yacc. Я его использовал для "внедрения" столь любимого Вами паттерн-матчинга. :) Потом узнал, что этот способ генерации кода не нов (т.н. генератор кода Грэхема-Гленвилла из "Красного дракона"). Принцип прост: линеаризуем синтаксическое дерево (как префиксную польскую запись) и пропускаем через специальный парсер на основе yacc, который генерит код. Этот подход особенно удачен, когда процессор использует много режимов адресации (у нас их было 8 ).
Короче, компилятор я сделал быстро. Ну, а дальше его поддержка, написание новых компиляторов на основе lcc (для других процессоров), уже с новыми знаниями: к этому времени я уже познакомился с книгой Хэнсона и Фрейзера.

Мой вопрос по поводу библиотек. Их специально затачивают под конкретную систему команд (порой даже пишут на ассемблере), т.к. эффективность очень важна. Так что "совершенная" реализация библиотеки, одинаково пригодная везде, думается, не существует. (А от ПК-шных реализаций float-point многому не научишься: как правило, все сводится к вызову встроенной операции сопроцессора.) Но, возможно, я просто не в курсе, и где-то существует эталонная универсальная сишная библиотека.

Автор:  Евгений Темиргалеев [ Понедельник, 17 Декабрь, 2007 09:33 ]
Заголовок сообщения:  Re: Сатори

AVC писал(а):
Мой вопрос по поводу библиотек. Их специально затачивают под конкретную систему команд (порой даже пишут на ассемблере), т.к. эффективность очень важна. Так что "совершенная" реализация библиотеки, одинаково пригодная везде, думается, не существует. (А от ПК-шных реализаций float-point многому не научишься: как правило, все сводится к вызову встроенной операции сопроцессора.) Но, возможно, я просто не в курсе, и где-то существует эталонная универсальная сишная библиотека.

А Кнута не смотрели? У него, кажется в первом томе, есть алгоритмы для вычислений с плавающей точкой. Как раз с оговоркой, что счас дескать практически в любой процессор встроено в виде команд и разработчикам напрягаться по этому поводу не надо.

Автор:  AVC [ Понедельник, 17 Декабрь, 2007 11:32 ]
Заголовок сообщения:  Re: Сатори

Евгений Темиргалеев писал(а):
А Кнута не смотрели? У него, кажется в первом томе, есть алгоритмы для вычислений с плавающей точкой. Как раз с оговоркой, что счас дескать практически в любой процессор встроено в виде команд и разработчикам напрягаться по этому поводу не надо.

Возможно, имеется в виду раздел 4.2 (Арифметика чисел с плавающей точкой), находящийся все же во втором томе. :)
Если я не ошибаюсь, там определяются только основные операции (сложение, умножение), а примеров реализации математических функций нет.
BTW, у меня сложилось мнение, что вычислениям с плавающей точкой учат неважно. Соответствующие разделы в учебниках (если они есть!) обычно самые куцые. Учебные примеры вообще зачастую пишутся для мифической абсолютной, а не относительной погрешности! (Вроде пока abs(y - y0) > eps.)
В моем представлении хорошая библиотечная математическая функция обыкновенно состоит из 3-х последовательных шагов:
1) проверка значения аргумента на корректность и (в случае корректности аргумента) приведение его значения к диапазону, пригодному для эффективных вычислений (иначе вычисления либо неэффективны, либо некорректны, что примерно соответствует услышанной в МАИ фразе "большому числу -- большой синус" :) );
2) эффективное вычисление значения для аргумента из "правильного" диапазона: никаких циклов, коэффициенты многочлена и их число известны заранее, применяем схему Горнера в виде одного-единственного выражения (что позволяет даже неважному компилятору сгенерировать код практически на уровне эффективности ассемблера);
3) (если требуется) преобразование полученного результата к результату, соответствующему реальному аргументу.

Автор:  Евгений Темиргалеев [ Понедельник, 17 Декабрь, 2007 14:59 ]
Заголовок сообщения:  Re: Сатори

AVC писал(а):
Возможно, имеется в виду раздел 4.2 (Арифметика чисел с плавающей точкой), находящийся все же во втором томе. :) Если я не ошибаюсь, там определяются только основные операции (сложение, умножение), а примеров реализации математических функций нет.
Он самый. Подробно не изучал, просто помню, что у Кнута это было.

Автор:  Wlad [ Пятница, 21 Декабрь, 2007 21:49 ]
Заголовок сообщения:  Re: Сатори

Vlad писал(а):
Я так понял, чту суть претензий Владимира в этом топике был к непредсказуемости поведения различных сишных компиляторов для разных платформ в смысле генерации кода. И к тому, что управлять этой генерацией в разных компиляторах приходится по разному. Если это не так, то пусть он меня поправит.

Поправляю.
Мои слова сомнений были вызваны личным опытом применения "классического" Си и выявленных евойных неудобств в части инициализации переменных во время объявлений. Классический язык для классических фоннеймановских архитектур в части поддержки декларативных вопросов не сильно копенгаген, когда его взгромождают на гарвардские машины... Извращаться приходиться... Патамушто язык предполагает и опирается на прямую известность механизьма поддержки исполнения. А Обероны - не операются... со всеми последующими выводами с домыслиями (хто взмози. канешна...) Более того, Вирт всегда провозглашал и всячески этот принцип поддерживал и проводил....

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