Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пн окт 14, 2019 22:42

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт май 18, 2006 22:25 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6800
Благодарил (а): 16 раз.
Поблагодарили: 110 раз.
yGREK писал(а):
Перечитал ещё раз тред - я написал кучу глупостей

Ну не знаю. Мне было интересно отвечать :)

yGREK писал(а):
Попытаюсь подвести итог. Альтернатива имеет место быть. Ничего кардинально плохого в текущей реализации нет.

Ну так и я о том же. Я же говорю - критиканством занимаюсь.. :)))
:shuffle;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 17:46 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
WRITE-FILE ( c-addr u fileid -- ior )

Write u characters from c-addr to the file identified by fileid starting at its current position. [...]

Спрашивается зачем characters, а не address units?!

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 18:04 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 19 раз.
Поблагодарили: 58 раз.
гм, раз уж опять поднялась тема, запощу свои соображения:
<pre>
1) стандарт не должен фиксировать реализацию каких бы то ни было слов системы,
например, при описании [IF] [ELSE] [THEN] структур, не стоило приводить код,
а стоило описать лишь интерфейс, а так же поведение в стандартных и нестандартных
ситуациях.

2) алфавитная сортировка имен определений словаря пригодна только в оглавлении,
или некоем индексирующем списке. В тексте должна быть логическая связность,
то есть каждой теме должен быть отведен собственный раздел.

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

4) стандарт должен описывать набор слов, поведение слов, стековые диаграммы.
При этом не должен фиксировать реализацию чего бы то ни было, кроме интерфейса.

5) должен содержать тестовые примеры, позволяющие проверить совместимость со стандартом.
</pre>

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 19:14 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
A еще было бы не плохо иметь отдельный документ, который бы содержал таблицу сравнения стандартов, какие слова заменены, какие выкинуты, какие добавлены.
А так же в некоторых местах объяснения, почему так, а не этак.
Например, зачем съели слово FORGET и т.п...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 20:13 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6800
Благодарил (а): 16 раз.
Поблагодарили: 110 раз.
Такое сравнение было в книге Семенова, причем действительно с пояснениями, где и что. FORGET же, как мне думается, съели по причине появления достаточного количества памяти, чтобы безболезненно хранить разные версии слова. Все равно с клавиатуры много не наколотить...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 20:14 
mOleg, Стандарт приводит реализацию в качестве примера (неформально), а не фиксирует. Это нормально.

Хищник писал(а):
А вот уже на основе векторизованного обработчика можно организовать CATCH/THROW

Слова, возвращающие ior не зависят от, и не навязывают выбор механизма обработки исключений, и это правильно. Если бы они вызывали вектор-обработчик вместо возврата ior, то они бы навязывали упомянутый выбор: был бы недостаток в слове более низкого уровня, как в случае с READ-FILE & Co, который по Стандарту дает длину в символах, а не в адресных единицах.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 20:16 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 19 раз.
Поблагодарили: 58 раз.
Хищник писал(а):
FORGET же, как мне думается, съели по причине появления достаточного количества памяти, чтобы безболезненно хранить разные версии слова.

ну, для начала, нужно вспомнить, что на место FORGET пришли MARKER

Цитата перевода АНСИ-94

<pre>MARKER
Поскольку реализации словаря стали более сложными, и в некоторых случаях
используют множественные адресные пространства, FORGET стал предельно трудным
или невозможным для реализации на многих системах Forth. MARKER очень ослабляет
проблему, делая возможным для системы помнить "ориентирующую информацию"
заранее, которая конкретно отмечает места, где словарь может быть перестроен в
некотором будущем.
</pre>

так вот, мне кажется, что это большая глупость.
Во-первых, Маркеры не проще получаются, да и не на столько удобны,
во-вторых, FORGET тоже надо было немного поменять, не экономить память, а исключать имя из словаря,
не обязательно исключая код...

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 20:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6800
Благодарил (а): 16 раз.
Поблагодарили: 110 раз.
rvm писал(а):
Слова, возвращающие ior не зависят от, и не навязывают выбор механизма обработки исключений, и это правильно. Если бы они вызывали вектор-обработчик вместо возврата ior, то они бы навязывали упомянутый выбор: был бы недостаток в слове более низкого уровня

