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: Маленькие хитрости |
Т.к. тему по спискам не нашёл на форуме, а заводить, да ещё с неизвестным результатом, как-то лень, то пишу сюда. Пробовал ли кто-нибудь организовать список на стеке возвратов? Наверное, единственное преимущество хранения ячеек списка на стеке - это отсутствие необходимости создавать сборщик мусора, вставил указатель на удаляющее слово и всё При завершении работы произойдёт самоочищение стека от лисповкой скверны Вроде неплохой вариант, да и реализуется легко. P.S. Товарищи форумчане, если что, не надо подзатыльников, лучше направляющий пендаль 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: Маленькие хитрости |
Добавим немножечко реальности... Из своего малюсенького опыта построения и работы со списками скажу, что к ним должны прилагаться лямбды, операции над списками, над элементами списков и т.д. Как у вас с организацией всего этого? Лично у меня сейчас такая проблема: Т.к. список создаётся на стеке возвратов, то надо поддерживать актуальность построения, если элемент определяется в другом слове. Есть несколько путей: А) определить элемент в хипе. Но надо будет организовывать учёт, и сборщик мусора в конечн.итоге Б) Вытащить весь стек возвратов до встречи последнего элемента, сделать тёмные дела и возвратить как было. Но куда его стряхивать? В хип? В стек данных? А потом восстанавливать его. В поисках самого элегантного решения. Кто подсобит великой фортовской мыслёй? |
Автор: | 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/ |