Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс июн 25, 2017 21:23

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 120 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8
Автор Сообщение
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пн окт 10, 2016 21:04 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 246
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
время от времени требуются циклы с известным числом итераций. 12 0 do ... и далее по тексту
пробовал ли кто-нибудь делать развёртку ( раскрутку) цикла?

_________________
Цель: написать форт-систему
Подцель: написать оптимизирующий компилятор
текущая задача: переписать if-else-then


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пн окт 10, 2016 22:39 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1884
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 31 раз.
Victor__v писал(а):
пробовал ли кто-нибудь делать развёртку ( раскрутку) цикла?
Это имеет смысл только в кодовых словах, но там есть макросы.

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Вт окт 11, 2016 11:52 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1884
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 31 раз.
Понаблюдав за разговорами последнего месяца, могу сформулировать главную FORTH-хитрость: "Не надо пытаться улучшать FORTH!"

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Вт окт 11, 2016 16:03 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 246
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Полностью согласен, но свою программу можно

_________________
Цель: написать форт-систему
Подцель: написать оптимизирующий компилятор
текущая задача: переписать if-else-then


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт окт 21, 2016 21:07 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 246
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Т.к. тему по спискам не нашёл на форуме, а заводить, да ещё с неизвестным результатом, как-то лень, то пишу сюда.
Пробовал ли кто-нибудь организовать список на стеке возвратов?
Наверное, единственное преимущество хранения ячеек списка на стеке - это отсутствие необходимости создавать сборщик мусора, вставил указатель на удаляющее слово и всё :wink: При завершении работы произойдёт самоочищение стека от лисповкой скверны 8)
Вроде неплохой вариант, да и реализуется легко.

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

_________________
Цель: написать форт-систему
Подцель: написать оптимизирующий компилятор
текущая задача: переписать if-else-then


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт окт 21, 2016 21:24 
Не в сети
Аватара пользователя

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

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт окт 21, 2016 21:43 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 246
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Цитата:
по времени их жизни

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

_________________
Цель: написать форт-систему
Подцель: написать оптимизирующий компилятор
текущая задача: переписать if-else-then


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Чт окт 27, 2016 21:04 
Не в сети
Аватара пользователя

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

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт окт 28, 2016 19:34 
Не в сети

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

_________________
Цель: написать форт-систему
Подцель: написать оптимизирующий компилятор
текущая задача: переписать if-else-then


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт окт 28, 2016 19:45 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1884
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 31 раз.
Victor__v писал(а):
Из своего малюсенького опыта построения и работы со списками скажу, что к ним должны прилагаться лямбды, операции над списками, над элементами списков и т.д.
Если Вам не надо написать что-то работающее - да. Можно даже пригласить коллегу true-grue и поговорить с ним за общую теорию преобразователей. Но нам, практикам, не до этого. Я скажу так - 1) если мы имеем FORTH, лямбды нам не нужны, 2) если нам не нужна унификация - списки можно реализовать без списков.

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб окт 29, 2016 11:33 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 246
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Цитата:
Если Вам не надо написать что-то работающее

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

Смешно

_________________
Цель: написать форт-систему
Подцель: написать оптимизирующий компилятор
текущая задача: переписать if-else-then


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб окт 29, 2016 12:29 
Не в сети
Аватара пользователя

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

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

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

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт дек 30, 2016 13:44 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1884
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 31 раз.
На этот раз, антихитрость.
Допустим, есть слово, которое что-то выводит на экран. Изначально, понятно, оно носит глубоко отладочный характер, но, по мере взросления проекта, обрастает форматированиями, выравниваниями и прочей визуальной фигней.

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

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

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

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

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

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

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

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Чт янв 12, 2017 23:51 
Не в сети
Аватара пользователя

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

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт янв 13, 2017 23:00 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Ср дек 06, 2006 09:23
Сообщения: 497
Благодарил (а): 5 раз.
Поблагодарили: 24 раз.
------> .


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 120 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8

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


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

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