Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 06:40

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу 1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Ограничения FORTH
СообщениеДобавлено: Пн июн 01, 2015 10:09 
<Убрано во исполнение решения Hishnik>


Последний раз редактировалось gudleifr Чт апр 14, 2016 11:23, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 01, 2015 19:07 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
А вот чего он не позволяет? Чего в FORTH нельзя менять (либо перестанет быть FORTH, либо работать перестанет)?

Нельзя менять класс грамматики - она регулярная (автоматная). Попытки ввести разбор инфиксных выражений превращают Форт в алголоподобный язык со своеобразным синтаксисом, просто написанный на Форте. Однако Хаскелль, написанный на Си, который написан на ассемблере, не остается ассемблером. Точно так же Форт не останется Фортом, если после выполнения какого-то количества слов на вход пойдут строки вида int a; a = b + c; data[a+3] = (d + e)*f; Да, согласно старому мему "Форт может все". И вообще он "среди небожителей великий Индра, среди летающих - могучий Гаруда, средь огней - негасимый Агни" и так далее в стиле Махабхараты. Однако есть простое практическое правило - если программист знает язык и имеет базовую подготовку в своей области, он должен иметь возможность самостоятельно разбирать программы, написанные на этом языке для своей области. Иначе его придется переучивать под другой язык.

Переключение контекстных словарей - интересное дополнение к регулярной грамматике. Оно позволяет иметь для Форта набор регулярных грамматик для различных контекстов исполнения.



За это сообщение автора Hishnik поблагодарил: KPG
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 01, 2015 19:26 
<Убрано во исполнение решения Hishnik>


Последний раз редактировалось gudleifr Чт апр 14, 2016 11:24, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 01, 2015 21:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
Боюсь, это сводится к здравому требованию "общей простоты".

Нет, это не просто общее требование. Любые классификации должны вводиться не просто так, а для упрощения процесса разработки. Если живые организмы классифицировали на птиц и рыб, то в целом понятно, что птицы летают, а рыбы плавают (исключения рассматриваем отдельно). Соответственно, их надо ловить по-разному, от птицы получаем перья, крылышки и ножки, а рыбку надо чистить. Классификация языков программирования также преследует определенные цели. Языки 3-го класса (регулярные) разбираются простейшим автоматом. Языки 2-го класса - магазинным автоматом (т.е. по сути надо завести стек внутри компилятора, что в Форте заменяется стеками в рантайме, включая стек control flow). Это разный уровень работы, и выполнить для того и другого надо разный набор действий - по объему кода, сложности отладки, получаемым результатам, объему последующей работы по описанию языка и т.п.
gudleifr писал(а):
Да, арифметика - обратно-польская, а все остальное? Количество "оборотов", т.е. слов, распознающих несколько следующих за ним в обход нормальной интерпретации, растет от версии к версии: векторные слова (в нормальном, а не форумном смысле - QUAN, VALUE, VECTOR), слова, чувствительные к режиму (POSTPONE и т.д.)... Слово DO, даже, требует для нормальной работы дополнительного стека. Какая уж тут "регулярная грамматика"?

По разбору - именно регулярная. Выделили токен - нашли адрес. Одна из находок Форта - слова немедленного исполнения, что и позволило вместо классификаторов строк и констант получить действительно язык программирования. Векторные слова (да, слова с несколькими точками входа), POSTPONE - это уже детали. Ни того, ни другого может не быть, вместе с тем VECT и QUAN будут в реализации присутствовать. Программист обычно действует не строго в рамках одной концепции, и если кому-то показалось удобным/уместным добавить "нестрогую" технологию, то кто ж ему запретит? Да, текущий Форт есть смесь исходной идеи и последующих добавок, выполненных конкретными авторами (у которых своя предыстория). С тем же VECT - я прекрасно понимаю, что название уже не соответствует внутренней начинке (у меня нет никаких CFA внутри). Потому и "указатель" - это просто возможность хоть как-то зацепиться за образ. А еще есть "кодофайл", есть "насыщение". Оно может восприниматься как удачное или неудачное, но так сложилось.
gudleifr писал(а):
Самое же печальное, большинство присутствующих считают управляющие конструкции (IF ... THEN, BEGIN ... AGAIN...) грамматически-неделимыми.

