OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 12:54

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




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Суббота, 15 Декабрь, 2007 02:07 

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


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

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


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

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Суббота, 15 Декабрь, 2007 13:00 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Geniepro писал(а):
... но эти библиотеки перевесили сомнительные выгоды от такого транслятора. ...


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Суббота, 15 Декабрь, 2007 14:52 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Суббота, 15 Декабрь, 2007 23:39 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Info21 писал(а):
Разве нет готовых таких библиотек (по кр. мере floating point) в, скажем, ETH Oberon?
Ну, наверное, есть. Просто в тот момент мне они как-то не попадались...

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Воскресенье, 16 Декабрь, 2007 01:59 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Geniepro писал(а):
Вот-вот, в промышленных компиляторах Си эта библиотека уже практически до совершенства доведена, и тратить время на самодельный велосипед...

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Воскресенье, 16 Декабрь, 2007 03:19 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
AVC писал(а):
У нас процессор свой, так же как и компилятор Си, и библиотека к нему.
Не думаю, что кто-то из создателей промышленных компиляторов успел осчастливить нас доведенной до совершенства библиотекой, разве что я не в курсе.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Воскресенье, 16 Декабрь, 2007 14:19 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
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 многому не научишься: как правило, все сводится к вызову встроенной операции сопроцессора.) Но, возможно, я просто не в курсе, и где-то существует эталонная универсальная сишная библиотека.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Понедельник, 17 Декабрь, 2007 09:33 
Модератор
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Понедельник, 17 Декабрь, 2007 11:32 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Понедельник, 17 Декабрь, 2007 14:59 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
AVC писал(а):
Возможно, имеется в виду раздел 4.2 (Арифметика чисел с плавающей точкой), находящийся все же во втором томе. :) Если я не ошибаюсь, там определяются только основные операции (сложение, умножение), а примеров реализации математических функций нет.
Он самый. Подробно не изучал, просто помню, что у Кнута это было.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сатори
СообщениеДобавлено: Пятница, 21 Декабрь, 2007 21:49 

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

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


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

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


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

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


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

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