Forth
http://fforum.winglion.ru/

Маленькие хитрости
http://fforum.winglion.ru/viewtopic.php?f=2&t=3070
Страница 8 из 8

Автор:  Victor__v [ Пн окт 10, 2016 21:04 ]
Заголовок сообщения:  Re: Маленькие хитрости

время от времени требуются циклы с известным числом итераций. 12 0 do ... и далее по тексту
пробовал ли кто-нибудь делать развёртку ( раскрутку) цикла?

Автор:  gudleifr [ Пн окт 10, 2016 22:39 ]
Заголовок сообщения:  Re: Маленькие хитрости

Victor__v писал(а):
пробовал ли кто-нибудь делать развёртку ( раскрутку) цикла?
Это имеет смысл только в кодовых словах, но там есть макросы.

Автор:  gudleifr [ Вт окт 11, 2016 11:52 ]
Заголовок сообщения:  Re: Маленькие хитрости

Понаблюдав за разговорами последнего месяца, могу сформулировать главную FORTH-хитрость: "Не надо пытаться улучшать FORTH!"

Автор:  Victor__v [ Вт окт 11, 2016 16:03 ]
Заголовок сообщения:  Re: Маленькие хитрости

Полностью согласен, но свою программу можно

Автор:  Victor__v [ Пт окт 21, 2016 21:07 ]
Заголовок сообщения:  Re: Маленькие хитрости

Т.к. тему по спискам не нашёл на форуме, а заводить, да ещё с неизвестным результатом, как-то лень, то пишу сюда.
Пробовал ли кто-нибудь организовать список на стеке возвратов?
Наверное, единственное преимущество хранения ячеек списка на стеке - это отсутствие необходимости создавать сборщик мусора, вставил указатель на удаляющее слово и всё :wink: При завершении работы произойдёт самоочищение стека от лисповкой скверны 8)
Вроде неплохой вариант, да и реализуется легко.

P.S.
Товарищи форумчане, если что, не надо подзатыльников, лучше направляющий пендаль :D
P.P.S.
Для тех, кто считает, что это хак (что в целом верно) и так делать нельзя, напоминаю, что стек используется, потому что способен к самоочищению

Автор:  gudleifr [ Пт окт 21, 2016 21:24 ]
Заголовок сообщения:  Re: Маленькие хитрости

Victor__v писал(а):
Пробовал ли кто-нибудь организовать список
Я как раз сейчас над этим думаю. Не в смысле, тут есть над чем думать, а в смысле, списки на FORTH реализуются до смешного легко (и как и на нормальном LISP не требуют сборки мусора), но их применение порождает кучу ненужных структурных операций.
Victor__v писал(а):
на стеке возвратов
А зачем? Стек возвратов - естественное место для локальных переменных. Проводить деление между хранящимися там и глобальными данными следует не по типу данных, а по времени их жизни.

Автор:  Victor__v [ Пт окт 21, 2016 21:43 ]
Заголовок сообщения:  Re: Маленькие хитрости

Цитата:
по времени их жизни

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

Автор:  gudleifr [ Чт окт 27, 2016 21:04 ]
Заголовок сообщения:  Re: Маленькие хитрости

gudleifr писал(а):
Я как раз сейчас над этим думаю.
И, пока наиболее естественным видится "списковый СЛОВАРЬ". При этом СИМВОЛ должен давать на выходе последовательность селекторов, ВЫПОЛНИТЬ и КОМПИЛИРОВАТЬ производить унификацию.

Автор:  Victor__v [ Пт окт 28, 2016 19:34 ]
Заголовок сообщения:  Re: Маленькие хитрости

