Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср янв 20, 2021 14:23

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 13:50 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Хищник писал(а):
Ориентированные графы, тройки?


Древовидный граф разворачивается в польскую запись пройдя по нему в глубь
и отмечая обратный ход (выход из ветви).
Компилятор в том-же порядке и производит запись в граф.
Т.е. если мы станем отмечать обращение к процедуре записи в граф,
мы польскую запись и получим. На сколько я понимаю, тройки это тот-же граф
с особым представлением данных.

Хищник писал(а):
Я вот вижу, что такой подход изначально ведет в тупик, поскольку перебирает варианты. А потом начнутся комбинации вариантов.


На самом деле я не о том, ну да ладно. Что касается вариантов:
Достаточно использовать правила затрагивающие 2 - 3 машинные инструкции.
Но эти инструкции могут быть проложены нейтральным по отношении к ним котом.
Вот для определения этой нейтральности я и завел таблицы.
Например, нужно определить нет ли запись в регистр EAX - я тупо перечислил почти все
команды пишущие в этот регистр которые нашел в листинге. Мне так проще, чтобы не разбираться с
документацией по архитектуре проца. Преобразования затрагивающие большее количество
инструкции автоматически выражаются через мелкие. Т.к. при срабатывании правила,
в цикле производится следующая попытка, пока ни одно правила не сработает.

Хищник писал(а):
f1(x+y) и f2(x+y) компилятор сможет выделить общее выражение x+y и вычислять его отдельно. А в Форте такое сделать нельзя, потому что допустимы побочные эффекты, и во второй раз X Y + может сработать совсем не так, как в первый.


По этому Форт и не язык, поскольку форт-система может интерпретировать фрагмент текста
как угодно. Почистить скомпилированный код от лишних действий вполне реально.
Оптимизатор, при этом, становится независимым от входного синтаксиса.

Хищник писал(а):
Вместо того, чтобы прямо набрать руками нужный ассемблерный текст, программист должен разбираться в исходных текстах продукта, заставляя его генерировать соответствующий код.


С оценкой трудозатрат я затрудняюсь. В разных ситуациях может быть по разному.
Во всяком случае, при наличии оптимизатора, есть выбор. Можно произвести разделение
труда между сотрудниками: один пишет программу на форте ничего не зная не об оптимизаторе
не об ассемблере, другой отвечает за быстродействие критических фрагментов, модифицируя
оптимизатор. Можно объявить в конференции, о том, что некий фрагмент плохо оптимизируется.
Можно написать на ассемблере, но не сразу, а сначала на Форте, потом модифицировать
результат оптимизации. Вариант на Форте, может пригодится при перенесении на другую
платформу.

Хищник писал(а):
И о каких именно вещах заказчик может объявить? ОС реального времени? АСУТП? Движок для трехмерной графики? Интернет-магазин?


Все эти продукты существуют в открытых исходниках. Найдутся и те программеры кто в них разбирался и даже
кто принимал участия в их разработках и кому не трудно произвести требуемую модификацию.

Хищник писал(а):
Ой, а напиши мне чего-нибудь за мизерную плату


Ну например, правило для того-же оптимизатора(1 правило за доллар).
Или создание оптимизатора для другой платформы
(при наличии готового транслятора с подпрограммным шитым кодом).

Наличие часто встречающегося пожелания, повысит интерес к полуфабрикатам ведущим в этом направлении.


Последний раз редактировалось Mihail Пт окт 08, 2010 14:29, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 14:05 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
dynamic-wind писал(а):
оно и видно


Чего видно? Ты про оптимизатор? Бенчмарк делал?

dynamic-wind писал(а):
с трудом представляю "серьезный" Н-проходный компилятор для форта и на форте.


Какая проблема запустить интерпретацию файла несколько раз?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 14:53 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 22 раз.
Поблагодарили: 58 раз.
dynamic-wind писал(а):
С другой стороны, я с трудом представляю "серьезный" Н-проходный компилятор для форта и на форте.

А вы занимались вопросами оптимизации кода?

dynamic-wind писал(а):
Идеология форта--простота, да и в теорию он плохо укладывается.

