Forth
http://fforum.winglion.ru/

Разработка "сверху вниз"
http://fforum.winglion.ru/viewtopic.php?f=4&t=2804
Страница 10 из 12

Автор:  вопрос [ Вс фев 19, 2012 11:37 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

gudleifr писал(а):
Убедили. Завязываем.

на самом деле - не начали, секрет прост - чтобы обсуждение не казалось (Хищнику :) ) бесплодны, должны быть поставлены такие задачи, которые нельзя "и так и эдак и а вот ещё",
а чтобы и одно хорошее решение находилось с трудом

вот например: концепция оптимального двустороннего интерфейса форт-С, не ограничивающего возможности ни одного из языков

Автор:  WingLion [ Вс фев 19, 2012 12:47 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

вопрос писал(а):
оптимального двустороннего интерфейса форт-С


"Сишник, перешедший на Форт" или "Фортер, перешедший на Си" - подойдут?

Автор:  вопрос [ Вс фев 19, 2012 12:56 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

WingLion писал(а):
"Сишник, перешедший на Форт" или "Фортер, перешедший на Си" - подойдут?

отнюдь - :D ничего общего
как фортеру иногда хочется "чего-то на высоком уровне, что будет работать быстро без фокусов с ассемблером", так и сишнику иногда нужно "что-то, что читается не по правилам С"
но это только пример

Автор:  WingLion [ Вс фев 19, 2012 13:12 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

`Kopa писал(а):
Может прикрепить некоторые топики на главной странице
форума, чтобы не возникало разногласий, что же есть
всё таки Форт? и какие вариации, в понимании, он допускает.



Сылок окажется слишком много... Потому что сколько фортеров, столько и пониманий "что такое форт"... по порядку величины, как минимум, это верно.

Автор:  `Kopa [ Вс фев 19, 2012 13:44 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

WingLion писал(а):
`Kopa писал(а):
Может прикрепить некоторые топики на главной странице

Сылок окажется слишком много... Потому что сколько фортеров, столько и пониманий "что такое форт"... по порядку величины, как минимум, это верно.


Тогда другой вариант - крутить "видеослайды" c разной Форт
тематикой. Например, колобки пишут программы на Форте и смотрят что получится ....:) (Тематика может "саморазвиваться")

Автор:  gudleifr [ Вс фев 19, 2012 14:41 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

Вопрос для уточнения того, "что такое Forth?"
Возьмем, например C. Создадим в нем "стек данных" и откажемся от передачи параметров иначе, как через него. Наплодим кучу Forth-подобных функций (макросов): DUP(), SWAP(), toR(), add(), branch()...
Теперь, для того, чтобы сделать нашу конструкцию более Forth-подобной, мы можем выбрать одно из двух:
1) Создать список имен функций (с адресами) и создать интерпретатор входного потока. Минус - мы не сможем просто создавать "ассемблерные слова".
2) Плюнуть на интерпретацию и считать "входным потоком" текст программы. Минус - мы не сможем создавать слова "на лету", но многие ли пользуются такой возможностью?
Конечно, "нормальный" Forth позволяет идти по обоим путям сразу, но у меня такое чувство, что большинство коллег считает, что это надо только из соображений "кошерности" Forth. Мол, я этим не пользуюсь, но без этого Forth не Forth.

Автор:  Hishnik [ Вс фев 19, 2012 16:07 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

gudleifr писал(а):
Возьмем, например C. Создадим в нем "стек данных" и откажемся от передачи параметров иначе, как через него. Наплодим кучу Forth-подобных функций (макросов): DUP(), SWAP(), toR(), add(), branch()...

В этом случае получится стековая машина со статически скомпилированными вызовами функций. Например, кросс-компилятор Форта для МК или ПЛИС работает весьма похоже.
gudleifr писал(а):
1) Создать список имен функций (с адресами) и создать интерпретатор входного потока. Минус - мы не сможем просто создавать "ассемблерные слова".

Это следующая часть - интерпретатор.

Последний шаг - компилятор. Не только ищем-выполняем, а еще и умеем добавлять код.

Автор:  gudleifr [ Вс фев 19, 2012 17:34 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

Хищник писал(а):
Последний шаг - компилятор. Не только ищем-выполняем, а еще и умеем добавлять код.
Этот "шаг" уже входит в (1). Создать слово-функцию, копящую в себе указатели на ф-ии, не проблема.
Здесь речь не о нашей изобретательности, а о несовместимости одновременно (1) и (2) без перехода к новому качеству "Forth". И о том, что это "качество" большинству коллег вроде бы и не надо. Например (1-6), предложенные коллегой dynamic-wind, описывают только путь (1).

Автор:  WingLion [ Вс фев 19, 2012 21:18 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

`Kopa писал(а):
Тогда другой вариант - крутить "видеослайды" c разной Форт
тематикой. Например, колобки пишут программы на Форте и смотрят что получится ....:) (Тематика может "саморазвиваться")


А кто их делать-то будет? Я, конечно, могу GIF слепить с переключающимися картинками, но интересно то не просто мельтешение разных картинок, а возможность ткнуться и перейти на интересующий сайт.

Автор:  gudleifr [ Вс фев 19, 2012 22:48 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

"- А почему в розовый?
- Я так и знал , что первый вопрос возражений не вызовет".
Та-а-дам! Правильный ответ:
1) Forth действительно идет "сразу двумя путями": совмещения высокоуровневых интерпретатора и компилятора входного потока и предоставления в распоряжение пользователя доступа к низкоуровневым средствам компьютера без ограничений. Но фишка в том, что кроме обеспечения этого самым простым способом в ядре Forth ничего нет!
2) Forth не существует в окончательной форме. Любая работающая Forth-система - это лишь промежуточное состояние между двумя целевыми компиляциями!
Есть ли факты, подтверждающие это определение?
Вспомним, например, судьбу блоков-экранов. Почему они отмерли? Да потому, что организовать чтение обычных последовательность файлов сейчас проще, чем поддерживать блоки. Тоже со стеками. Как только сопроцессор предоставил свой стек, ни один фортер не заморачивается с хранением вещественных чисел в стеке данных. Прямой шитый код, значит, "нормальный" стек - для данных. Подпрограммный - его занимают под возвраты. Проще и еще проще!
Или, возьмем тот же C. Понятно, конечный C-продукт - просто исполняемый файл, решающий задачу, с минимальными C-рудиментами. Было бы обидно, если Fort-продукт оставлял бы намного больше следов. Но, в отличие, от C (компилятор может быть сколь угодно избыточным, т.к. в конечный продукт не входит), Forth должен выродить приложение только путем саморасширения и самообрезания.
Достаточно ли этого определения для построения "Академического Forth"? Добавлю п.3.
3) Forth должен 100% соответствовать ANSI94. В нем должны работать все примеры из книг Броуди и все методы, предложенные Барановым/Ноздруновым.
(Когда я показал свой первый FOBOS сослуживцам, они ни фига не поверили, пока не ввели пример инфиксной записи выражений из Баранова и не убедились, что работает).
4) Уровни и модули, предложенные мною выше? Думаю, они автоматически вылезут из (1) и (2). Также, как и наличие метаязыка, описывающего все, начиная от кода NEXT и до теоретико-множественного понимания потоков (лент) слов (лексем, символов).
5) Из (1) и (2) также следует изначальная избыточность реализации на Forth "атавизмов".

