Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 13:15

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Quark: Пример кода - LOOP
Автор Сообщение
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
По моему, классикой (прямой или косвенный шитый код) будет вот это :
: LOOP COMPILE (LOOP) <RESOLVE >RESOLVE ; IMMEDIATE
плюс проверка на парность ?PAIRS внутри по вкусу,
а вот уже само run_time-слово (LOOP) должно быть определено на ассемблере.

FIG-Forth - это ли не классика и воплощение духа Forth ? Там было так :
: LOOP 3 ?PAIRS COMPILE (LOOP) BACK ; IMMEDIATE
и сама (LOOP) на ассемблере.
Сообщение Добавлено: Ср мар 02, 2011 17:43
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
dynamic-wind писал(а):
В Катане есть стек.

То что там называется стек на самом деле лишь регистры для вершин локальных стеков объектов. Глобального стека данных там нет.
Но это не означает что на катане нельзя организовать форт-систему.
Только она будет непохожа на общеизвестные. Основной набор свойств форта сохранится.
Объекты с методами и сообщениями принципиально не отличаются от процедур над данными в памяти, а форт именно процедурный язык.
Сообщение Добавлено: Чт янв 27, 2011 21:55
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
mOleg писал(а):
А тут и отвечать не на что.
Зато смотри как пишущих на форке боятся :D
А все почему потому что мы банда :))
Сообщение Добавлено: Вт янв 25, 2011 12:11
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
_Harry писал(а):
Пока нет ответа от mOleg

А тут и отвечать не на что.
Реализация системы - это интимное дело автора, уж тем более, если система с закрытым кодом. Важно, чтобы интерфейсы были совместимые.
Пример DO LOOP на форте писанный, скорее всего делался переносимым, то есть это как с eForth - минимум примитивов на асме, остальное на выскокуровнем Форте писано. Это тоже оптимизация, только в данном случае, скорости портирования системы.
что же касается <он не очень любит, когда "из форта делают не форт">, речь таки о другом 8) то есть когда некие синтаксические решения необоснованно тянут в Форт, не смотря на то, что они идеологически чужды Форту, то есть будут смотреться коряво, использоваться криво. Замечательно, что Форт позволяет такие вещи делать, но это совсем не значит, что их делать нужно.
Сообщение Добавлено: Вт янв 25, 2011 11:14
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
вопрос писал(а):
Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт"
Пока нет ответа от 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 ...
Сообщение Добавлено: Вт янв 25, 2011 01:54
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
вопрос писал(а):
Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт"

Я не вполне понимаю, при чем тут реализация. Форт не возьмется из ниоткуда, он все равно на чем-то написан. Что такое классика применительно к редчайшему языку? Если единтсвенно правильный вариант - это дописывать транслятор Форта на нем же самом, как только это станет возможно, то я категорически не согласен с такой точкой зрения. Есть цель исполнения проекта. Под эту цель выбираются способы ее реализации.
Сообщение Добавлено: Вт янв 25, 2011 01:49
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
Я за осмысленную оптимизацию, за классику - mOleg - он не очень любит, когда "из форта делают не форт"
Сообщение Добавлено: Вт янв 25, 2011 01:37
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
вопрос писал(а):
Ну так же в классических реализациях форта очень многое так

Тогда с какой стороны это классика? Форт на Форте? Ну разве что так. Но классики литературы - это Пушкин, Толстой, Достоевский... а не все, кто жил достаточно давно.
Сообщение Добавлено: Вт янв 25, 2011 01:14
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
В классическом Форте и DO и LOOP это IMMEDIATE-слова которые компилировать в код могут все что угодно (че в SPF и делают).
Сообщение Добавлено: Вт янв 25, 2011 00:09
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
Цитата:
Четыре (!!!) примитива вместо одного чтения памяти.

Ну так же в классических реализациях форта очень многое так
Сообщение Добавлено: Вт янв 25, 2011 00:04
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
Это кусок кода, который заимствован автором 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" автора можно выгонять с формулировкой о профнепригодности. То место в памяти (стек возвратов) нам не нравится, мы переложим в другое (стек данных), а потом обратно. И так <число итераций> раз.
Сообщение Добавлено: Пн янв 24, 2011 23:59
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
НУ, на этом основании, я, пожалуй, отвергаю претензии, что rorelf - и его замысел - т.к. это ведь не только и не столько relf - другой языk
Сообщение Добавлено: Пн янв 24, 2011 23:54
  Заголовок сообщения:  Re: Quark: Пример кода - LOOP  Ответить с цитатой
вопрос писал(а):
И можно ли это назвать классическим фортом?

А что такое классический форт? Если уж разновидностей ШК несколько, то почему нельзя делать ассемблерные вставки?
Сообщение Добавлено: Пн янв 24, 2011 23:48

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


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