В каких случаях мы кладем поверх фанерного пола линолеум? Да практически во всех - так удобнее. Другое дело, что линолеум не надо прибивать гвоздями или приклеивать суперклеем. Но приводить человека в квартиру с фанерными полами и нештукатуренными стенами ("зато Вы сможете сами выбрать стиль мазков, цвет обоев и фактуру линолеума!") - дело гиблое. Зачем вот мне слово более низкого уровня? Сколько помню, проблемы с файловыми операциями заключались в том, что такого файла не было, а это уже не поправить изнутри программы. Ну разве что создать при отсутствии, но это решается средствами ОС - т.е. форматом вызова функции открытия файла. Что еще может быть? Физическая ошибка на диске? И мы при этом еще трепыхаемся и анализируем ior? Это мне никогда не было понятно. Ну вот дали эту пресловутую "свободу выбора"... и что с ней делать? Каждый раз выбирать (каждый раз поутру стелить линолеум, поверх класть ковры, и только потом ходить)? Наконец, доступ к API никто не закрывает - если нужен такой тщательный анализ низкоуровневых операций, можно и оформить нужные слова вручную.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 20:41 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 19 раз.
Поблагодарили: 58 раз.
ну, мне кажется, что вообще работа с файлами - это неизбежное зло.
В форте файлов быть не должно, как и файловых операций 8) все должно быть вокруг слов!
Что же насчет результата операции, то гораздо лучше было бы просто THROW делать.
Хотим ошибки обрабатывать делаем CATCH , не хотим, не обрабатываем 8)

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

Код:
: INCLUDE-PROBE ( addr u -- ... 0 | ior )
  R/O OPEN-FILE-SHARED ?DUP
  IF NIP EXIT THEN
  INCLUDE-FILE 0
;


вместо этого было бы логичнее и проще:
Код:
: INCLUDE-PROBE ( asc # --> ... 0 | ior ) ['] (INCLUDED1) CATCH ;


и это не проблема СПФа, а проблема используемого подхода, который, увы, и стандарт зафиксировал

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 21:04 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6800
Благодарил (а): 16 раз.
Поблагодарили: 110 раз.
mOleg писал(а):
ну, мне кажется, что вообще работа с файлами - это неизбежное зло.
В форте файлов быть не должно, как и файловых операций все должно быть вокруг слов!

В языке - не должно быть. Но мы же делаем систему, работающую в определенном окружении. Если ОС содержит функции работы с файлами, вокруг этих функций необходимо сделать обертки. Кстати, крайне желательно, чтобы обертки были или как можно ближе к родному формату функций ОС, или тогда уж реализовывали некий общий знаменатель.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 21:09 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 19 раз.
Поблагодарили: 58 раз.
Хищник писал(а):
Если ОС содержит функции работы с файлами, вокруг этих функций необходимо сделать обертки. Кстати, крайне желательно, чтобы обертки были или как можно ближе к родному формату функций ОС, или тогда уж реализовывали некий общий знаменатель.

"если скрестить ужа и ежа - получится колючая проволока"... что и имеем
оно так и сделано.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 21:14 
Хищник писал(а):
Зачем вот мне слово более низкого уровня? Сколько помню, проблемы с файловыми операциями заключались в том, что такого файла не было, а это уже не поправить изнутри программы.

Слово OPEN-LOGFILE открывает файл и позиционирует на конец, если файла нету — создает его, если позиционировать не удалось — закрывает хэндл (чтобы не было утечки):
Код:
: OPEN-LOGFILE ( a u -- h ior )
  2DUP FILE-EXIST 0= IF W/O CREATE-FILE-SHARED EXIT THEN
  W/O OPEN-FILE-SHARED DUP IF EXIT THEN DROP ( h )
  DUP 9REPOSITION-FILE DUP 0= IF EXIT THEN ( h ior )
  SWAP CLOSE-FILE DROP ( ior ) 0 SWAP ( 0 ior )
;


Хотелось бы взглянуть на описание этого слова через векторый обработчик и слова вида *-THROW (типа CLOSE-FILE-THROW), не возвращающие ior. Или таки это задача неправильная, и таких слов делать ненадо?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 21:27 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6800
Благодарил (а): 16 раз.
Поблагодарили: 110 раз.
rvm писал(а):
Слово OPEN-LOGFILE открывает файл и позиционирует на конец, если файла нету — создает его, если позиционировать не удалось — закрывает хэндл (чтобы не было утечки):


: OPEN-LOGFILE ( a u -- h )

h равен нулю, если открыть не удалось. Никакого векторного обработчика здесь не требуется, поскольку результат открытия файла в любом случае записывается в некую переменную, а в какой момент мы ее проверим - другой вопрос. ОС как бы не развалится, если мы будем пытаться писать в файл с номером 0. А вот кода станет меньше.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 21:38 
Даже если так. Приведите пожалуйста код :)
(там еще надо проверить операцию позиционирования).


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 27, 2008 22:33 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6800
Благодарил (а): 16 раз.
Поблагодарили: 110 раз.
rvm писал(а):
Даже если так. Приведите пожалуйста код
(там еще надо проверить операцию позиционирования).


Код:
invoke  CreateFileA, eax, GENERIC_READ+GENERIC_WRITE, FILE_SHARE_READ, 0, [b]CREATE_ALWAYS[/b], 0, 0


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

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


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

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


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

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