Автор:  WingLion [ Пн фев 20, 2012 05:09 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

Главные принципы Форта в моем понимании такие:

Цитата:
Простота Форта заключается в его наипростейшем синтаксисе, определяемом фактически только двумя правилами:

    1. Все программы на Форте записываются СЛОВАМИ
    2. Слова отделяются друг от друга пробелами.


T.e. программа на Форте записывается просто последовательностью:

СЛОВО1 СЛОВО2 СЛОВО3 СЛОВО4 СЛОВО5 и т.д.

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

: НОВОЕ-СЛОВО СЛОВО1 СЛОВО2 СЛОВО3 СЛОВО4 ;

Здесь НОВОЕ-СЛОВО (должно быть очевидно) является определяемым новым словом, а последовательность СЛОВО1 СЛОВО2 СЛОВО3 СЛОВО4 - это последовательность, которая будет исполнена при вызове на исполнение слова НОВОЕ-СЛОВО
Слово ; (точка с запятой) является словом, заканчивающим определение (тут надо обязательно заметить, что оно (в полном соответствии с правилом 1) отделено от последнего слова определения - СЛОВО4 - пробелом).
Здесь же замечу, что программа по своей сути представляет из себя далеко не линейный список исполняемых действий. В Форте для изменения порядка исполнения имеются специальные слова для создания условных переходов, циклов и других структур кода, позволяющих выбирать порядок исполнения согласно требуемому алгоритму. Об этих словах будет рассказано позже, а пока замечу, что с точки зрения синтаксиса они ничем не отличаются от всех остальных слов Форта, т.е. они пишутся так же, как все слова Форта - окруженными пробелами.
Открытость Форта означает, что Форт полностью открыт для программиста как программа, т.е. он может быть изменен в любой момент в процессе исполнения/интерпретации входных данных. Это позволяет модифицировать Форт так, как удобно программисту. И в то же время, заставляет программиста как следует следить за своим кодом, чтобы он из-за ошибок не испортил программу самого Форта.



Автор:  gudleifr [ Пн фев 20, 2012 11:31 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

WingLion писал(а):
... 1. Все программы на Форте записываются СЛОВАМИ 2. Слова отделяются друг от друга пробелами... Расширяемость Форта означает, что в Форте можно определять новые слова через уже имеющиеся...
"Двуногое существо без перьев... с плоскими и широкими ногтями".

Автор:  Mihail [ Пн фев 20, 2012 11:34 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

WingLion писал(а):
T.e. программа на Форте записывается просто последовательностью:

СЛОВО1 СЛОВО2 СЛОВО3 СЛОВО4 СЛОВО5 и т.д.

Т.е. если я на вход spf4 подам devel/~mak/infix.f , то это будет не Форт?
Тогда что это будет?

Автор:  chess [ Пн фев 20, 2012 19:21 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

Mihail писал(а):
Т.е. если я на вход spf4 подам devel/~mak/infix.f , то это будет не Форт?
Тогда что это будет?

Тут возможны две разных точки зрения:
1. Это Форт. Возможен вариант: расширенный Форт.
Обоснование: Это Форт, так как никакая исходная функциональность не нарушена и он может точно так же как форт без инфикса(исходный форт) транслировать те же исходники с абсолютно тем же результатом.
2. Это не Форт, так как набор слов не соответствует стандартному(их больше), а уж если в чем-то нарушена исходная функциональность, то тем более это не Форт.
Я склоняюсь к 2., так как расширение функциональности, необходимое для решения реальных задач как правило нарушает исходную функциональность форта(пусть в мелочах). Контролировать эти ненарушения себе дороже.
Кроме того фортом удобно считать базовую систему, точно соответствующую какому-то стандартному состоянию. С этого состояния путем подгрузки одних и тех же библиотек всегда можно получить одно и тоже состояние одной и той же форт-системы. То есть исходники с одного уровня это единственный способ совмещения работы для разных программистов.

Автор:  gudleifr [ Пн фев 20, 2012 19:47 ]
Заголовок сообщения:  Re: Разработка "сверху вниз"

chess писал(а):
2. Это не Форт, так как набор слов не соответствует стандартному(их больше), а уж если в чем-то нарушена исходная функциональность, то тем более это не Форт.
Я склоняюсь к 2.
Браво! Особенно иероглифы...

Правильный ответ: разбиение слов пробелами не имеет отношения к свойствам, критичным для Forth. Кстати такой "нулевой синтаксис" свойственен еще SmallTalk, APL, shell...

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