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 писал(а): "Сишник, перешедший на Форт" или "Фортер, перешедший на Си" - подойдут? отнюдь - ничего общего как фортеру иногда хочется "чего-то на высоком уровне, что будет работать быстро без фокусов с ассемблером", так и сишнику иногда нужно "что-то, что читается не по правилам С" но это только пример |
Автор: | 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: Разработка "сверху вниз" |
Главные принципы Форта в моем понимании такие: Цитата: Простота Форта заключается в его наипростейшем синтаксисе, определяемом фактически только двумя правилами:
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/ |