Добавим немножечко реальности...
Из своего малюсенького опыта построения и работы со списками скажу, что к ним должны прилагаться лямбды, операции над списками, над элементами списков и т.д.
Как у вас с организацией всего этого?
Лично у меня сейчас такая проблема:
Т.к. список создаётся на стеке возвратов, то надо поддерживать актуальность построения, если элемент определяется в другом слове.
Есть несколько путей:
А) определить элемент в хипе. Но надо будет организовывать учёт, и сборщик мусора в конечн.итоге
Б) Вытащить весь стек возвратов до встречи последнего элемента, сделать тёмные дела :twisted: и возвратить как было. Но куда его стряхивать? В хип? В стек данных? А потом восстанавливать его.
В поисках самого элегантного решения.
Кто подсобит великой фортовской мыслёй? :)

Автор:  gudleifr [ Пт окт 28, 2016 19:45 ]
Заголовок сообщения:  Re: Маленькие хитрости

Victor__v писал(а):
Из своего малюсенького опыта построения и работы со списками скажу, что к ним должны прилагаться лямбды, операции над списками, над элементами списков и т.д.
Если Вам не надо написать что-то работающее - да. Можно даже пригласить коллегу true-grue и поговорить с ним за общую теорию преобразователей. Но нам, практикам, не до этого. Я скажу так - 1) если мы имеем FORTH, лямбды нам не нужны, 2) если нам не нужна унификация - списки можно реализовать без списков.

Автор:  Victor__v [ Сб окт 29, 2016 11:33 ]
Заголовок сообщения:  Re: Маленькие хитрости

Цитата:
Если Вам не надо написать что-то работающее

Работающее имеется. доделываю оптимизатор исходного текста форт-программ. Со списками всё гораздо проще получается.
Цитата:
Но нам, практикам, не до этого

Смешно

Автор:  gudleifr [ Сб окт 29, 2016 12:29 ]
Заголовок сообщения:  Re: Маленькие хитрости

Victor__v писал(а):
Работающее имеется
С этого и начинайте. Пока Ваши примеры выглядят как что-то совершенно ненужное, сделанное через задницу. Мол, что бы еще успеть повесить на FORTH, пока он не рухнет.

Victor__v писал(а):
Смешно
Нет, грустно. Значит, Вы совершенно не понимаете того, что я пишу.

Я думаю, Ваш путь в программирование когда-нибудь начнется словами: "Выкинем этот негодный костыль - СПФ".

Автор:  gudleifr [ Пт дек 30, 2016 13:44 ]
Заголовок сообщения:  Re: Маленькие хитрости

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

Например, изначально:

0 СТРАНИЦА ." [1] ВВЕДЕНИЕ" CR CR
." Игра Cold War Naval Battles (Морские сражения холодной" CR
." войны) была впервые опубликована как Modern Naval Battles" CR
." (Современные морские сражения) - в виде серии из трех" CR
." карточных игр для двух-шести игроков, опиравшаяся на" CR
." морскую мощь (тех дней) великих держав. Она была" CR
." разработана в конце 1980х компанией 3W, Inc. из Камбрии" CR
." (штат Калифорния)." CR CR
... ;

Как заменить ." и CR на что-то красивое?

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

Все эти три решения требуют точного знания заранее всех заменяемых слов и границ области замены, а также готовности разрешать коллизии.

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

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

Автор:  gudleifr [ Чт янв 12, 2017 23:51 ]
Заголовок сообщения:  Re: Маленькие хитрости

Jelsay писал(а):
Просто я люблю смотреть в суть вещей.. а суть мне говорит что только один раз в жизни я смог с помощью написания программы на Форте немного заработать.. и то случайно потому что Паскаль или Вайсика было лень искать.
А кто мешает писать по-FORTH-овски на Паскалях и Васец-ах? FORTH - это всего-лишь отказ строить интерпретатор проблемно-ориентированного языка "по-научному" (lex-ами и yacc-ами), ограничившись лишь тем, что "само вылазит" - стеком и шитым кодом. FORTH получается сам!
См. Керниган и Пайк "UNIX... гл.8", Уэзерелл "Этюды... TRAC", Скотт "VB... EXPRESSOR"...

Автор:  diver [ Пт янв 13, 2017 23:00 ]
Заголовок сообщения:  Re: Маленькие хитрости

------> .

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