В теорию чего?
Из постфикса запросто получаются "четверки", дальше рулит классика.
Другое дело, что обычно определения достаточно коротки, и делать более чем в два прохода что либо бессмысленно (второй проход для укорачивания длинных ссылок).

chess писал(а):
У Ларионова в SMALL32 делалось 5 проходов.

Однако, надо признать, что в пять проходов делалась не оптимизация, а сборка образа (без лишнего, т.е. неиспользуемого, кода).

Mihail писал(а):
На сколько я понимаю, тройки это тот-же графс особым представлением данных.

обычно четверки, а не тройки, представляют очень простую вещь по своему смыслу - это почти ассемблерная запись, где есть четыре вещи:
оператор, операнд приемник, операнд источник1, операнд источник2
При этом в качестве модели вычислительной платформы используется машина с бесконечным количеством регистров, то есть, операнды - это и есть эти самые регистры. Тройки - это те же четверки, в которых операнд источник и операнд приемник совмещены:
оператор, операнд приемник\источник, операнд источник.
После оптимизации количество регистров сокращается, для этого существуют различные методики (не особо сложные).
В любом случае линейные участки кода (такие, где нет ветвлений) могут в форте очень просто оптимизироваться, кроме того, как это делает Михаил, примитивы, не содержащие сложного кода могут запросто подставляться вместо вызова.
Оптимизация с помощью четверок интересна тем, что основные этапы оптмизации вообще не привязаны к какой либо аппаратной платформе, генерация кода при этом практически линейна и производится на последнем этапе компиляции.
Т.е. оптимизация кода не такая уж страшная вещь, как представляется, по крайней мере пока не появляются ветвления ;)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 16:28 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2129
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
dynamic-wind писал(а):
Ух ты! Не знал. Можно ссылку?

Не найду где это читал... Все равно там не было исходников.

Вообще не очень сложно организовать многопроходный компилятор, вот для spf как иллюстрация:
(надо только понять, что вы хотите с этого получить)
Код:
\ пример реализации многопроходнаой компиляции определений через :

0 VALUE NPASS

CREATE XSOURCE 0x101 ALLOT
0 VALUE X>IN
0 VALUE XDP
VARIABLE XFP 0 ,
VARIABLE XCURSTR
0 VALUE XN

: [begin]
  >IN @ TO X>IN  DP @ TO XDP  SOURCE XSOURCE $!
  SOURCE-ID FILE-POSITION DROP XFP 2! CURSTR @ XCURSTR !  ; IMMEDIATE

: [again]
   XSOURCE COUNT DUP #TIB ! TIB SWAP MOVE
   XCURSTR @ CURSTR ! X>IN  >IN ! XDP DP !
   XFP 2@ SOURCE-ID REPOSITION-FILE DROP  ; IMMEDIATE

\ переопределение слова :
: : : NPASS TO XN POSTPONE [begin] ;

\ теперь в зависимости от значения  XN (номер прохода) компиляция может менять результат, например, по такой схеме :

3 TO NPASS \ количество проходов компиляции определений - здесь устнавливаем 4 ( 3 2 1 0 )

: name
XN CASE
3 OF code1 ENDOF
2 OF code2 ENDOF
1 OF code3 ENDOF
0 OF code4 ENDOF
ENDCASE ;

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 16:35 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
mOleg писал(а):
бычно четверки, а не тройки, представляют очень простую вещь по своему смыслу - это почти ассемблерная запись, где есть четыре вещи:
оператор, операнд приемник, операнд источник1, операнд источник2


Я так и думал. Если оператор рассмотреть как узел, а совпадение номера
операнд источника с операндам приемника предшествующего оператора, за связь,
мы собственно граф и получаем.

mOleg писал(а):
Оптимизация с помощью четверок интересна тем, что основные этапы оптмизации вообще не привязаны к какой либо аппаратной платформе, генерация кода при этом практически линейна и производится на последнем этапе компиляции.


