С чего начать портирование?

Я рассчитываю разработать новую систему Forth, нацеленную на то, чтобы упростить разработку игр на одной или, возможно, нескольких ретро консольных платформах. Я новичок в Forth, и мне нужна ваша помощь, чтобы решить, с какой базы кода Forth начать переносить.

Я в основном ищу достоинства / недостатки конкретного Форта друг против друга. Я прочитал источник для JonesFORTH, а также похвалу и критику его, и обсуждения на ANS вперед, и, к сожалению, я остался немного смущенным. Сообщество Forth, насколько я могу судить, похоже, довольно жестоко разделено по вопросу соответствия стандартам, и оба лагеря дали очень хорошие аргументы в пользу того, почему стандарт является и хорошим, и ужасным. Однако я не могу найти хорошего практического совета относительно того, что именно меняет стандарт, кроме общего ощущения, что это делает вещи более сложными и раздутыми, чем они, возможно, должны быть.

Я надеюсь упростить разработку для программистов и любителей, которые в настоящее время напуганы перспективой разработки на ассемблере или C, поэтому я склоняюсь к более простому Forth, но я действительно пока недостаточно знаю о Forth, чтобы сделать обоснованное решение.

7 ответов

Я вроде того, где ты сейчас. Некоторое время я случайно читал о Forth и также думаю, что у него большой потенциал - возможно, и для сценариев. Тем не менее, я далеко не авторитет, но вот мои мысли.

Прежде всего, Forth, кажется, лучший программируемый язык программирования - даже больше, чем шутка. Для этого я не уверен, сколько C или ассемблера вам понадобится кодировать. Я больше склонялся к развитию словарей в самом Форте. В конце концов, вот как это должно быть использовано.

Во-вторых, из реализаций, которые я пробовал, мне больше всего нравятся Gforth и Pforth.

Какие из них вы используете?

Наконец, вот список онлайн чтения, которое я обнаружил:

  • Начиная с четвертого
  • Думая дальше
  • Forth Primer
  • Четвертый язык
  • Форт Учебники
  • Pforth Tutorial
  • Руководство Gforth
  • Начинай дальше
  • WikiForth
  • OLPC Forth
  • Давайте построим компилятор
  • Вы нашли другие?

    Базовая система Forth очень мала и может быть быстро внедрена. Я думаю, что следующая страница будет очень полезна для вас: " Иногда минимальный компилятор Forth и учебник для систем Linux / i386 ". Это линейное руководство по начальной загрузке системы Forth!

    Обязательно реализуйте определяющие слова (слова, исполняемые во время компиляции). Вот откуда приходит сила Форта; делая его действительно расширяемым.

    Я на самом деле не пробовал, но однажды я согласился на bigFORTH, поскольку это один из немногих Forths с лицензией с открытым исходным кодом. Это также активно поддерживается; например, в этом году был релиз.

    За последние несколько лет я собрал набор аннотированных ссылок о Форте. Некоторые из них трудно найти вещи.

    Относительно разговора о стандартах: это 20-летняя дискуссия. Я думаю, что более важно на самом деле сделать что-то, а не говорить: внедрить программное обеспечение, предоставить убийственные примеры, написать документацию, пригласить других к участию и т. Д. С тех пор Чарльз Мур перешел и сделал чипы Forth, machineForth и ColorFORTH. Если вы ищете "machineForth" и "ColorFORTH" в аннотированном списке ссылок, можно найти некоторые интересные статьи и утверждения. У Чарльза Мура также есть блог.

    В качестве первого шага вы можете попробовать написать интерпретатор Forth на языке высокого уровня, таком как Java, C++, Python и т. Д. У него не будет основных преимуществ Forth машинного уровня: скорость и компактность, но написав собственную виртуальную машину, вы получите представление о различных типах потоков и т. д., используемых в различных вариантах Forth.

    Большинство новых реализаций Forth в основном начинаются с того, что в любом случае рассматривают ЦП как виртуальную машину, поэтому создание явной виртуальной машины не тратит впустую знания, когда приходит время перейти от интерпретированной версии к версии с машинным кодом. Кроме того, у вас будет план вашего собственного кода для перекрестных ссылок при сборке версии машины.

    Однако, если вы действительно, очень хорошо разбираетесь в машинном коде, вы, вероятно, можете пропустить вышеуказанный шаг и просто перенести один из стандартов напрямую.

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

    Gameduino, платформа для разработки игр поверх Arduino, имеет минимальный четвертый процессор (J1 вперед), работающий внутри.

    В дополнение к исходному коду Verilog для J1 далее есть также симулятор ПК, компилятор, написанный на google go, здесь Серж Зайцев.

    J1 уже реализована в Xilinx FPGA. Также возможно "моделировать" процессор J1 на любом современном MCU.

    Что касается совместимости с ANSI, если вы используете Forth для своего собственного приложения, вы можете оставить все, что вам не нужно, или даже изменить то, что вам не нравится. Непрямые Forths являются одними из самых компактных на 16-битных процессорах (не более на 64-битных). Так что это, вероятно, путь.

    Семейство непрямых нитей Форта под названием FIG-Forth все еще является учебным материалом. Джонсфорт является примером Форта, которые продолжаются в том же духе. Я сам являюсь автором ciforth, который был одним из вдохновителей jonesforth и yourforth, что, вероятно, стоит вашего времени, потому что он пытается объяснить причины создания вещей такими, какие они есть. Ting's eforth (повсеместно) и Camelforth также являются хорошими примерами. gforth с его обходом через c и его объем менее ценен для вас.

    Один общий совет: если вам нужно кодовое слово (закодированное на ассемблере, а не Forth, самый низкий уровень), вам лучше его украсть, а затем переопределить. Код для, скажем, 32-битного 16-битного разделения на все, кроме самых непонятных процессоров, обязательно будет где-то найден. Итак, соберите несколько Фортов, которые реализованы на процессоре, который вы используете.

    Вы должны выбрать процессор, и это в значительной степени заблокирует вас. Тогда вы можете просто использовать один из Camelforth (потому что он там для большинства популярных процессоров) и начать с вашего приложения. Если вы не совсем счастливы, вы можете изменить его, чтобы стать вашим собственным Forth. Если вы используете 6809 или процессор Renesas, или 16-битный i86, вы можете использовать мой ciforth в качестве отправной точки.

    Я рекомендую охотиться на eForth, который написал Тинг. В некотором роде современный вид. У него есть ядро, написанное на C, но ядра / системы eForth уже были портированы на многие платформы / процессоры, большинство из которых имеют ядра / ядра сборки. Тем не менее, есть этот крутой любопытный фактор под названием Фактор. Он начинался как "только для игр" и оказался в диком и забавном уголке мира языков программирования.

    Я знаю, что это старый вопрос, но, для протокола, еще один великий четвертый вопрос, с которого стоит начать, это "ff" (Феликс вперед).

    Здесь есть версия сборки, написанная на x86 (NASM) и ARM (gas).

    А более свежие версии, написанные на ассемблере, созданы самим автором на четвертой странице.

    Другие вопросы по тегам