О, интересно. А почему это печально?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 01, 2015 22:21 
<Убрано во исполнение решения Hishnik>


Последний раз редактировалось gudleifr Чт апр 14, 2016 11:24, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 01, 2015 22:52 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
Именно общее. Большинство фортеров, создающих свои FORTH-системы, ведать не ведают ни о каких классах грамматик.

А герой Мольера ведать не ведал, что говорит прозой :) Таки ему это не мешало говорить именно прозой, потому что на поэзию он как-то не тянул. Разве что случайно срифмовать пару слов. Так и фортеры в основной массе точно так же "случайно рифмуют".
gudleifr писал(а):
И Вы своим предыдущим постом ему это запрещали? Мол, "Нельзя менять класс грамматики - она регулярная (автоматная)".

А как я могу запретить что-то постороннему человеку? Он купил компьютер, пусть хоть Форт пишет, хоть Си, хоть молотком его разбивает. Вот только и он меня не может заставить мгновенно распознать Форт, если реализует какой-нибудь синтаксический анализатор, а потом напишет func1(int x, int y). И встроить в свой Форт его анализатор сможет не каждый. А вот взять слово с некоторой стековой нотацией и несложным действием и добавить в свой транслятор могут многие.
gudleifr писал(а):
Если, уж на то пошло, существуют задачи, требующие более сложных языков. Вы запрещаете их программировать на FORTH? См. например, PATTERNFORTH.

Там регулярный автомат? Тогда исключительно вопрос знания этих алгоритмов и способности в разумное время все это отладить.
gudleifr писал(а):
Это заблуждение. Зная, что такое некая грамматика, создать парсер, ей строго соответствующий, можно буквально автоматически.

Так хочется думать апологетам computer science откуда-нибудь из СпбГТУ. Там много фанатов лямбды, генетических алгоритмов и лексического разбора. В действительности это навык, который просто не всем нужен. Просто стараниями рафинированных теоретиков лексический разбор превратился в подобие диамата - все слышали, никто толком не знает, но все боятся признаться, что не разбираются. Что интересно, если человек не хочет писать лексический анализатор, то он может его и не писать, и все равно получить Форт.
gudleifr писал(а):
А вот написание парсера для "нестрого следующего простейшей грамматике языка" возвращает нас в славные времена FORTRAN-компиляторов, когда каждый заработавший был обязан быть шедевром.

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

Форт удачно мимикрирует под алголоподобные языки. Главное - оставаться в рамках постфикса/конкатенативной компиляции.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 01, 2015 23:02 
<Убрано во исполнение решения Hishnik>


Последний раз редактировалось gudleifr Чт апр 14, 2016 11:25, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 01, 2015 23:45 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
Вам хочется видеть FORTH грамматически-строгим (как и всем нам).

Мне хочется только, чтобы он работал. Будут ли рады теоретики, мне как-то не очень важно.
gudleifr писал(а):
Однако, как я показал выше таковым он может быть только его некоторое подножество (без "слов немедленного исполнения", циклов DO, сложных средств саморасширения...)

В целом да, потому что слова немедленного исполнения занимаются формированием кода самостоятельно. CREATE DOES> способны создать такие вещи, которые заранее предусмотреть невозможно. Переключение контекстного словаря может сделать совершенно другим даже ранее проанализированный текст. Тем оно и ценно :)
gudleifr писал(а):
И я вполне допускаю, что это "строгое подмножество" наиболее подходит для реализации в железе.

Оно слишком скучно, чтобы класть в железо.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пт июн 12, 2015 13:27 
<Убрано во исполнение решения Hishnik>


Последний раз редактировалось gudleifr Чт апр 14, 2016 11:25, всего редактировалось 2 раз(а).

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 15, 2015 10:53 
<Убрано во исполнение решения Hishnik>


Последний раз редактировалось gudleifr Чт апр 14, 2016 11:26, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 15, 2015 13:02 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Оба пункта решаются выработкой соответствующих навыков и применением собственных шаблонов кодирования. Сложные элементы не надо класть на стек вообще. Слишком много OVER TUCK NIP ROT - признак неразберихи на стеке, которая решается введением вспомогательных слов и локальных переменных. Надо откатить данные? Заводим временные структуры, работаем в них, при необходимости переписываем их в постоянные или же не переписываем. Работает безотносительно языка.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 15, 2015 13:05 
<Убрано во исполнение решения Hishnik>


