Forth http://fforum.winglion.ru/ |
|
Начальный курс программирования на языке Форт http://fforum.winglion.ru/viewtopic.php?f=37&t=2017 |
Страница 4 из 4 |
Автор: | atar [ Пт дек 04, 2015 00:49 ] |
Заголовок сообщения: | Re: Начальный курс программирования на языке Форт |
gudleifr писал(а): Раз уж тут все равно чистить, предлагаю (между "Днем знаний" и "Днем Учителя") порассуждать об этой книге. Извиняюсь что опоздал, но между этими днями меня тут ещё не было. Только что прочёл её и спешу поделиться впечатлениями. gudleifr писал(а): 1. Признать ее полезной или устарелой? Книга однозначно полезная. Что касается русского перевода - на твоей странице он реально лучше чем на nncron.ru. На nncron.ru есть опечатки и даже фактические ошибки Например, в главе 4: nncron.ru писал(а): Слово ?DUP дублирует вершину стека только в том случае, если там находится нулевое значение. На этом месте я начал читать параллельно перевод и английское он-лайн издание, что позволило увидеть некоторые интересные моменты. Но, в оправдание идеи русского перевода, на gudleifr.h1.ru опечатки и ошибки вычищены, за что большое спасибо. Комментарии читателя - тоже интересны. gudleifr писал(а): 5. В конце концов, может, поделиться друг с другом комментариями и критическими статьями? Мне показались интересными отличия между русской версией и обновлённым оригиналом. Часть из них, очевидно, связана с развитием стандарта. Но с некоторыми непонятно, например, в 11 главе в переводе в примерах [COMPILE], а в он-лайн версии - POSTPONE. Кто-нибудь может объяснить разницу? Решения задачек в 11 главе перевода - понятны. В он-лайн версии, на мой взгляд новичка, непонятно ни рожна: Код: : PLURAL ( compile: xt -- ) ( run: ? #times -- ) CREATE , DOES> @ LOCALS| xt | 0 ?DO xt EXECUTE LOOP ; Слово LOCALS там не объясняется, палка - тоже. Но, в оправдание он-лайновой версии - примеры там адаптированы к 32х-битным трансляторам. В переводе (очевидно, как и в первом издании) вместо CELLS используется 2+. gudleifr писал(а): 3. Если да, то что надо к ней добавить? Учебную FORTH-среду, где 1 в 1 идут все примеры? Имхо, лучше, наоборот - исправить примеры так чтобы они шли в современных средах. (Оставив оригинал для археологов) Такие вот идеи и впечатления. |
Автор: | gudleifr [ Пт дек 04, 2015 12:24 ] |
Заголовок сообщения: | Re: Начальный курс программирования на языке Форт |
atar писал(а): ,,, Спасибо за положительную оценку моей "редакции". Опечатки там все хе, наверняка остались (например, практически на днях исправил свеженькую в Баранове&Ноздрунове), та что, если заметите, пожалуйста сообщите.atar писал(а): в 11 главе в переводе в примерах [COMPILE], а в он-лайн версии - POSTPONE. Кто-нибудь может объяснить разницу? ЛИРИЧЕСКОЕ ОТСТУПЛЕНИЕ. Общая идея языков программирования - возможность оптимального описания решения задачи. Если решение удобнее описать как-то иначе, то, значит, вы созрели для создания нового языка. А раз FORTH написан сам на себе, то пускай все эти стандартизаторы со своими "семантиками компиляции" идут лесом. Мы посмотрим код имеющейся под рукой реализации. КОНЕЦ ЛИРИЧЕСКОГО ОТСТУПЛЕНИЯ.Итак: Код: : POSTPONE ( <слово> --) BL WORD FIND ?DUP IF 0< IF COMPILE COMPILE THEN , ELSE BADWORD THEN ; IMMEDIATE : [COMPILE] ( <слово> --) BL WORD FIND IF , EXIT THEN BADWORD ; IMMEDIATE Мы видим, что оба слова во время компиляции (IMMEDIATE) считывают следующее за ними (BL WORD, с матюгами при ненахождении - BADWORD) и зафигачивают его адрес исполнения в код компилируемого слова (,). Только POSTPONЕ делает еще зачем-то условную вставку в код адреса COMPILE. Зачем? Чтобы POSTPONE c не-IMMEDIATE (FIND возвращает -1) словами работало иначе. Но, ведь, использовать [COMPILE] для не-IMMEDIATE-слов не имеет смысла, они и так компилируются! Т.е. слово искусственно подогнано под кривое "стандартное" объяснение "компилирует семантику компиляции", без всякой потребности. Код: : EX1 55 . ; IMMEDIATE ___Ok_ : EX2 66 . ; ___Ok_ : EX3 EX1 EX2 ; ___55_Ok_ EX3 ___66_Ok_ : EX4 [COMPILE] EX1 [COMPILE] EX2 ; ___Ok_ EX4 ___55_66_Ok_ : EX5 POSTPONE EX1 POSTPONE EX2 ; IMMEDIATE ___Ok_ EX5 ___55_Ok_ : EX6 EX5 ; ___55_Ok_ EX6 ___66_Ok_ Кстати, "стандартно" в данном случае писать не "запятая", а COMPILE, На случай, если используется подпрограммный шитый код. (Или хочется еще покопаться в нюансах POSTPONE , EXECUTE и EVALUATE - см. стандарт). Вывод: POSTPONE - для слабаков, которые не хотят вникать в то, что пишут. P.S. Очень прошу не обращаться ко мне в темах, где участвует mOleg. Поэтому, почему Броуди вредно дотягивать до уровня "современных" реализаций, обсудим где-нибудь в другом месте. |
Автор: | atar [ Вт дек 08, 2015 18:58 ] |
Заголовок сообщения: | Re: Начальный курс программирования на языке Форт |
gudleifr писал(а): P.S. Рекорд Форума, связанный с этой книгой: *** писал(а): кстати, я сейчас добиваю вторую главу Броуди, там как раз все эти темы освещаются, наверное, когда я доберусь до восьмой, именно с неё начинается более глубокое знакомство с Фортом, то уже смогу считаться более квалифицированным фортером, чем вы А что-то гугл по этой цитате не находит ничего кроме собственно этой ветки. |
Автор: | gudleifr [ Вт дек 08, 2015 20:02 ] |
Заголовок сообщения: | Re: Начальный курс программирования на языке Форт |
atar писал(а): А что-то гугл по этой цитате не находит ничего кроме собственно этой ветки. И это хорошо. Возможно, у кого-то руки дошли.
|
Страница 4 из 4 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |