Forth
http://fforum.winglion.ru/

Полезные слова и идеи для Форта.
http://fforum.winglion.ru/viewtopic.php?f=2&t=678
Страница 4 из 6

Автор:  mrack [ Пт май 11, 2007 20:52 ]
Заголовок сообщения: 

WingLion а вапрос к ответу "42" сказать ? или он в другом форуме :)

Автор:  WingLion [ Пт май 11, 2007 21:13 ]
Заголовок сообщения: 

mrack писал(а):
WingLion а вапрос к ответу "42" сказать ? или он в другом форуме

для этого надо на другую планету лететь

Автор:  in4 [ Сб май 12, 2007 01:48 ]
Заголовок сообщения: 

chess писал(а):
Ладно, буду показывать на примере,

А как бы этот пример да запустить на моей домашней системе - инсталл+девел+cvs?
А то некоторых файлов не хватает... Хорошо бы ссылку на них... ;)

Автор:  mOleg [ Сб май 12, 2007 05:30 ]
Заголовок сообщения: 

chess писал(а):
mOleg писал(а):
А можно поподробнее, о какой идее идет речь? а то я не понял

chess писал(а):
В дальнейшем интерпретатор с его "периферийными(вынесенными) средствами" объединяет коды необходимых частей для имен типа 0>`1+!, 0<`1+!, 0=`1+! и т.п. (характер отображения имен в код поменялся -иероглифов не стало, хотя внешне практически ничего не изменилось)

Смотри предыдущее сообщение. "Периферийными(вынесенными) средствами интерпретататора" могут являться твои словари.


уже понял откуда ноги ростут 8)

Автор:  profiT [ Вс май 13, 2007 09:10 ]
Заголовок сообщения: 

Почему мои намёки пропадают втуне?..

chess писал(а):
Ладно, буду показывать на примере, как можно включать код[1] для "слов"(имен) в код[2] определения, в котором они (коды[3] этих слов) должны присутствовать, не выписывая предварительно определения для каждого отдельного слова, а имея всего несколько определенных в коде[4] имен, а именно:
C, >CS, CS>, R1, R2, I:, ITO, A...T, 2R, ROR, R=R, `, SET-RG, NOTFOUND
(это и есть исходная кодовая[5] база).


Код -- это многозначное и истрепленое слово. Просто "код" равно как и просто "физика" -- ничего особенно не конкретизирует: какой код? Код Цезаря, маш. код, или "код да Винчи"?..

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

chess писал(а):
Под иероглифическим заданием кода[6] для слов типа A=B, D=P и т.п. я понимаю обычные определения:


"Типа A=B D=P".. А что это за слова такие?.. Мягко говоря, далеко не все здесь присутсвующие являются дипломированными телепатами.

(на код ссылаться, типа "там всё есть" -- дурной тон. Понятно, что там всё есть, но кто ж это читать-разбирать будет, тратя своё время?)

chess писал(а):
Понятно, что в этом случае кода[7] в кодофайле[8] будет больше(особенно если в набор таких слов включить еще слова типа wA=wB, A=cB и т.д), чем при первом способе кодирования[9] этих слов(имен). Я уж не говорю о разнице в объеме текста для определения по первому и второму способах.


Так слов или имён?.. Или может быть "определений"? И, я-то допустим как-то догадаюсь что "первый и второй способ" относятся к примеру кода из этого сообщения, но ведь могут быть и не такие пытливые читатели.

Вообще, это всё элементарные вещи, к сожаленью.

