Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср окт 24, 2018 09:29

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Forth vs Python
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
Не знаю, я того ще не читал. Но за ссылку - огромное спасибо!

Про интерфейсы, описываемые не только через классические функциональные наборы-списки (что однобоко и чисто статический аспект имеет), но и через РБНФ обмена - я из Композиты и вообще трудов ETHZ узнал. Юрг Гуткнехт с Зуевым реализовали впервые это в Зонноне. Потом это подхватили в Швейцарском офисе МС ресёрч. Дальше - ушло пред светлы очи САМОГО. Наконец, когда мужичьё из Рэдмонда НАКОНЕЦ ДОПЁРЛО, Ч_Т_О им на блюдечке с голубой каёмочкой птенцы гнезда Виртового ОПЯТЬ принесли - быстренько к рукам прибрали. Появилось слово Singularity. Правда там, про ETHZ уже ВООБЩЕ никто ничего не вспоминает (так, только Меза упомянута вскользь). ... Гавнюки - они всегда и везде гавнюками остаются.

Теперь преимущества формализации и поддержки протоколов обмена в языке программирования становятся очевидными всё большему числу людей (остальные - танкисты, наверное? и ещё люки не открыли... наверное мерный рокот двигателей "оопых-оопых-оопых" и выпускной клапан, врем-от-времени травит: "ииинтерфейссссссссссс"- пока заглушает шум снаружи? Наверное надо ждать, пока жизнь и теория им гаечным ключём по люку над кумполами постучит?)

Какое это всё имеет отношение к форту? Ну, скажем так, что некий класс стековых автоматов очень внятно может описывать такого рода протоклолы обмена - следовательно и наиболее естественно будет реализовывать оте самые "стражи", которые на входах/выходах общающихся сущностей будут блюсти соблюдение протоколов (последовательности посылаемых/принимаемых аргументов, их типов и попадание в диапазоны значений аргументов сообщений/ответов)...

Примерно так-с, для начала...
Сообщение Добавлено: Пн апр 06, 2009 23:22
  Заголовок сообщения:   Ответить с цитатой
Wlad писал(а):
Тип (сиречь "класс") - не только (и не столько) список предоставляемых внешнему миру описаний функций (методов) экземпляром этого типа, а - описание протокола взаимодействия с этим экземпляром (например, через описание синтаксиса протокола на РБНФ, напрямую поддерживаемого в языке программирования).
Подавляющее большинство программирующей братии пока, что до сего фахту ещё не допёрла... Ничего. Скоро жисть заставит. Хотя бы и через Sing# и иже с ним...


Это не отсюда? :)
http://www.delphikingdom.com/asp/viewit ... logid=1013
Сообщение Добавлено: Пн апр 06, 2009 11:17
  Заголовок сообщения:   Ответить с цитатой
Тип (сиречь "класс") - не только (и не столько) список предоставляемых внешнему миру описаний функций (методов) экземпляром этого типа, а - описание протокола взаимодействия с этим экземпляром (например, через описание синтаксиса протокола на РБНФ, напрямую поддерживаемого в языке программирования).
Подавляющее большинство программирующей братии пока, что до сего фахту ещё не допёрла... Ничего. Скоро жисть заставит. Хотя бы и через Sing# и иже с ним...
Сообщение Добавлено: Вс апр 05, 2009 19:31
  Заголовок сообщения:   Ответить с цитатой
VoidVolker писал(а):
А это как? Можно по-проще объяснить? Пример привести?

Ну простейший пример - стексы.

Есть имена слов, работающих как стековые манипуляторы:
DUP DROP SWAP OVER и т.п.
заменяем их все и те которые еще отсутствуют на имена с привнесенным синтаксисом
вида n\n1n2n3..nk и теперь вместо:
DUP будет написано 1\11,
DROP 1\
SWAP 2\21
OVER 2\121
ROT 3\231
-ROT 3\312
2NIP 4\34 и т.п.
и как результат, можем вместо выписывания для (1 2 3 4 -- 4 1 ) NIP NIP SWAP, написать 4\41.

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

Что по строкам.
Для, скажем пары строк, можно образовать группу лексем, для которой можно
создать соответствующий тезаурус, который будет формировать код, аналогичный
коду, который создают слова SEARCH, SPLIT, S+, и им подобные еще не существующие
с различным результатом. Вид синт. конструкции, охватывающий все результаты можно подобрать и не придумывать названий.