В Форте работа компилятора и оптимизатора должна быть развязана по времени.
Т.к. пользователь имеет право вмешиваться в процесс компиляции ничего не зная об оптимизаторе.
Можно нативный код преобразовать в четверки там оптимизировать затем обратно в нативный.
Но в целесообразности этого сильно сомневаюсь. И будет ли при этом использоваться
особенности нативного процессора?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 16:54 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 22 раз.
Поблагодарили: 58 раз.
Mihail писал(а):
В Форте работа компилятора и оптимизатора должна быть развязана по времени.

Я уже предлагал, но, вероятно ты не понял.
Сама оптимизация может производиться после сборки слова, эту фазу достаточно легко отловить (см ;CREATE в форке), за одно получаем и возможность просто делать turnkey, и многопоточная компиляция, и простая декомпиляция кода.
Во-вторых, сама оптимизация может быть проще за счет простого "декодирования", а это делается легче, когда код представлен токенами (т.е. я таки предлагаю оптимизацию плясать от токенов), при этом для каждого примитива может быть использована ранее созданная последовательность "четверок" (они могут просто храниться в определенных полях словарной статьи). То есть, первая фаза генерации такого кода будет простой "склейкой" кусков из этих самых четверок в один, который в начале даже можно не оптимизировать (всеравно уже уйдет часть ненужного кода). И на этом самом уровне очень напрашивается псевдоассемблер (в котором можно писать код в терминах ФВМ, а не ассемблера целевой машины).

Mihail писал(а):
Т.к. пользователь имеет право вмешиваться в процесс компиляции ничего не зная об оптимизаторе.

дык ;)

Mihail писал(а):
Можно нативный код преобразовать в четверки там оптимизировать затем обратно в нативный./skip/ И будет ли при этом использоваться особенности нативного процессора?

а как же эти особенности используют компиляторы Си? Неужели не используют ;)

И все же предлагаю тему про оптимизатор выделить в отдельную ветку!

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur



За это сообщение автора mOleg поблагодарил: dynamic-wind
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 17:00 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
dynamic-wind писал(а):
Mihail писал(а):
Я как-то обошелся без теории, стало быть не особо она и нужна.
Вообще, подчас, знания обременяют, мешают находить новые решения.

оно и видно :))
С другой стороны, я с трудом представляю "серьезный" Н-проходный компилятор для форта и на форте.

И что в этом непредставимого?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 23:03 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
chess писал(а):
Тут надо уточнять про простоту, что это лишь простота(в смысле краткость, лаконичность) реализации транслятора.
Этот момент становится менее привлекательным из-за повышения математических возможностей харда.

Я бы отметил это как одну из тенденций в архитектуре процессоров. Действительно, регулярно появляются работы по созданию простого/эффективного с точки зрения аппаратуры, но сложного в программировании процессора. Главное - не перескочить через ту грань, за которой требование к определенным характеристикам компилятора превратится в лозунг, нереализуемый на практике.
chess писал(а):
По сути Форт дрейфует в сторону аккумулирования различных парадигм программирования за счет
открытости своего транслятора.
Уже в названиях форт-систем перестают употреблять слово форт(quest, vfx, quark и т.д.).

Quark - это точно Quark-Forth :) Просто есть же диалекты, да даже и просто разные реализации.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 23:55 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
Mihail писал(а):
Древовидный граф разворачивается в польскую запись пройдя по нему в глубь и отмечая обратный ход (выход из ветви).

А польскую запись потом можно будет превратить в исходный граф? Единственно возможным образом?
Mihail писал(а):
Достаточно использовать правила затрагивающие 2 - 3 машинные инструкции.
Но эти инструкции могут быть проложены нейтральным по отношении к ним котом.
Вот для определения этой нейтральности я и завел таблицы.
Например, нужно определить нет ли запись в регистр EAX - я тупо перечислил почти все
команды пишущие в этот регистр которые нашел в листинге. Мне так проще, чтобы не разбираться с
документацией по архитектуре проца.