Последний раз редактировалось gudleifr Чт апр 14, 2016 11:26, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 15, 2015 13:21 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
Что подтверждается, например, нарочитым непониманием понятия "сложный элемент".

Вы разве его здесь уточняли? Или тут "сложный элемент" вроде "настоящего шотландца" - Вы намерены усложнять его до тех пор, пока обычное аккуратное кодирование-отладка перестанут срабатывать? Так это еще далеко вперед, это от десятков тысяч строк кода начинается, когда уже архитектуру программы сложно держать в голове.
gudleifr писал(а):
Более того, понятие "шаблон кодирования" является в FORTH паразитом, ведь он вводился как "язык без шаблонов".


Шаблон - понятие аморфное.

Код:
0
SIZE 0 DO
X[] I -TH @ +
LOOP


Чем не шаблон? Придумывание уникальных лексиконов под каждую задачу - занятие очень неблагодарное и тормозящее рабочий процесс. Уникальные CREATE-слова никак не могут быть самоцелью, особенно если они вводятся не для упрощения разработки, а для демонстрации исключительных навыков программиста. В приведенном примере эту структуру просто "глаз захватывает". Я сразу вижу, что это работа с массивом. Да, плюс Форта в том, что он не заставляет использовать именно это. Но ведь что-то все равно будет использоваться.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 15, 2015 13:45 
<Убрано во исполнение решения Hishnik>


Последний раз редактировалось gudleifr Чт апр 14, 2016 11:26, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ограничения FORTH
СообщениеДобавлено: Пн июн 15, 2015 14:14 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
Виноват, думал, из контекста понятно.
Например, как у Мура (объект - таблица БД):

Совсем не очевидно. Что такое все эти слова? Требуется ли DEPT перед всем этим? Только ли DEPT (может, там еще есть другие подразделения, которые обозначаются не DEPT). Видно, что LIST - это точно слово с каким-то действием внутри. А остальное? Слова, константы, модификаторы? LIST способно самостоятельно подстроиться под разные комбинации, или же данный синтаксис - просто мимикрия под языки запросов к БД? Так что вопрос сложности открыт. Он и вообще открыт (чем мерить сложность?), а в данном случае требует уточнения. Это сложность реализации? Или сложность работы с системой? Или сложность сопровождения и отладки?
gudleifr писал(а):
Нужно ли придумывать лексиконы под каждую задачу? Да, так проще! Какова доля "уникальности", вопрос открытый (сейчас я, например, экспериментирую со словарями, содержащими одни и те же слова, но по-разному реализованные).

Подозреваю, что речь идет не столько о лексиконах, сколько о просто наименовании регулярных слов... :)

gudleifr писал(а):
"Упрощение разработки" против "демонстрации навыков"? Единственный способ отличить одно от другого - ввести "местечковые Ван-Тасселы". Полезно для имитации полезной деятельности, но вредно для сложного программирования.

Единственный критерий - к какому минимальному набору придет программист, имеющий свободу выбора методов, и при этом реализующий конкретное изделие. Листинги программ и список новшеств никому не интересен, писать можно хоть на Бейсике, но и ссылаться на то, что "Бейсик это не поддерживает, потому делать не будем" нельзя. Практика показывает, что шелуха отваливается сама.
gudleifr писал(а):
"Форт... не заставляет использовать именно это"? Боюсь, заставляет. FORTH диктует решение задачи единственным способом - "как будет работать, так и пишем". Напишете по-другому - оно и работать будет по-другому.


Код:
0
0
BEGIN
  X[] OVER -TH @ SWAP + SWAP
  1 +
  DUP SIZE =
UNTIL
DROP


Визуальное впечатление другое. DO LOOP не используется.

Я уже не говорю о различиях кода, построенного вокруг КА, и кода из цепочек IF THEN. Они могут быть логически эквивалентными, но писаться и отлаживаться в разных стилях.

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

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


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

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


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

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


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

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