Sat Oct 11 2003 23:03, Roman Khvatov wrote to Ilia Tarasov:
IT>> Кстати, JCXZ ведь прилично способствует уменьшению числа тактов? А IT>> более мощные варианты аппаратной реализации команд цикла?
RK> Угу, только у компиляторов начинаются проблемы с восстановлением структур RK> циклов _задолго_ до выхода на уровень кодогенерации. RK> Разложить уже оптимизированный цикл в команды типа JCXZ проблем не RK> представляет :)
А прямое соответствие конструкций высокого уровня машинному коду не лучше? Зачем все-таки мучаться с ассемблером, далеким от потребностей прикладного программиста?
RK> Система команд тут не при чем - эти оптимизации делаются на уровне RK> промежуточного представления front-end'а и оптимизатора. А он обычно RK> очень далек от системы команд целевого процессора.
...... !!!!!!!!! (См. выше)
IT>> Hу слава богу, добрались наконец-то до такого вывода!!! :)))) Да, IT>> полностью согласен. Именно так и работаем сейчас. Только Си - это IT>> частный случай... хотя почему бы и не он?
RK> Я имел в виду любой класический процедурный язык, так что 'почему бы и не RK> С' :)
Именно о "любом классическом процедурном языке" и речь! :) Возможно, также и о чем-нибудь функциональном, в некоторых пределах. Вобщем, с грамматикой-то можно обращаться уже довольно свободно, гораздо свободнее, чем при наличии ассемблера или Си.
IT>> Абсолютно не кажется! :) Их именно потому и целый выводок, что отличия IT>> косметические - в синтаксисе конструкций.
RK> Так кто мешал сделать косметические отличия и наплодить выводок Форт RK> подобных языков? Как показывает практика, если язык чего то стоит, то от RK> него начинают строить другие языки, от Форта же пока ничего не построили.
Почему не построили? Были производные, надо на forth.org.ru архивы новостей посмотреть. Впрочем, новая реализация Форта вполне может рассматриваться как производная. Стековая машина и есть стековая машина - от нее много производных не построишь. А производные от процедурных языков различаются в основном синтаксисом и иногда системой типов.
IT>> HDL вобщем-то собирательное название для "Hardware Description IT>> Languages". Так что это все же "язык описания аппаратуры". Причем IT>> конкретные трансляторы, скажем, VHDL, позволяют описывать IT>> электрические соединения на уровне обычных переменных и взаимосвязей IT>> между ними.
RK> Только заметь, что эти переменные и взаимосвязи весьма специфичные, они RK> находятся ближе к структурам аппаратного мира, чем математического.
А что там особенно специфичного? Что переменные привязываются к аппаратным ресурсам? Выражения-то все равно математические. И управляющие конструкции очень схожи с конструкциями ЯВУ.
IT>> Тут много схемотехнических решений, специфичных для конкретных IT>> архитектур ПЛИС. Вкратце могу сказать, что это делается,
RK> Интересно, а как?
В основном разные способы разнесения транспортов по временам/фазам тактового сигнала, умножение частоты для более быстрого блока, раздельное использование фронта и спада для разных групп устройств...
IT>> Синтаксический анализатор - слова FIND и NUMBER (или есть в словаре, IT>> или нет, но это число).
RK> Это не синтаксический анализатор - это всего навсего управление таблицей RK> символов (оно есть и в обычных компиляторах)
Эта операция просто стоит на месте синтаксического анализатора, если говорить о классическом порядке фаз компиляции. Кстати, обрати внимание - "всего-навсего управление таблицей символов"... и ничего более.
IT>> Семантический есть, например, у "закрывающих" слов из конструкций IT>> управления. THEN без IF - тоже возможная ошибка, прекрасно IT>> отслеживаемая анализатором.
RK> Это отслеживает не анализатор (которого нет), а сами слова. Так что RK> контролируемая часть довольно мала :(
Хотя у этой собачки и коротенькие лапки, до пола они все же достают... :))) Это действительно не анализатор, но то, что _исполняет его функцию_. Разве не изящно - не просматривать весь текст в поисках закрывающего then для этого if, а дать возможность конструкции самой проконтролировать себя на корректность. case , например, пишется на самом Форте (800 байт текста), причем его поддержка в базовом словаре не требуется!
IT>> поскольку самостоятельные поделки IT>> интерпретаторов байт-кода и самопальных целевых языков частенько IT>> имеют некорректности просто в грамматике.
RK> Hу не настолько все плохо :)
Но времени-то требует. И человека, который уделит специальное внимание разработке этого уникального для задачи языка. У кого-то действительно есть такой опыт... кстати, качество кода, удобство и проч. там абсолютно безупречное?
IT>> Форт по крайней мере является завершенным языком для стековой машины, IT>> и многие вещи в нем не вполне тривиальны.
RK> Ага, и не вполне понятны стороннему наблюдателю :)
Например?
IT>> К тому же дискуссии в реале IT>> с ярыми сторонниками Си приводили обычно к тому, что они начинали с IT>> жаром доказывать, что в Си "тоже можно" так сделать, т.е. обеспечить IT>> рантаймовый разбор скриптов и доступ к оборудованию на уровне портов IT>> и памяти.
RK> Можно, можно на С написать Форт, но надо ли? Если нужен интерпретатор, то RK> есть довольно много готовых.
Просто для интереса - сколько работают в DPMI в нулевом кольце? И сколько из них позволяют делать ассемблерные вставки в нативном 32-битном коде, а также пользоваться SVGA-графикой и делать POSIX-овые вызовы? Когда я начал писать свой транслятор, требования были именно такие. Тогда я ничего не нашел, хотя и спрашивал. А сейчас что-то вдруг все заохали...
IT>> которые должны выполняться.... Так извините, ребята, это вы IT>> Форт-машину хотите сделать, только зачем-то на Си и зачем-то с IT>> эмуляцией стека.
RK> Так просили интерпретатор - вот вам интерпретатор :)
Так почему он по своим свойствам так похож на Форт? :) Причем люди обычно были свято убеждены, что все эти подходы они вот прямо тут в результате дискуссии и открыли, интуитивно! :)))) Имеющиеся наработки по Форту, кстати, позволяют достаточно аккуратно обойти некоторые тонкие подводные камни. Наконец, Форт компилирует!!! А на что может быть похоже поделие на Си, у которого да хотя бы таблица символов обычно либо маленькая и статическая, либо динамические выделяемая и дико медленная? Это я пытался давать людям попробовать, потом плюнул, написал руководство по Форту и распечатал в нескольких экземплярах. Ничего, работают люди...