Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
|
|
|
Добавлено: Пт янв 13, 2017 23:00 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Jelsay писал(а): Просто я люблю смотреть в суть вещей.. а суть мне говорит что только один раз в жизни я смог с помощью написания программы на Форте немного заработать.. и то случайно потому что Паскаль или Вайсика было лень искать. А кто мешает писать по-FORTH-овски на Паскалях и Васец-ах? FORTH - это всего-лишь отказ строить интерпретатор проблемно-ориентированного языка "по-научному" (lex-ами и yacc-ами), ограничившись лишь тем, что "само вылазит" - стеком и шитым кодом. FORTH получается сам! См. Керниган и Пайк "UNIX... гл.8", Уэзерелл "Этюды... TRAC", Скотт "VB... EXPRESSOR"...
[quote="Jelsay"]Просто я люблю смотреть в суть вещей.. а суть мне говорит что только один раз в жизни я смог с помощью написания программы на Форте немного заработать.. и то случайно потому что Паскаль или Вайсика было лень искать.[/quote]А кто мешает писать по-FORTH-овски на Паскалях и Васец-ах? FORTH - это всего-лишь отказ строить интерпретатор проблемно-ориентированного языка "по-научному" (lex-ами и yacc-ами), ограничившись лишь тем, что "само вылазит" - стеком и шитым кодом. FORTH получается сам! См. Керниган и Пайк "UNIX... гл.8", Уэзерелл "Этюды... TRAC", Скотт "VB... EXPRESSOR"...
|
|
|
|
Добавлено: Чт янв 12, 2017 23:51 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
На этот раз, антихитрость. Допустим, есть слово, которое что-то выводит на экран. Изначально, понятно, оно носит глубоко отладочный характер, но, по мере взросления проекта, обрастает форматированиями, выравниваниями и прочей визуальной фигней.
Например, изначально:
0 СТРАНИЦА ." [1] ВВЕДЕНИЕ" CR CR ." Игра Cold War Naval Battles (Морские сражения холодной" CR ." войны) была впервые опубликована как Modern Naval Battles" CR ." (Современные морские сражения) - в виде серии из трех" CR ." карточных игр для двух-шести игроков, опиравшаяся на" CR ." морскую мощь (тех дней) великих держав. Она была" CR ." разработана в конце 1980х компанией 3W, Inc. из Камбрии" CR ." (штат Калифорния)." CR CR ... ;
Как заменить ." и CR на что-то красивое?
Можно заменить эти слова операцией "Замена" вашего текстового редактора. Можно охватить этот фрагмент словарем, в котором они имеют другое значение. Можно перелопатить шитый код слова, заменяя коды этих слов.
Все эти три решения требуют точного знания заранее всех заменяемых слов и границ области замены, а также готовности разрешать коллизии.
Конечно, классики в таком случае рекомендуют выкидывать код на полдороги, заменяя костыли на окончательные красивости или, даже, вводя для таких случаев некоторое промежуточное хранилище (как в приведенном выше примере про рисования кораблика).
Но, ведь, такое хранилище у фортеров было! Абсолютно бесплатное, структурированное и индексированное. Блоковая память! Но злые манагеры от программирования решили, что блоки не нужны, ведь, файлы проще. Как будто они понимают, что такое файл...
На этот раз, антихитрость. Допустим, есть слово, которое что-то выводит на экран. Изначально, понятно, оно носит глубоко отладочный характер, но, по мере взросления проекта, обрастает форматированиями, выравниваниями и прочей визуальной фигней.
Например, изначально:
0 СТРАНИЦА ." [1] ВВЕДЕНИЕ" CR CR ." Игра Cold War Naval Battles (Морские сражения холодной" CR ." войны) была впервые опубликована как Modern Naval Battles" CR ." (Современные морские сражения) - в виде серии из трех" CR ." карточных игр для двух-шести игроков, опиравшаяся на" CR ." морскую мощь (тех дней) великих держав. Она была" CR ." разработана в конце 1980х компанией 3W, Inc. из Камбрии" CR ." (штат Калифорния)." CR CR ... ;
Как заменить ." и CR на что-то красивое?
Можно заменить эти слова операцией "Замена" вашего текстового редактора. Можно охватить этот фрагмент словарем, в котором они имеют другое значение. Можно перелопатить шитый код слова, заменяя коды этих слов.
Все эти три решения требуют точного знания заранее всех заменяемых слов и границ области замены, а также готовности разрешать коллизии.
Конечно, классики в таком случае рекомендуют выкидывать код на полдороги, заменяя костыли на окончательные красивости или, даже, вводя для таких случаев некоторое промежуточное хранилище (как в приведенном выше примере про рисования кораблика).
Но, ведь, такое хранилище у фортеров было! Абсолютно бесплатное, структурированное и индексированное. Блоковая память! Но злые манагеры от программирования решили, что блоки не нужны, ведь, файлы проще. Как будто они понимают, что такое файл...
|
|
|
|
Добавлено: Пт дек 30, 2016 13:44 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Victor__v писал(а): Работающее имеется С этого и начинайте. Пока Ваши примеры выглядят как что-то совершенно ненужное, сделанное через задницу. Мол, что бы еще успеть повесить на FORTH, пока он не рухнет. Victor__v писал(а): Смешно Нет, грустно. Значит, Вы совершенно не понимаете того, что я пишу. Я думаю, Ваш путь в программирование когда-нибудь начнется словами: "Выкинем этот негодный костыль - СПФ".
[quote="Victor__v"]Работающее имеется[/quote]С этого и начинайте. Пока Ваши примеры выглядят как что-то совершенно ненужное, сделанное через задницу. Мол, что бы еще успеть повесить на FORTH, пока он не рухнет.
[quote="Victor__v"]Смешно[/quote]Нет, грустно. Значит, Вы совершенно не понимаете того, что я пишу.
Я думаю, Ваш путь в программирование когда-нибудь начнется словами: "Выкинем этот негодный костыль - СПФ".
|
|
|
|
Добавлено: Сб окт 29, 2016 12:29 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Цитата: Если Вам не надо написать что-то работающее Работающее имеется. доделываю оптимизатор исходного текста форт-программ. Со списками всё гораздо проще получается. Цитата: Но нам, практикам, не до этого Смешно
[quote]Если Вам не надо написать что-то работающее[/quote] Работающее имеется. доделываю оптимизатор исходного текста форт-программ. Со списками всё гораздо проще получается. [quote]Но нам, практикам, не до этого[/quote] Смешно
|
|
|
|
Добавлено: Сб окт 29, 2016 11:33 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Victor__v писал(а): Из своего малюсенького опыта построения и работы со списками скажу, что к ним должны прилагаться лямбды, операции над списками, над элементами списков и т.д. Если Вам не надо написать что-то работающее - да. Можно даже пригласить коллегу true-grue и поговорить с ним за общую теорию преобразователей. Но нам, практикам, не до этого. Я скажу так - 1) если мы имеем FORTH, лямбды нам не нужны, 2) если нам не нужна унификация - списки можно реализовать без списков.
[quote="Victor__v"]Из своего малюсенького опыта построения и работы со списками скажу, что к ним должны прилагаться лямбды, операции над списками, над элементами списков и т.д.[/quote]Если Вам не надо написать что-то работающее - да. Можно даже пригласить коллегу [b]true-grue[/b] и поговорить с ним за общую теорию преобразователей. Но нам, практикам, не до этого. Я скажу так - 1) если мы имеем FORTH, лямбды нам не нужны, 2) если нам не нужна унификация - списки можно реализовать без списков.
|
|
|
|
Добавлено: Пт окт 28, 2016 19:45 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Добавим немножечко реальности... Из своего малюсенького опыта построения и работы со списками скажу, что к ним должны прилагаться лямбды, операции над списками, над элементами списков и т.д. Как у вас с организацией всего этого? Лично у меня сейчас такая проблема: Т.к. список создаётся на стеке возвратов, то надо поддерживать актуальность построения, если элемент определяется в другом слове. Есть несколько путей: А) определить элемент в хипе. Но надо будет организовывать учёт, и сборщик мусора в конечн.итоге Б) Вытащить весь стек возвратов до встречи последнего элемента, сделать тёмные дела и возвратить как было. Но куда его стряхивать? В хип? В стек данных? А потом восстанавливать его. В поисках самого элегантного решения. Кто подсобит великой фортовской мыслёй?
Добавим немножечко реальности... Из своего малюсенького опыта построения и работы со списками скажу, что к ним должны прилагаться лямбды, операции над списками, над элементами списков и т.д. Как у вас с организацией всего этого? Лично у меня сейчас такая проблема: Т.к. список создаётся на стеке возвратов, то надо поддерживать актуальность построения, если элемент определяется в другом слове. Есть несколько путей: А) определить элемент в хипе. Но надо будет организовывать учёт, и сборщик мусора в конечн.итоге Б) Вытащить весь стек возвратов до встречи последнего элемента, сделать тёмные дела :twisted: и возвратить как было. Но куда его стряхивать? В хип? В стек данных? А потом восстанавливать его. В поисках самого элегантного решения. Кто подсобит великой фортовской мыслёй? :)
|
|
|
|
Добавлено: Пт окт 28, 2016 19:34 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
gudleifr писал(а): Я как раз сейчас над этим думаю. И, пока наиболее естественным видится "списковый СЛОВАРЬ". При этом СИМВОЛ должен давать на выходе последовательность селекторов, ВЫПОЛНИТЬ и КОМПИЛИРОВАТЬ производить унификацию.
[quote="gudleifr"]Я как раз сейчас над этим думаю.[/quote]И, пока наиболее естественным видится "списковый СЛОВАРЬ". При этом СИМВОЛ должен давать на выходе последовательность селекторов, ВЫПОЛНИТЬ и КОМПИЛИРОВАТЬ производить унификацию.
|
|
|
|
Добавлено: Чт окт 27, 2016 21:04 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Цитата: по времени их жизни Да, забыл упомянуть. Время жизни у данного подхода к списку как-раз и есть время существования слова. Не для всех случаев, естественно, но для некоторых может подойти прям идеально.
[quote]по времени их жизни[/quote] Да, забыл упомянуть. Время жизни у данного подхода к списку как-раз и есть время существования слова. Не для всех случаев, естественно, но для некоторых может подойти прям идеально.
|
|
|
|
Добавлено: Пт окт 21, 2016 21:43 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Victor__v писал(а): Пробовал ли кто-нибудь организовать список Я как раз сейчас над этим думаю. Не в смысле, тут есть над чем думать, а в смысле, списки на FORTH реализуются до смешного легко (и как и на нормальном LISP не требуют сборки мусора), но их применение порождает кучу ненужных структурных операций. Victor__v писал(а): на стеке возвратов А зачем? Стек возвратов - естественное место для локальных переменных. Проводить деление между хранящимися там и глобальными данными следует не по типу данных, а по времени их жизни.
[quote="Victor__v"]Пробовал ли кто-нибудь организовать список[/quote]Я как раз сейчас над этим думаю. Не в смысле, тут есть над чем думать, а в смысле, списки на FORTH реализуются до смешного легко (и как и на нормальном LISP не требуют сборки мусора), но их применение порождает кучу ненужных структурных операций. [quote="Victor__v"]на стеке возвратов[/quote]А зачем? Стек возвратов - естественное место для локальных переменных. Проводить деление между хранящимися там и глобальными данными следует не по типу данных, а по времени их жизни.
|
|
|
|
Добавлено: Пт окт 21, 2016 21:24 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Т.к. тему по спискам не нашёл на форуме, а заводить, да ещё с неизвестным результатом, как-то лень, то пишу сюда. Пробовал ли кто-нибудь организовать список на стеке возвратов? Наверное, единственное преимущество хранения ячеек списка на стеке - это отсутствие необходимости создавать сборщик мусора, вставил указатель на удаляющее слово и всё При завершении работы произойдёт самоочищение стека от лисповкой скверны Вроде неплохой вариант, да и реализуется легко. P.S. Товарищи форумчане, если что, не надо подзатыльников, лучше направляющий пендаль P.P.S. Для тех, кто считает, что это хак (что в целом верно) и так делать нельзя, напоминаю, что стек используется, потому что способен к самоочищению
Т.к. тему по спискам не нашёл на форуме, а заводить, да ещё с неизвестным результатом, как-то лень, то пишу сюда. Пробовал ли кто-нибудь организовать список на стеке возвратов? Наверное, единственное преимущество хранения ячеек списка на стеке - это отсутствие необходимости создавать сборщик мусора, вставил указатель на удаляющее слово и всё :wink: При завершении работы произойдёт самоочищение стека от лисповкой скверны 8) Вроде неплохой вариант, да и реализуется легко.
P.S. Товарищи форумчане, если что, не надо подзатыльников, лучше направляющий пендаль :D P.P.S. Для тех, кто считает, что это хак (что в целом верно) и так делать нельзя, напоминаю, что стек используется, потому что способен к самоочищению
|
|
|
|
Добавлено: Пт окт 21, 2016 21:07 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Полностью согласен, но свою программу можно
Полностью согласен, но [u]свою программу[/u] можно
|
|
|
|
Добавлено: Вт окт 11, 2016 16:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Понаблюдав за разговорами последнего месяца, могу сформулировать главную FORTH-хитрость: "Не надо пытаться улучшать FORTH!"
Понаблюдав за разговорами последнего месяца, могу сформулировать главную FORTH-хитрость: "Не надо пытаться улучшать FORTH!"
|
|
|
|
Добавлено: Вт окт 11, 2016 11:52 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
Victor__v писал(а): пробовал ли кто-нибудь делать развёртку ( раскрутку) цикла? Это имеет смысл только в кодовых словах, но там есть макросы.
[quote="Victor__v"]пробовал ли кто-нибудь делать развёртку ( раскрутку) цикла?[/quote]Это имеет смысл только в кодовых словах, но там есть макросы.
|
|
|
|
Добавлено: Пн окт 10, 2016 22:39 |
|
|
|
|
|
Заголовок сообщения: |
Re: Маленькие хитрости |
|
|
время от времени требуются циклы с известным числом итераций. 12 0 do ... и далее по тексту пробовал ли кто-нибудь делать развёртку ( раскрутку) цикла?
время от времени требуются циклы с известным числом итераций. 12 0 do ... и далее по тексту пробовал ли кто-нибудь делать развёртку ( раскрутку) цикла?
|
|
|
|
Добавлено: Пн окт 10, 2016 21:04 |
|
|
|
|