Forth
http://fforum.winglion.ru/

Критика ANS-94
http://fforum.winglion.ru/viewtopic.php?f=9&t=30
Страница 3 из 3

Автор:  WingLion [ Вс янв 27, 2008 22:36 ]
Заголовок сообщения: 

Хищник писал(а):
Такое сравнение было в книге Семенова, причем действительно с пояснениями, где и что. FORGET же, как мне думается, съели по причине появления достаточного количества памяти, чтобы безболезненно хранить разные версии слова. Все равно с клавиатуры много не наколотить...


странно... с клавиатуры можно легко набрать строчку:
<pre>
INCLUDE 10Mb_source_file.frt
</pre>

/me раньше свои проекты на форте писал со строчек
<pre>
FORGET КАКАЯ-НИТЬ-ФИГНЯ
: КАКАЯ-НИТЬ-ФИГНЯ ." ик-пук-траляля" ;
</pre>

И при повторном инклюде старое забывалось, а новое компилилось..

a на стандарте ANS-94 оно уже не канает :(

Автор:  Hishnik [ Вс янв 27, 2008 22:39 ]
Заголовок сообщения: 

Зато появился MARKER. Его можно сделать "выразительным", типа COLD-RESTART, SOFT-RESTART, RELOAD-PARAMETERS.

Автор:  Forthware [ Ср фев 20, 2008 14:47 ]
Заголовок сообщения: 

Раз уж пошел разговор (в другой ветке), то выступлю, сам того не желая, в роли адвоката ANSI. И так:

1. Почему некоторые слова возвращают код ошибки на стеке а не вызывают exception?
Существуют два вида исключений: ошибки программы, кторые возникают вследствие неверных действий программы и делают ее дальнейшее выполнение бессмысленным или даже опасным; и штатные, когда ошибка может возникнуть вне зависимости от корректности действий программы. Первый случай, это, например переполнение стека, AV, деление на 0. Второй случай часто возникает при работе с файлами, поскольку при написании программы вы никак не можете гарантировать что ошибка не возникнет. При этом нет необходимосты прерывать работу программы, и часто можно обработать такую ошибку. Позиция коммитета такова, что если мы даем возможность работать с файлами, мы обязаны также дать возможность обрабатывать их ошибки в программе. Если бы слова работы с файлами выполняли THROW , то такая обработка могла бы выглядеть:
Код:
: ?DISK3 ( -- ior ) S" A:\DISK3ID.INI" R/O ['] OPEN-FILE CATCH DUP IF ." Insert Disk3 and try again." THEN ;

Но Exception wordset опциональный, и может отсутствовать вне зависимости от присутствия File-access wordset в системе. Поэтому, был выбран самый простой метод обработки ошибок.
ЗЫ Всего в стандарте 2 набора слов использующих такой подход это работа с файлами и выделение памяти, по понятной причине. Остальные слова не возвращают код ошибки (кроме CATCH) а выполняют THROW , в случае его доступности.

2. На счет измерения файлов в символах а не одресных единицах, понять замысел коммитета сложнее. Единственное возможное обьяснение которое я нашел упрятано вот тут:
Цитата:
A.11.6.1.0765 BIN
Some operating systems.....
....The Technical Committee has declined to address issues regarding the impact of “wide” characters on the File and Block word sets.

Из этого следует, что File-access wordset поддерживает character размером только в 1 байт, а значит его размер равен address unit, поскольку последний не может быть больше за character, но и меньше 1 байта не бывает (практически).
Хотя формально это не декларируется, и причины такого решения не обьясняются. Что, конечно, не есть хорошо.

3. Отсутствие FORGET ... Кто сказал что он отсутствует? Он есть, просто в следующих версиях его похерят. Причина проста - далеко не во всех реализациях Форта его возможно реализовать. Например, если у вас разделенная память для кода и данных, то получив адресс слова которое надо забыть, вы можете определить куда откотить указатель на область кода и словарей, но если данно слово не содеражало данных (создано не CREATE), то вы не будете знать куда откатывать область данных. Конечно, можно в словарной статье, для всех слов сохранять положения всех областей памяти, вот только это слишком жестокое требование для одного только слова FORGET, к тому носящего утилитарный характер (используется только при разработке). Альтернативный механизм с MARKER-ами позволяет сохранять в теле маркера сколь угодно точную и развернутую информацию о состоянии системы к которому надо откатиться. Словарные статьи при этом не страдают.

4.Контекст поиска не требует более 8 списков слов. Заметьте - это нижнее ограничение. Вы можете его снять вообще в своей реализации. На практике, большинство программ, особенно для малых систем не используют больших количество словарей одновременно в контексте поиска. Приведенный пример с ООП, конечно верный, но поскольку реализация ООП выходит за пределы АНСИ, то и принцип работы поиска по словарям тоже может быть изменен. Причем, во-первых - АНСИ дает достаточный инструментарий для создания практически любой системы поиска; во-вторых - не все ООП именно так работают со словарями.
Следует помнить, что набор слов управления поиском (Search order word set) является не завершенным механизмом, а инструментом создания таких механизмов. Там даже слова VOCABULARY нет, но оно легко создается, при необходимости. Так же и все другое.

5.Стандарт должен содержать тестовы пример. Совершенно верно. И АНСИ их содержит. Но очень, очень мало. Пару штук буквально, по памяти в локалзах, в комментарии к ], в CASE, и еще парочку. Совершенно согласен, что этого катастрофически мало, поскольку неоднозначных моментов есть много. К тому же, те что есть не вынесены в отдельный раздел, как того требуется.

Автор:  Ethereal [ Сб фев 26, 2011 21:06 ]
Заголовок сообщения:  Re: Критика ANS-94

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

А почему именно с плавающей точкой ? Ведь это-же числа с плавающей запятой !
Это у пиндосов floating point, а у нас - плавающая запятая.
Добавь к существующему формату записи литералов в Форте правило - запятая в записи
числа означает число с плавающей запятой. И получается совместимость сверху
вниз с существующими стандартами (кроме точки для чисел двойной точности
и буквы E для действительных чисел с мантиссой и показателем степени теперь
будет ещё и запятая).

Автор:  Hishnik [ Сб фев 26, 2011 21:36 ]
Заголовок сообщения:  Re: Критика ANS-94

Ethereal писал(а):
А почему именно с плавающей точкой ? Ведь это-же числа с плавающей запятой !
Это у пиндосов floating point, а у нас - плавающая запятая.

Я не знаю, кто такие пиндосы с точки зрения технического русского языка. Что касается IEEE-754, описывающего формат с плавающей точкой, то там именно точка. Что не отменяет возможности использования запятой, если она соответствует национальным стандартам.
Ethereal писал(а):
Добавь к существующему формату записи литералов в Форте правило - запятая в записи
числа означает число с плавающей запятой. И получается совместимость сверху
вниз с существующими стандартами (кроме точки для чисел двойной точности
и буквы E для действительных чисел с мантиссой и показателем степени теперь
будет ещё и запятая).

У меня именно так запятая и используется - это эвкивалент точки. Использование точки в Форте мне видится аналогом скобок - в ответ на детские, вобщем-то, претензии к непривычной записи выражений и отсутствии операций с числами с плавающей точкой пошла такая же детская реакция - а вот вам скобки в качестве комментариев, и точка в качестве разделителя для чисел двойной длины. И будете пользоваться, или уходите из нашей песочницы.

Автор:  dynamic-wind [ Сб фев 26, 2011 23:05 ]
Заголовок сообщения:  Re: Критика ANS-94

Ethereal писал(а):
А почему именно с плавающей точкой ? Ведь это-же числа с плавающей запятой !
Это у пиндосов floating point, а у нас - плавающая запятая.

Россiйскiй фортъ, н? такъ-ли?

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