Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
По моему, классикой (прямой или косвенный шитый код) будет вот это : : LOOP COMPILE (LOOP) <RESOLVE >RESOLVE ; IMMEDIATE плюс проверка на парность ?PAIRS внутри по вкусу, а вот уже само run_time-слово (LOOP) должно быть определено на ассемблере.
FIG-Forth - это ли не классика и воплощение духа Forth ? Там было так : : LOOP 3 ?PAIRS COMPILE (LOOP) BACK ; IMMEDIATE и сама (LOOP) на ассемблере.
По моему, классикой (прямой или косвенный шитый код) будет вот это : [b]: LOOP COMPILE (LOOP) <RESOLVE >RESOLVE ; IMMEDIATE[/b] плюс проверка на парность ?PAIRS внутри по вкусу, а вот уже само run_time-слово (LOOP) должно быть определено на ассемблере.
FIG-Forth - это ли не классика и воплощение духа Forth ? Там было так : [b]: LOOP 3 ?PAIRS COMPILE (LOOP) BACK ; IMMEDIATE[/b] и сама (LOOP) на ассемблере.
|
|
|
|
Добавлено: Ср мар 02, 2011 17:43 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
dynamic-wind писал(а): В Катане есть стек. То что там называется стек на самом деле лишь регистры для вершин локальных стеков объектов. Глобального стека данных там нет. Но это не означает что на катане нельзя организовать форт-систему. Только она будет непохожа на общеизвестные. Основной набор свойств форта сохранится. Объекты с методами и сообщениями принципиально не отличаются от процедур над данными в памяти, а форт именно процедурный язык.
[quote="dynamic-wind"]В Катане есть стек.[/quote] То что там называется стек на самом деле лишь регистры для вершин локальных стеков объектов. Глобального стека данных там нет. Но это не означает что на катане нельзя организовать форт-систему. Только она будет непохожа на общеизвестные. [b]Основной [/b]набор свойств форта сохранится. Объекты с методами и сообщениями принципиально не отличаются от процедур над данными в памяти, а форт именно процедурный язык.
|
|
|
|
Добавлено: Чт янв 27, 2011 21:55 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
mOleg писал(а): А тут и отвечать не на что. Зато смотри как пишущих на форке боятся А все почему потому что мы банда
[quote="mOleg"]А тут и отвечать не на что.[/quote]Зато смотри как пишущих на форке боятся :D А все почему потому что мы банда :))
|
|
|
|
Добавлено: Вт янв 25, 2011 12:11 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
_Harry писал(а): Пока нет ответа от mOleg А тут и отвечать не на что. Реализация системы - это интимное дело автора, уж тем более, если система с закрытым кодом. Важно, чтобы интерфейсы были совместимые. Пример DO LOOP на форте писанный, скорее всего делался переносимым, то есть это как с eForth - минимум примитивов на асме, остальное на выскокуровнем Форте писано. Это тоже оптимизация, только в данном случае, скорости портирования системы. что же касается <он не очень любит, когда "из форта делают не форт">, речь таки о другом то есть когда некие синтаксические решения необоснованно тянут в Форт, не смотря на то, что они идеологически чужды Форту, то есть будут смотреться коряво, использоваться криво. Замечательно, что Форт позволяет такие вещи делать, но это совсем не значит, что их делать нужно.
[quote="_Harry"]Пока нет ответа от mOleg[/quote] А тут и отвечать не на что. Реализация системы - это интимное дело автора, уж тем более, если система с закрытым кодом. Важно, чтобы интерфейсы были совместимые. Пример DO LOOP на форте писанный, скорее всего делался переносимым, то есть это как с eForth - минимум примитивов на асме, остальное на выскокуровнем Форте писано. Это тоже оптимизация, только в данном случае, скорости портирования системы. что же касается <он не очень любит, когда "из форта делают не форт">, речь таки о другом 8) то есть когда некие синтаксические решения необоснованно тянут в Форт, не смотря на то, что они идеологически чужды Форту, то есть будут смотреться коряво, использоваться криво. Замечательно, что Форт позволяет такие вещи делать, но это совсем не значит, что их делать нужно.
|
|
|
|
Добавлено: Вт янв 25, 2011 11:14 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
вопрос писал(а): Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт" Пока нет ответа от mOleg подскажу что в форке много чего написано на асемблере, есть кое что и в машинных кодах. Так что ссылка на него не обоснована. Когда "из форта делают не форт" это несколько другое LOOP от Хищника к этому случаю совсем не подходит.
[quote="вопрос"]Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт" [/quote]Пока нет ответа от mOleg подскажу что в форке много чего написано на асемблере, есть кое что и в машинных кодах. Так что ссылка на него не обоснована. Когда "из форта делают не форт" это несколько другое LOOP от Хищника к этому случаю совсем не подходит.
|
|
|
|
Добавлено: Вт янв 25, 2011 10:57 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
вопрос писал(а): Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт" Вы не за осмысленную оптимизацию, а за "улучшение компилятора". Си Вам покоя не дает... Что касается "не Форт" - заглянем в стандарт. Хоть он только рекомендуемый, но... Код: 6.1.1800 LOOP CORE Интерпретация: Семантика интерпретации для этого слова не определена.
Компиляция: ( C: do-sys -- ) Добавляет семантику времени-выполнения, данную ниже к текущему определению. Разрешает назначения для всех неразрешенных ссылок LEAVE между адресом ячейки определенным do-sys и следующим за LOOP адресом ячейки для передачи управления к выполнению слова после LOOP.
Время-выполнения: ( -- ) ( R: loop-sys1 -- | loop-sys2 ) Неопределенная ситуация существует, если параметры управления цикла недоступны. Добавляет один к индексу цикла. Если после этого индекс цикла равен пределу цикла, снимает параметры цикла, и продолжает выполнение непосредственно после цикла. Иначе продолжает выполнение с начала цикла.
И где тут указано как написано LOOP ? Тут только указано как должно себя вести LOOP ...
[quote="вопрос"]Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт"[/quote] :)) Вы не за осмысленную оптимизацию, а за "улучшение компилятора". Си Вам покоя не дает... Что касается "не Форт" - заглянем в стандарт. Хоть он только рекомендуемый, но... [code]6.1.1800 LOOP CORE Интерпретация: Семантика интерпретации для этого слова не определена.
Компиляция: ( C: do-sys -- ) Добавляет семантику времени-выполнения, данную ниже к текущему определению. Разрешает назначения для всех неразрешенных ссылок LEAVE между адресом ячейки определенным do-sys и следующим за LOOP адресом ячейки для передачи управления к выполнению слова после LOOP.
Время-выполнения: ( -- ) ( R: loop-sys1 -- | loop-sys2 ) Неопределенная ситуация существует, если параметры управления цикла недоступны. Добавляет один к индексу цикла. Если после этого индекс цикла равен пределу цикла, снимает параметры цикла, и продолжает выполнение непосредственно после цикла. Иначе продолжает выполнение с начала цикла. [/code] И где тут указано как написано LOOP ? Тут только указано как должно себя вести LOOP ...
|
|
|
|
Добавлено: Вт янв 25, 2011 01:54 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
вопрос писал(а): Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт" Я не вполне понимаю, при чем тут реализация. Форт не возьмется из ниоткуда, он все равно на чем-то написан. Что такое классика применительно к редчайшему языку? Если единтсвенно правильный вариант - это дописывать транслятор Форта на нем же самом, как только это станет возможно, то я категорически не согласен с такой точкой зрения. Есть цель исполнения проекта. Под эту цель выбираются способы ее реализации.
[quote="вопрос"]Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт"[/quote] Я не вполне понимаю, при чем тут реализация. Форт не возьмется из ниоткуда, он все равно на чем-то написан. Что такое классика применительно к редчайшему языку? Если единтсвенно правильный вариант - это дописывать транслятор Форта на нем же самом, как только это станет возможно, то я категорически не согласен с такой точкой зрения. Есть цель исполнения проекта. Под эту цель выбираются способы ее реализации.
|
|
|
|
Добавлено: Вт янв 25, 2011 01:49 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт"
Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт"
|
|
|
|
Добавлено: Вт янв 25, 2011 01:37 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
вопрос писал(а): Ну так же в классических реализациях форта очень многое так Тогда с какой стороны это классика? Форт на Форте? Ну разве что так. Но классики литературы - это Пушкин, Толстой, Достоевский... а не все, кто жил достаточно давно.
[quote="вопрос"]Ну так же в классических реализациях форта очень многое так[/quote] Тогда с какой стороны это классика? Форт на Форте? Ну разве что так. Но классики литературы - это Пушкин, Толстой, Достоевский... а не все, кто жил достаточно давно.
|
|
|
|
Добавлено: Вт янв 25, 2011 01:14 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
В классическом Форте и DO и LOOP это IMMEDIATE-слова которые компилировать в код могут все что угодно (че в SPF и делают).
В классическом Форте и DO и LOOP это IMMEDIATE-слова которые компилировать в код могут все что угодно (че в SPF и делают).
|
|
|
|
Добавлено: Вт янв 25, 2011 00:09 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
Цитата: Четыре (!!!) примитива вместо одного чтения памяти. Ну так же в классических реализациях форта очень многое так
[quote]Четыре (!!!) примитива вместо одного чтения памяти.[/quote] Ну так же в классических реализациях форта очень многое так
|
|
|
|
Добавлено: Вт янв 25, 2011 00:04 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
Это кусок кода, который заимствован автором relf из более раннего форта -предшественника, видимо
Это кусок кода, который заимствован автором relf из более раннего форта -предшественника, видимо
|
|
|
|
Добавлено: Вт янв 25, 2011 00:02 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
вопрос писал(а): : I ( --- n ) \ Return the counter (index) of the innermost DO LOOP R> R@ SWAP >R ; Разве это от хорошей жизни? Во-первых, не писать ассемблерные вставки только потому, что это "классика" - это "элитаризмъ" Можно этого классика сюда, для обоснования единственности предложенного варианта? Во-вторых, а что делать, если стек циклов - это отдельный стек? Причем в паре форт-процессоров он даже аппаратной отдельный. В третьих, продолжаем во-первых. Счетчик цикла достаточно часто требуется в теле цикла. Четыре (!!!) примитива вместо одного чтения памяти. вопрос писал(а): : (LOOP) ( ---) \ Runtime part of LOOP R> R> 1 +!! DUP R@ = \ Add 1 to count and compare to limit. IF R> 2DROP CELL+ >R \ Discard parameters and skip leave address. ELSE >R DUP @ +!! >R \ Repush counter and jump to loop start address. THEN ; Вообще блеск. За одно слово "Repush" автора можно выгонять с формулировкой о профнепригодности. То место в памяти (стек возвратов) нам не нравится, мы переложим в другое (стек данных), а потом обратно. И так <число итераций> раз.
[quote="вопрос"]: I ( --- n ) \ Return the counter (index) of the innermost DO LOOP R> R@ SWAP >R ;[/quote] Разве это от хорошей жизни? Во-первых, не писать ассемблерные вставки только потому, что это "классика" - это "элитаризмъ" :) Можно этого классика сюда, для обоснования единственности предложенного варианта? Во-вторых, а что делать, если стек циклов - это отдельный стек? Причем в паре форт-процессоров он даже аппаратной отдельный. В третьих, продолжаем во-первых. Счетчик цикла достаточно часто требуется в теле цикла. Четыре (!!!) примитива вместо одного чтения памяти. [quote="вопрос"]: (LOOP) ( ---) \ Runtime part of LOOP R> R> 1 +!! DUP R@ = \ Add 1 to count and compare to limit. IF R> 2DROP CELL+ >R \ Discard parameters and skip leave address. ELSE >R DUP @ +!! >R \ Repush counter and jump to loop start address. THEN ;[/quote] Вообще блеск. За одно слово "Repush" автора можно выгонять с формулировкой о профнепригодности. То место в памяти (стек возвратов) нам не нравится, мы переложим в другое (стек данных), а потом обратно. И так <число итераций> раз.
|
|
|
|
Добавлено: Пн янв 24, 2011 23:59 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
НУ, на этом основании, я, пожалуй, отвергаю претензии, что rorelf - и его замысел - т.к. это ведь не только и не столько relf - другой языk
НУ, на этом основании, я, пожалуй, отвергаю претензии, что rorelf - и его замысел - т.к. это ведь не только и не столько relf - другой языk
|
|
|
|
Добавлено: Пн янв 24, 2011 23:54 |
|
|
|
|
|
Заголовок сообщения: |
Re: Quark: Пример кода - LOOP |
|
|
вопрос писал(а): И можно ли это назвать классическим фортом? А что такое классический форт? Если уж разновидностей ШК несколько, то почему нельзя делать ассемблерные вставки?
[quote="вопрос"]И можно ли это назвать классическим фортом?[/quote] А что такое классический форт? Если уж разновидностей ШК несколько, то почему нельзя делать ассемблерные вставки?
|
|
|
|
Добавлено: Пн янв 24, 2011 23:48 |
|
|
|
|