Так ведь любая программа должна состоять из множества подпрограмм, которые выполняют какие-то законченные действия и все вместе они как раз и составляют программу. Даже в бейсике можно подпрограммы делать, но чаще видны бессистемные переходы.
Игра на форте есть, только не на спеке. Игра змейка ну и графика как обычно. Вообще под разные платформы форт делают/обсуждают - под спеки под некст где-то на морда-книга, не достучаться, под мобилки. Даже внутрь браузеров пихают, неясно чем жаваскрипт не угодил, тем более есть гора фреймворков и библиотек.
фраза дня
в общем случае начинающий фортер думает также и о том, чтобы сделать в форте всё как у людей. Но через некоторое время начинает уже у людей всё делать как в форте.
Для CP/M и 8080/z80 горячо советую DX-Forth. Он форт как форт, но может сохранить запускаемый .com файл с откомпилированным кодом (волшебное слово turnkey). Можно переделать и под без-ос, но я сам не пробовал.
"Компилятор форта" -- не бессмыслица. Обычный форт компилирует код в том смысле, что превращает слова в цепочку адресов и добавляет запись в словарь. Это стандартная терминология, хотя это не совсем то, что люди обычно подразумевают под компиляцией.
В принципе так и есть. Никто не запрещает писать маленькие компактные процедуры. Но Форт очень активно поощряет разбивку на маленькие слова. Это не то что бы какое-то искуственное ограничение, скорее философия языка. Например, трудно писать семиэтажный код, когда у локальных переменных нет имен (в форте это просто позиции на стеке, хотя бывают отклонения, но это не норма). Невольно задумываешься, может быть было бы лучше разбить это на разные слова, так что каждое из них выполняет свою маленькую функцию? Оказывается, что конечно лучше. Постепенно привыкаешь сразу так думать. Это небесполезный навык по жизни вообще.
- - - Добавлено - - -
Вдогонку про производительность. Обратная сторона разбиения на крохотные процедуры -- большой оверхед на вызовы и большая глубина стека. И чем чугунней процессор (а мы говорим о 8080 и z80) и чем органичней Фортовый код, тем сильнее это ощущается. Вот компактность действительно несравненная.
Больше игр нет
Вроде один из тетрисов для Ириши написан на Форте (скачать можно тут)
Я как раз с ним разбираюсь. До сих пор на наших восьмибитках мне попадался либо Кириллин-Клубович-Ноздрунов, либо какие-то недоделанные форты (начали и бросили). А этот вполне законченный, в достаточной мере реализующий стандарт, но от другого автора. Он сильно отличается от первого.
Обычно, если программа написана на форте, можно обрезать её до минимального ядра и получить рабочий форт. А тут фиг вам. К сожалению, автор видимо воспользовался целевой компиляцией при разработке этого тетриса, при этом имена словарных статей он не стал добавлять, а только зарезервировал место. В итоге, выкусить рабочую версию форта не получится. А восстанавливать имена достаточно муторно, даже имея дизассемблированный текст.
Наличие возможности делать целевую компиляцию говорит о том, что этот форт имел достаточно мощную базу, а автор был достаточно продвинутым фортером.
svofski (07.07.2022)
Больше игр нет
Известные дизассемблеры типа IDA обламываются на дизассемблировании кода FORTH. Пытался я лет тридцать тому назад ковыряться с кодом Metal Mutant и, убив уйму времени, плюнул. Вот еще его (FORTH)один недостаток. Мало того, что исходники как Кубик Рубика, так еще и об исполняемый код "мозги поломаешь"! В Silmarils точно фортмэны присутствовали.
Вообще при современной мощности персоналок должны рулить какие-то интеллектуальные кросс-системы программирования. Чтобы чел создал проект на удобном для себя языке программирования, а она сама оптимизировала и выдала код для заданного железа.
Последний раз редактировалось andrews; 07.07.2022 в 22:22.
LLVM , GCC ?
Насчёт скорости выполнения программ, вопрос спорный. Да "Hello world" определённо на форте скорее всего будет быстрее, но с усложнением задачи и улучшением автооптимизации компиляторов это преимущество постепенно спадает. Да форт пожалуй на ретроархитектурах выигрывал (ну по крайней мере не проигрывал) по скорости (насчет C не уверен) и по компактности (особенно если не тратить память на длинные идентификаторы слов/функций).
По поводу немного уступает ассемблеру. Тут сильно зависит от реализации переходов и контроля (или безконтроля) стека. Но в любом случае паразитные загрузки операндов в стек параметров, обслуживание стека возвратов... Думается на z-80 замедлят исполнение алгоритма со средне-оптимальным вариантом на ассемблере в 3-5 раз. На 86-х командная база работы со стеком поболе будет и возможно там сравнительная эффективность форта лучше.
По крайней мере реализуемы как бы две фигни, которые делают из форт системы типа "компилированной" программы, про одну вы сами сказали "(особенно после сжатия программы путём удаления идентификаторов слов)", а вторая это форт-ассемблер - которая делает слово не из набора других слов а из линковки кодов ассемблерных примитивов.
Oleg N. Cher (08.07.2022)
Форт не стандартизирует и не унифицирует ни графику, ни цветность, ни даже консольный ввод-вывод. Если у Вас "получилась кроссплатформенность", значит Ваша игра напоминает Hello World. В общем, я к тому, что Форт не делает чудес и невозможное возможным.
Опять же, если сравнивать процесс программирования на Форте с им же на асме - возможно, это и не худшая альтернатива. Но на более человеческих языках путь от прикладных концепций к машинным имхо короче.
Последний раз редактировалось Oleg N. Cher; 08.07.2022 в 07:16.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)