Навскидку:
\ для search, здесь b от begin, e от end, t - true, f - false, b2e1 - длина выходной строки от начала строки 2 в строке 1 до конца строки 1
s=b2,b2e1,t|s1,f
читается - если строка 2 целиком содержится в строке 1, то на выходе будет
адрес начала второй строки в первой строке, длина от адреса начала второй строки в строке один до адреса конца первой строки и TRUE,
а в случае несравнения строк - адрес строки 1, длина строки 1, FALSE.

Код:
\ search1
\ s1 ---------
\ s2   ----
\ out  -------
s=b2,u2,t|s1,f

\ search2
\ s1 ---------
\ s2   ----
\ out  ----
s=b1,b1b2,t|s1,f

\ split
\ s1      ----------
\ s2        ---
\ out     --   -----
s=b1,b1b2,e2,e2e1,t|s1,f

\ split-
\ s1      ----------
\ s2        ---
\ out     -----   --
s=e2,e2e1,b1,b1b2,t|s1,f
... и можно привести еще много разных вариантов исходных строк и функций над ними

Получается громоздко, но можно еще подумать для сокращения записи конструкции, главное чтобы потом не усложнилась процедура опознавания выше
разумного предела. Часть параметров функции сравнения строк можно давать на стеке. Вобщем надо делать синт. конструкции интуитивно понятными.
Что-то можно и позаимствовать из майнстрима.

Кстати потом можно наделать каких надо форт-слов под конкретную задачу.

: search ( a1 u1 a2 u2 -- a u true | a1 u1 false) s=b2,b1e1,t|s1,f ;
: split ( a1 u1 a2 u2 -- a3 u3 a4 u4 true | a1 u1 false) s=b1,b1b2,e2,e2e1,t|s1,f ;
Сообщение Добавлено: Пт апр 03, 2009 14:09
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Но в данном случае, речь идет как раз о нетостатках данной системы.
Дело в том, что не всем они очевидны.


Как опытный фортер и человек, делавший что то подобное можешь их разъяснить?
Сообщение Добавлено: Пт апр 03, 2009 12:49
  Заголовок сообщения:   Ответить с цитатой
chess писал(а):
расширение в направлении привнесения синтаксической нагрузки в имена, с целью упорядочить создание функций работающих с комбинаторно организованными данными. Например так можно написать функции работы со строками - заменить все эти SEARCH, SPLIT, S+ и т.д. и т.п. единой синтаксической конструкцией. От обилия слов работающих с комбинаторно организованными данными это позволит избавиться

А это как? Можно по-проще объяснить? Пример привести?
Сообщение Добавлено: Чт апр 02, 2009 21:41
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Форт ничему не противоречит. И что за стековый механизм?
Есть стек данных которым можно пользоваться, при этом можно завести
еще кучу стеков и других структур даных. Вот я и завел стек типов, который
содердит идентификаторы обознацающие типы данных на стеке данных
и процедуры, которые которые действуют в зависимости от содержимого этого стека.

Вот после этого надо будет помнить что одни процедуры работают со стеком типов, а другие не работают.
Я ничего не имею против использования типов в конкретных задачах(где это сильно надо), но вводить
типы глобально как в StrongForth это по гибкости и расширяемости форта наносить удар - увольте.
На любом стеке лежат неименованные данные и как их толковать решает программист.
Есть направления действительно повышающие мощность форта, например, расширение в направлении
привнесения синтаксической нагрузки в имена, с целью упорядочить создание функций работающих с комбинаторно
организованными данными. Например так можно написать функции работы со строками - заменить все эти SEARCH, SPLIT,
S+ и т.д. и т.п. единой синтаксической конструкцией. От обилия слов работающих с комбинаторно организованными данными
это позволит избавиться. И таких примеров можно много привести. Причем введение синтаксического наполнения имен ни в чем
не ограничит Форт, а наоборот избавит программиста придумывать массу новых имен слов на ровном месте.
Сообщение Добавлено: Чт апр 02, 2009 18:32
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
be_nt_all писал(а):
Идём на http://home.vrweb.de/stephan.becher/forth/doc/toc.htm -и пытаемся объяснить что тут такого вредного.

От того, что нечто лежит в интернете, оно автоматически становится образцом для подражания?


От то, что лежит в интернете, может стать образцом для подражания.
Но в данном случае, речь идет какраз о нетостатках данной системы.
Дело в том, что не всем они очевидны.
Сообщение Добавлено: Чт апр 02, 2009 15:43
  Заголовок сообщения:   Ответить с цитатой