А разве 2-3 машинные инструкции заменить более подходящим вариантом прямо в исходном тексте? Я тебе уже давно пытался объяснить, что то, чем ты занимаешься, не является оптимизацией. Этот термин имеет определенное значение с точки зрения математики, хотя на жаргоне программистов оптимизацией называют группу методов улучшения качества кода. Когда один фрагмент кода заменяется другим, и эффект от замены однозначен, это можно называть улучшением, но не оптимизацией. Например, многие команды x86 имеют дополнительно короткую форму, если работают с регистром eax. Если заменить обычную форму на короткую, оптимизацией такую замену назвать нельзя, потому что нет негативного эффекта, который необходимо рассмотреть в сочетании с позитивным. Вот если бы один из альтернативных вариантов имел, к примеру 10 байт длины и выполнялся за 18 тактов, а другой - 15 байт, но выполнялся за 16, то тут и проявилось бы понятие оптимальности, выраженное соответствующим критерием оптимальности. Например, если критерием оптимальности выбрана скорость, выбираем второй вариант, если размер - первый. А вот если критерий сложный, и включает множество параметров оценки, может потребоваться применение различных подходов для разных фрагментов одной и той же программы. Например, разворачивание цикла можно применять для коротких циклов, и не применять для длинных. Но все это - мои попытки объяснить "на пальцах", потому что начинать читать нужно ну хотя бы с Dragon book.
Mihail писал(а):
Можно произвести разделение
труда между сотрудниками: один пишет программу на форте ничего не зная не об оптимизаторе
не об ассемблере, другой отвечает за быстродействие критических фрагментов, модифицируя
оптимизатор.

А ничего, что второй сотрудник, который знает ассемблер, может и игнорировать существование твоего продукта, а писать самостоятельно?
Mihail писал(а):
Хищник писал(а):
И о каких именно вещах заказчик может объявить? ОС реального времени? АСУТП? Движок для трехмерной графики? Интернет-магазин?

Все эти продукты существуют в открытых исходниках. Найдутся и те программеры кто в них разбирался и даже
кто принимал участия в их разработках и кому не трудно произвести требуемую модификацию.

:))
Жду ссылок на исходники: какой-нибудь (любой) сертифицированной ОС РВ, LabView, Doom 3, и движка amazon.com ;)
Ты вообще в реальном мире обитаешь, или как?
Mihail писал(а):
Хищник писал(а):
Ой, а напиши мне чего-нибудь за мизерную плату

Ну например, правило для того-же оптимизатора(1 правило за доллар).

Но при этом формулировка проблемы, чтобы ты ее решил, заставит меня потратить времени существенно больше, чем на 1 доллар.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Пт окт 08, 2010 23:56 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
mOleg писал(а):
обычно четверки, а не тройки, представляют очень простую вещь по своему смыслу - это почти ассемблерная запись, где есть четыре вещи:
оператор, операнд приемник, операнд источник1, операнд источник2
При этом в качестве модели вычислительной платформы используется машина с бесконечным количеством регистров, то есть, операнды - это и есть эти самые регистры. Тройки - это те же четверки, в которых операнд источник и операнд приемник совмещены:
оператор, операнд приемник\источник, операнд источник.

У x86 как раз совмещены. Четверки подходят для трехадресной системы команд.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 06:59 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 22 раз.
Поблагодарили: 58 раз.
Хищник писал(а):
У x86 как раз совмещены. Четверки подходят для трехадресной системы команд.

ну не скажи, от команды зависит, например:
LEA EAX, [EBX][ECX]
это что? Или даже круче:
LEA EAX, [EBX][ECX][100]
это уже две четверки ;)
с другой стороны:
NOT EAX
;)
В этом плане ix86 архитектура ужастна, в ней есть и 0 операндные и одно, и двух, и трехоперандные команды. Да еще и некоторые регистры(даже пары регистров) для ряда операций фиксированы.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 10:58 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Хищник писал(а):
А польскую запись потом можно будет превратить в исходный граф?

Какие могут быть сомнения?

Хищник писал(а):
Единственно возможным образом?

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

Хищник писал(а):
то тут и проявилось бы понятие оптимальности

Поскольку, некачественный код оптимальны быть не может, повышая качество,
мы приближается к оптимальности.

Хищник писал(а):
А ничего, что второй сотрудник, который знает ассемблер, может и игнорировать существование твоего продукта, а писать самостоятельно?

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