Судя по тому что мне удалось путём долгого перечитывания и долгих попыток поставить себя на место человека, пишушего такие тексты, chess увлечён расширением синтаксиса Форта вводя по сути в дополнение к пробелу ещё один разделитель -- символ ` со своей, особенной обработкой, которая должна облегчить формирование целых групп слов в которых по сути перебираются различные варианты их построения.

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

(если всё таки всё понял не так -- звиняйте: "ну не шмогла я.." (с))

Автор:  Kopa [ Пн май 14, 2007 08:36 ]
Заголовок сообщения: 

Предлагаю ввести такое расширение Форта

Код:
      IF( выражение )  \ выражение оставляет одно значение для IF что бы  не путаться
         ...
      ELSE( выражение ) \ аналог elseif
         ...
      ELSE                      \ фортовское
         ...
      THEN                \ или END IF

\ тоже для WHILE( ...  )  CASE( ... )  OF( ... ) UNLIL( ... )  DO( ...  )

Автор:  Kopa [ Пн май 14, 2007 08:48 ]
Заголовок сообщения: 

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

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

P.S. Это только наброски, а реализовать и реально это использовать можно по разному:)

Автор:  profiT [ Пн май 14, 2007 14:54 ]
Заголовок сообщения: 

Вообще.. Чтобы говорить что-то "полезно", надо сразу предъявлять простые и понятные преимущества по некоторым определённым критериям:

1. Меньше исходный текст.
2. "Мощнее" команды -- то есть больше действий, "за те же деньги".
3. Упрощение работы программы
4. Большая её понятность (не просто понятность именно тебе, именно мне лично, и уж тем более не понятность Васе Пупкину)

В "IF( )" (да и почти во всём предложенном в теме) ничего кроме сакрального "синтаксического сахара" мне найти не удалось.

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

Искренне интересне каким образом это (воз)можно сделать, и (самое главное) как на таком программировать, имея на руках два несвязных потока данных (один из которых к тому же всё время "прыгает" из-за ветвлений).

Всё таки это бывает и плохо что Форт позволяет создавать свои структуры управления -- уж больно фантазию бывает трудно утихомирить.

Автор:  Kopa [ Пн май 14, 2007 15:34 ]
Заголовок сообщения: 

profiT писал(а):
В "IF( )" (да и почти во всём предложенном в теме) ничего кроме сакрального "синтаксического сахара" мне найти не удалось.


И что плохого в "синтаксическом сахаре" если в языке он есть?
Любое расширение Форта - это свой "синтаксический сахар" :))

Автор:  chess [ Пн май 14, 2007 15:58 ]
Заголовок сообщения: 

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

Одним преффиксным словом не обойтись. Нужно будет создать кучу примитивов для работы с числами на стеке возвратов, аналогичные примитивам для работы на стеке параметров. Что-то типа R+, R- и так далее и тому подобное. И хотя в текстах программ их не будет - в кодофайле эти новые примитивы появятся, иначе все равно значения со стека возвратов нужно будет передавать в стек параметров. Да, скорость работы вырастет, но ценой разбухания кодофайла, но это как раз не страшно, гораздо неприятнее - это появление дополнительной нагрузки на программиста - нужно будет контролировать уже два потока команд обработки, один на стеке параметров, другой на стеке возвратов.
Новшества должны не нагружать программиста, а наоборот освобождать его объем внимания для решения собственно задачи, для которой и пишется программа.

Автор:  Kopa [ Пн май 14, 2007 16:10 ]
Заголовок сообщения: 

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


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


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

Автор:  chess [ Пн май 14, 2007 16:37 ]
Заголовок сообщения: 

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

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

Автор:  chess [ Пн май 14, 2007 17:30 ]
Заголовок сообщения: 

profiT писал(а):
Код -- это многозначное и истрепленое слово. Просто "код" равно как и просто "физика" -- ничего особенно не конкретизирует: какой код? Код Цезаря, маш. код, или "код да Винчи"?.

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

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

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

Автор:  Victor__v [ Чт дек 15, 2016 20:43 ]
Заголовок сообщения:  Re: Полезные слова и идеи для Форта fastcall

Если ли наработки по осуществлению быстрого вызова в форте.
Передача нескольких значений через регистры?

Автор:  Victor__v [ Вс дек 25, 2016 22:39 ]
Заголовок сообщения:  Re: Полезные слова и идеи для Форта.

Как насчёт нестандартных структур управления. К примеру несколько выходов из цикла begin-repeat ( unti) без манипуляций со стеком потока-управления?

Страница 4 из 6 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/