be_nt_all писал(а):
Идём на http://home.vrweb.de/stephan.becher/forth/doc/toc.htm - читаем документацию на StrongForth () (можно ещё посмотреть краткий учебник отсюда http://home.vrweb.de/stephan.becher/str ... /forth.zip) и пытаемся объяснить что тут такого вредного.

От того, что нечто лежит в интернете, оно автоматически становится образцом для подражания?
Сообщение Добавлено: Чт апр 02, 2009 14:53
  Заголовок сообщения:   Ответить с цитатой
chess писал(а):
Тут ведь речь идет о том, что вроде-бы благая идея ввести типы в Форте даст больше вреда чем пользы.

Идём на http://home.vrweb.de/stephan.becher/forth/doc/toc.htm - читаем документацию на StrongForth () (можно ещё посмотреть краткий учебник отсюда http://home.vrweb.de/stephan.becher/str ... /forth.zip) и пытаемся объяснить что тут такого вредного.
Сообщение Добавлено: Чт апр 02, 2009 12:43
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Но действием может быть компиляция методов. Таким образом, достигается позднее связывание.


Тут я ошибся: "компиляция методов" это раннее связывание.
Поздним связыванием будет компиляция абстрактных функций (посылок в терминах ООП).
Но вроде идея понятна.

be_nt_all писал(а):
Да, но при изменении времени связывания на раннее нужно, как минимум делать откат стека типов на ветвь "иначе" условного оператора (это при условии что мы новых управляющих конструкций не определяем)...


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

chess писал(а):
Стековая архитектура не противоречит, а единственный стековый механизм


Форт ничему не противоречит. И что за стековый механизм?
Есть стек данных которым можно пользоваться, при этом можно завести
еще кучу стеков и других структур даных. Вот я и завел стек типов, который
содердит идентификаторы обознацающие типы данных на стеке данных
и процедуры, которые которые действуют в зависимости от содержимого этого стека.
Сообщение Добавлено: Чт апр 02, 2009 11:45
  Заголовок сообщения:   Ответить с цитатой
be_nt_all писал(а):
Ну и о чём спор? Мы с Михаилом говорили о способах введения в типизации в Форт. И кстати сама по себе стековая архитектура ни статической, ни динамической типизации не противоречит...

Стековая архитектура не противоречит, а единственный стековый механизм передачи параметров просто делает понятие типизации ненужным. Тут ведь речь идет о том, что вроде-бы благая идея ввести типы в Форте даст больше вреда чем пользы.
Да, про время связывания, - никакого отношения к динамической типизации это понятие не имеет. В фортовском понимании
это просто время связывания имени с кодом. Для макросов, например, имеем позднее связывание, для слов - раннее.
Сообщение Добавлено: Чт апр 02, 2009 10:13
  Заголовок сообщения:   Ответить с цитатой
chess писал(а):
Посмотреть на это конечно можно, но в применении к форту это понятие(динамическая типизация) некорректно использовать, так как понятие типа в форте как базовое отсутствует в связи с принятым стековым механизмом передачи параметров.

Ну и о чём спор? Мы с Михаилом говорили о способах введения в типизации в Форт. И кстати сама по себе стековая архитектура ни статической, ни динамической типизации не противоречит...
Сообщение Добавлено: Чт апр 02, 2009 09:37
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Mihail писал(а):
На сколько я понимаю динамическая типизация - это позднее связывание.

А разве негде посмотреть, что это такое?


Вот выдержка из Википедии:
Динами́ческая типиза́ция — приём, широко используемый в языках программирования и языках спецификации, при котором переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов. Примеры динамически типизированных языков — Smalltalk, Python, Руби, PHP, Perl, JavaScript.

Посмотреть на это конечно можно, но в применении к форту это понятие(динамическая типизация) некорректно использовать,
так как понятие типа в форте как базовое отсутствует в связи с принятым стековым механизмом передачи параметров.
Сообщение Добавлено: Чт апр 02, 2009 09:29
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
На сколько я понимаю динамическая типизация - это позднее связывание.

Разумеется
Mihail писал(а):
Я использую стек типов и действия функций зависят от содержимого этого стека.
Но действием может быть компиляция методов. Таким образом, достигается позднее связывание.
Вообще, поменять время связывания не проблема. Можно сделать динамическое изменение времени
связывания.

Да, но при изменении времени связывания на раннее нужно, как минимум делать откат стека типов на ветвь "иначе" условного оператора (это при условии что мы новых управляющих конструкций не определяем)...

Ну а вообще СтронгФорт по сути так и работает, у его автора получилось около 60К исходников (вместе с комментариями).
Сообщение Добавлено: Чт апр 02, 2009 09:19

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


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