Хищник писал(а):
Жду ссылок на исходники:

Я мел ввиду: можно найти что нибудь по данным категориям.
Я то как раз и говорю о том, что еще не все требуемые исходники открыты,
а система микроплатежей в самом зачаточном состоянии и нам приходится
пользоваться монстроидальными черными ящиками, вместо того, чтобы использовать Форт.
Но тенденции, к появлению полноценной системы микроплатежей, прослеживаются.
Т.ч. у фортеров есть надежда.

Хищник писал(а):
Ты вообще в реальном мире обитаешь, или как?

Я стараюсь не принимать желаемое за действительное.
Но и действительное за желаемое принимать не собираюсь.

Хищник писал(а):
Но при этом формулировка проблемы, чтобы ты ее решил, заставит меня потратить времени существенно больше, чем на 1 доллар.

Формулировка проблемы + 1 доллар может быть значительно меньше чем самостоятельная
правка незнакомых исходников (не говоря уже о написании ПО с нуля).
При развитой системе микроплатежей, четкая формулировка может не потребоваться.
Можно будет приобретать появляющиеся варианты и сообща о том, чем они не устраивают.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 12:26 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
mOleg писал(а):
ну не скажи, от команды зависит, например:
LEA EAX, [EBX][ECX]
это что? Или даже круче:
LEA EAX, [EBX][ECX][100]
это уже две четверки

Речь немного не об этом. Вот я записал add r5, r7, r8, и на PowerPC могу рассчитывать, что оно в такую команду и превратится. А на x86 это не имеет практического смысла, потому что придется как-то справляться с помещением результата в "r5" (предположим, что это символическое имя будет сопоставлено какому-то реальному регистру). На основе записи тройками или четверками можно выполнять оптимизацию размещения операндов с учетом дальнейших операций между ними, минимизируя количество регистровых пересылок и обращений к памяти.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 12:48 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 22 раз.
Поблагодарили: 58 раз.
Хищник писал(а):
Речь немного не об этом. Вот я записал add r5, r7, r8, и на PowerPC могу рассчитывать, что оно в такую команду и превратится. А на x86 это не имеет практического смысла, потому что придется как-то справляться с помещением результата в "r5" (предположим, что это символическое имя будет сопоставлено какому-то реальному регистру).

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 14:02 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
mOleg писал(а):
А вы занимались вопросами оптимизации кода?

Ну да. Улучшал кодогенератор в sml/nj, например. Мне как-то трудно представить ТАКИЕ
преобразования, которые там делаются, закодированными на форте--без сборки мусора,
pattern-matching'a и других вкусностей. Принципиально реализовать 30-проходный компилятор
можно и на машине Тьюринга, кто же спорит. Вопрос в том, сколько сил займет написание и отладка! Я думаю, много, раз мы имеем компиляторы уровня gcc для С, mlton для sml'я, ghc для хаскеля, sbcl для Лиспа -- а форт до сих пор компилируют в 1 проход с peephole-оптимизацией. :shuffle;

mOleg писал(а):
dynamic-wind писал(а):
Идеология форта--простота, да и в теорию он плохо укладывается.

В теорию чего?
Из постфикса запросто получаются "четверки", дальше рулит классика.
Другое дело, что обычно определения достаточно коротки, и делать более чем в два прохода что либо бессмысленно (второй проход для укорачивания длинных ссылок).

Олег, чтобы эффективно (и без лишнего геморроя) оптимизировать, язык должен иметь простую и четкую семантику. А форт настолько завязан на некоторые особенности фон-неймановской архитектуры (например, возможность перезаписывать ячейки памяти по указателям, которые вычислены произвольными арифметическими операциями), что... см. выше. [В других императивных языках есть хотя бы статическая типизация] [Знаете про слово restrict в С99?]
Как связана длина определений с количеством проходов--не понял :shock:
Когда мы делаем проход для подстановки коротеньких определений, после этого желательно делать заново
анализ, hoisting, CSE и прочее, затем снова проход для подстановки и т.д.--итеративно, для повышения оптимизации. Отсюда и берется множество проходов.


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

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB