Привет, друзья! Перво-наперво хочется отметить, что я совершенный нуб, причём, это касается не только программирования на Форте, но и программирования вообще. В связи с этим, у меня, разумеется, накопилась масса вопросов, для вас, очевидно, смешных и даже неприглядных. Конечно, скажете вы, так ведь и всегда, но тебе (то есть - мне) , автор, сначала следует хорошенько изучить матчасть, избороздить Интернеты, а потом уже, не позорясь, заходить сюда и вопрошать компетентной поддержки. С другой стороны, честно говоря, я уже и так перерыл немало инфы, но, видимо, всё же недостаточно. Однако, снова здравствуйте. Я-таки позволю себе задать несколько тривиальных вопросов, а уж как на них реагировать, блин, ну, решать явно не мне.
1) FORGET&MARKER
Листая "Starting FORTH" Броуди (причём, сразу отмечу, что пока лишь в прямом смысле листая, так сказать, в ознакомительном режиме, и, да, я знаю, что у книги есть замечательный перевод, но я начал читать оригинальное последнее издание, адаптированное под актуальный стандарт Форта, впрочем, далее об этом я также скажу несколько слов) наткнулся на пример со словом FORGET. Оказалось, что в моём Форте это слово отсутствует, гугл по этому поводу привёл сюда, на этот самый, замечательный, форум, точнее, даже в этот раздел. Выяснилось, что реализация слова (или функции, в общем, как вы понимаете, за чистоту терминологии не ручаюсь) FORGET довольно сложна и, также, в нём (слове) нет особой нужды, более того, даже последний стандарт (кажется, 94-го года) и вовсе его не предусматривает, посему FORGET был заменён на более гибкий и эффективный MARKER. Так вот, не могли бы вы подсказать о тонкостях работы с MARKER? Кое в чём я, кажется, и сам разобрался:
Код:
: GREET ." Hello, I speak Forth. " ;
GREET
MARKER RESTART
: GREET ." Hi there! " ;
GREET
RESTART
GREET
В данном случае MARKER работает подобно FORGET и в итоге выводит "Hello, I speak Forth"
Код:
: GREET ." Hello, I speak Forth. " ;
GREET
: GREET ." Hi there! " ;
GREET
MARKER GREET
GREET
А если так, то GREET получается пустым, как-будто слово не заданно
Следовательно, если я правильно понял, слово MARKER просто отмечает текущие параметры системы и если их переопределить, а потом, если что-то не понравится, можно просто откатиться до того состояние, которое было помечено MARKER? Меня ещё интересовало, в этом и заключается вся хитрость MARKER, или есть какие-то дополнительные "переменные" для маркера? Например, я пробовал "MARKER -GREET GREET" и "MARKER -1 GREET", предполагая, что таким образом я добьюсь аналогичного поведения, как и от FORGET. Всё это было неправильно, или нужнно как-то иначе? Да, и, кстати, для маркирования можно задавать любое слово, скажем, не обязательно RESTART? А то если я просто ввожу слово RESTART, то Форт говорит, что ему такое слово неизвестно (пробовал на двух разных Фортах, но о реализации я заикнулся упомянуть ниже).
2) Ввод/Вывод
Как бы смешно это не прозвучало, но присутствует ли в Форте механизм ввода и вывода информации посредством "загрузки" данных из сторонних файлов? К примеру, есть ли возможность в Форте открыть и работать, ну, допустим, с файлом stihipushkina.txt? Да, у Броуди даже целая глава посвящена теме I/O, но, при беглом смотре, складывается странное впечатление. Скажем, в других языках такая возможность присутствует, в Пайтоне она точно есть (я интересовался особенностями многих языков, прежде чем пришёл к выводу, что Форт, блин, это нечто!).
3) Стандарт и реализация
Сразу отмечу, что для себя выбрал, по всей видимости, неправославную для большинства обитателей этого форума реализацию Форта (насколько могу судить, большинство здесь использует SP-Forth): SwiftForth, естественно, evaluation version (ибо платить тонну денег не прельщает). В общем-то, несмотря на то, что язык как бы и не особенно популярный, но выбор, в принципе, есть. Изначально рассматривал GForth, впрочем, он у меня тоже установлен, причём, из убунтовского офф. репозитория. Правда, на первый взгляд (и не только мой), легко подумать, что проект скорее мёртв, чем жив. Ещё рассматривал iForth, какой-то грандиозный Форт (вес дистрибутива свыше 100 метров) рекомендованный, наряду со SwiftForth, неким Марселем Хендриксом (судя по всему, автором iForth), который адаптировал последнюю версию книги (или книг, но до "Thinking Forth" я ещё не добрался) Броуди для веба. Однако, iForth мне показался каким-то громоздким, наверно, рассчитанным на профессионалов, так что я от него отказался, лучше тренироваться на чём-нибудь попроще. Почему не SP-Forth? Странно, но я не раз натыкался в сети на сообщения от фортеров, что у него плохая совместимость с linux, хотя, возможно, это устаревшая информация. Так или иначе, я для себя избрал Swift, кстати, тому есть, пусть и весьма комичное, рациональное объяснение - дело в том, что я "программирую" (ну, экспериментирую) в SciTE (это ни в коем случае не реклама, к тому же, в моём пиаре этот редактор точно не нуждается, и всё же, на мой взгляд, он просто офигенный!), и как-то так получается, что когда к сцайту прикручиваешь GForth, то в окне вывода получается результат, а за ним следует информация о версии Форта и т.п., а вот со Swift такого не происходит, окошко чистое - ничего лишнего, только то, что нужно. Конечно, есть ещё масса других (kForth, pForth, yForth), да бог с ними, лучше теперь о стандарте. Изучая форум, обратил внимание, что многие (в том числе и сам WingLion) советуют подыскать для себя реализацию Форта стандартизации F-83, вместо актуальной на сегодняшний день ANSI-94, так как большинство литературы всё же написано применительно именно к этому стандарту. Так вот, спрашивается, могу ли я, неплохо освоившись с современным стандартом, потом читать примеры из "старинной литературы", только выполнять их учитывая произошедшие изменения (к тому же, вроде бы, из не особенно-то и много)?
Да, о MARKER, раз уж я упомянул про SciTE в качестве IDE, то вроде бы вопрос и не то чтобы первой необходимости и особенной роли не играет, просто интересно (разумеется, это касается программирования на настольном компьютере из-под функционирующей ОС и из лучшего в мире редактора, для эмбдедщиков, возможно, он приобретает совершенно иное значение).
4) FORTH относительно других языков и ещё несколько общих вопросов
Я прекрасно сознаю, что для хорошего программиста язык ни в коей мере не может служить самоцелью, но является скорее средством, причём, средство это выбирается в контексте решения той или иной задачи, потому, такое понятие как "универсальный язык" многими воспринимается как профанация, ведь по аналогии несложно догадаться, что, к примеру, молотком удобно забивать гвозди, а лопатой копать землю. И всё же... Скажите, с помощью Форта, теоретически, можно реализовать всё то же самое, что и за счёт C или Пайтон? Понятно, что эти и многие другие языки призваны как можно более удобно решать круг конкретных задач, однако, в принципе, можно ли решать те же задачи, пусть и с некоторой степенью изощрённости (или извращённости, кому как больше нравится), силами Форта? К тому же, зачастую встречал упоминание Форта в контексте с другими языками (в основном C и asm, если, конечно, последний можно назвать языком), значит ли это, что Форт нужно воспринимать по большей части как язык системного программирования (контроллеры и всё такое), или, чисто гипотетически, на нём можно эффективно писать и... не знаю как сказать... ну, обыкновенные программы. Скажем, можно ли на Форте написать консольный (так как с построением GUI у Форта дела обстоят сложно, да и не его это специализация) редактор аналогичный Vim или Emacs? Ещё вот такой вопрос, - можно написать реализацию своего Форта полностью на Форте? Дело в том, что, может плохо копался, но большинство попадавшихся мне Фортов написаны в вкраплениями чужеродных языков. Ну и последнее: вполне ли Форт самостоятельный язык, ибо, опять же, очень часто его упоминают в связи с другими языками; если проще, можно ли изучать Форт, а потом его использовать, но при этом не владея другими языками (пускай и не раскрывая весь его потенциал), ну, как тот же Пайтон, если других языков не знаешь?
Вместо заключения
Прошу прощения и вместе с тем благодарю всех тех, кто осилил (да и не осиливших тоже) пост, такая у меня дурацкая черта, никак не могу избавиться от фонтана сознания (да-да, я понимаю что ничего хорошего в этом нет). Также, попрошу, насколько это возможно, не советовать мне изучать другие языки (и на этом, и на других ресурсах не раз встречался с тем, что как только новичок заговаривает о Форте, то ему тут же советуют отказаться от своей, какой бы она ни была, затеи, и рассмотреть "нормальные и живые" языки), а, лучше, если вдруг появится желание, ответить на обозначенные в теме вопросы. К тому же я, как новичок, не кинулся сломя голову на Форт, очарованный его сакральной магией (впрочем, вру, конечно же очарован, бесспорно, Форт представляет собой нечто совсем иное, над ним витает этакий загадочный и мистический ореол). Так или иначе, но нередко упоминается, что он, как раз-таки, вполне подходит для новичков: во-первых, у него довольно низкий порог вхождения, что, конечно, подразумевает вовсе не примитивность этого языка, а скорее его внутреннюю простоту и элегантность, к тому же, Форт с самого начала приучает программиста к аккуратности, ибо всякая допущенная по невнимательности оплошность приводит к неработоспособности программы; во-вторых, Форт изначально хоть и позиционировался как высокоуровневый язык, но сегодня он считается низкоуровневым, но важно не это, а скорее то, что Форт предоставляет все условия чтобы программировать на системном уровне (блин, ну вы поняли, я имею в виду железки), несмотря на то, что это может и не пригодится, всё-таки считаю сей факт несомненным плюсом, так как это позволяет ближе познакомиться с работой машины, да, есть ещё азм, но, думаю, никому не придёт в голову, что для новичка проще начать изучение с последнего; в-третьих, блин, ну можно конечно написать, что Форт - это метаязык и вообще он даже больше чем язык, но я лучше скажу, что он просто классный, и, чёрт возьми, одной из самых заманчивых конфет для новичков, по крайней мере для меня, является программирование с капса (высокий регистр), пускай это лишь внешняя особенность, но в ней заложен какой-то особенный шарм!
Ах да, ну и последнее, разумеется, у меня есть мотивация для изучения программирования, но ничего больше я вас сказать не могу, потому как вы своруете мою идею, измените мир и станете миллионерами.