2010-07-08 7 views
23

Estoy buscando desarrollar un nuevo sistema Forth, destinado a facilitar el desarrollo del juego en una o varias plataformas de consola retro. Soy algo así como un principiante de Forth, y necesito tu ayuda para decidir en qué base de código Forth comenzar a migrar.¿De dónde empezar a portar desde Forth?

Básicamente, estoy buscando los méritos/desventajas de Forths particulares frente a los demás. He leído la fuente al JonesFORTH, así como los elogios y las críticas, y las discusiones sobre ANS en adelante, y desafortunadamente me han dejado bastante confundido. La comunidad Forth, por lo que puedo decir, parece estar dividida brutalmente a lo largo del tema de cumplimiento de normas, con muy buenos argumentos en ambos bandos sobre por qué el estándar es a la vez bueno y terrible. Sin embargo, parece que no puedo encontrar buenos consejos prácticos acerca de qué es exactamente lo que cambia el estándar, aparte del sentido general de que hace las cosas más complicadas y abarrotadas de lo que quizás deberían ser.

Espero hacer que el desarrollo sea más fácil para los programadores y aficionados que actualmente tienen miedo a la posibilidad de desarrollar en ensamblaje o C, así que me estoy inclinando por un Forth más simple, pero realmente no sé lo suficiente sobre Forth aún para tomar una decisión educada.

Respuesta

6

Estoy donde estás ahora mismo. He estado leyendo por casualidad en Forth por un tiempo y también creo que tiene un gran potencial, tal vez para secuencias de comandos también. Sin embargo, no estoy cerca de una autoridad, pero aquí están mis pensamientos.

En primer lugar, Forth parece ser el último lenguaje de programación programable, incluso más que el ceceo. Con ese fin, no estoy seguro de cuánto C o ensamblado necesitarás para codificar. Me estaba inclinando más hacia el desarrollo de vocabularios en Forth. Después de todo, así es como se supone que debe usarse.

En segundo lugar, de las implementaciones que he probado, Gforth y Pforth me gustan mejor.

¿Cuáles estás usando?

Por último, aquí hay una lista de lectura en línea a luz, yo he descubierto:

  • Starting Forth
  • Thinking Forth
  • Forth Primer
  • Forth Language
  • Forth Tutorials
  • Pforth Tutorial
  • Gforth Manual
  • Begin Forth
  • Forth Links
  • WikiForth
  • OLPC Forth
  • Lets Build a Compiler
  • Jones Forth
  • ¿Ves alguna otra?

    4

    Un sistema básico de Forth es muy pequeño y se puede implementar rápidamente. Creo que la siguiente página te será muy útil: "A sometimes minimal Forth compiler and tutorial for Linux/i386 systems". ¡Es un tutorial lineal sobre cómo arrancar un sistema Forth!

    Asegúrese de implementar las palabras de definición (palabras que se ejecutan en tiempo de compilación).De ahí viene el poder de Forth; haciéndolo realmente extensible.

    No lo he probado, pero una vez me conformé con bigFORTH, ya que es uno de los pocos Forth con licencia de código abierto. También se mantiene activamente; por ejemplo, hubo un lanzamiento a principios de este año.

    He recogido a set of annotated links about Forth en los últimos años. Algo de esto es difícil de encontrar cosas.

    Con respecto a la charla de estándares: esta es una discusión de 20 años. Creo que es más importante hacer algo realmente en lugar de hablar: implementar software, proporcionar ejemplos asesinos, escribir documentación, invitar a otros a participar, etc. Charles Moore se ha mudado a Forth chips, machineForth y ColorFORTH. Si busca "machineForth" y "ColorFORTH" en la lista anotada de enlaces, es posible encontrar algunos artículos y declaraciones interesantes. Charles Moore también tiene un blog ahora.

    2

    Recomiendo buscar eForth, el que Ting escribió. Tipo de una figura moderna de alguna manera. Tiene un kernel escrito en C, pero los kernels/sistemas eForth ya han sido portados a muchas plataformas/cpus, la mayoría tienen núcleos/núcleos de ensamblaje. Sin embargo, hay un factor llamado Factor. Comenzó como 'solo para juegos' y terminó en un rincón salvaje y divertido del mundo del lenguaje de programación

    2

    Una cosa que quizás quieras probar como primer paso es escribir un intérprete Forth en un lenguaje de nivel superior como Java, C++, Python, etc. Carece de los principales beneficios de un cuarto nivel de máquina: velocidad y compacidad, pero al escribir su propia máquina virtual, obtendrá una comprensión de los diferentes tipos de subprocesos, etc., utilizados en varios sabores de Forth. La mayoría de las nuevas implementaciones de Forth se inician básicamente mirando la CPU como una máquina virtual de todos modos, por lo que crear una máquina virtual explícita no es un desperdicio de conocimiento cuando se trata de pasar de una versión interpretada a una versión de código máquina. Además, tendrá un plano de su propio código para realizar referencias cruzadas al construir la versión de la máquina.

    Sin embargo, si realmente está realmente cómodo con el código de máquina, probablemente pueda omitir el paso anterior y simplemente transferir uno de los estándares directamente.

    Por lo que respecta a los estándares, elegiría algunos estándares, pero sigo siendo mínimo para empezar. Si necesita ir más allá de un estándar en términos de otras cosas que no sean palabras definidas por el usuario, siempre puede crecer hacia eso, ya sea estándar o no estándar, según lo requieran las necesidades de implementación. Una de las mejores cosas de Forth es que es tan simple que puedes volver a escribir todo el compilador más fácilmente de lo que puedes volver a escribir parte del código Forth que ejecutarás en él, jajaja.

    1

    Gameduino, una plataforma de desarrollo de juegos en la parte superior de Arduino, tiene una cuarta CPU mínima (J1 adelante) corriendo dentro.

    Además del código fuente Verilog de J1 forth, también hay un simulador de PC, un compilador escrito en google go, here por Serge Zaitsev.

    J1 ya está implementado en Xilinx FPGA. También es posible "simular" la CPU J1 en cualquier MCU moderna.

    0

    Con respecto a la compatibilidad con ANSI, si utiliza Forth para su propia aplicación, puede omitir todo lo que no necesite, o incluso cambiar cosas que no le gustan. Los avances indirectos son los más compactos en los procesadores de 16 bits (no más en los de 64 bits). Entonces este es probablemente el camino a seguir.

    La familia de Forth de rosca indirecta llamada FIG-Forth sigue siendo material educativo. jonesforth es un ejemplo de Forth que sigue en la misma línea. Yo mismo soy el autor de ciforth, que fue una de las inspiraciones para jonesforth y yourforth, que probablemente valga la pena porque trata de explicar las razones para diseñar las cosas tal como son. El efton de Ting (en todas partes) y Camelforth son buenos ejemplos también. gforth con su desvío por c y su volumen es menos valioso para usted.

    Un consejo general, si necesita una palabra clave (codificada en ensamblador, no en adelante, el nivel más bajo) es mejor robarla y luego volver a implementarla. Código para una división de 32 bit por 16 bit en todos los procesadores, excepto en los más oscuros, está destinado a encontrarse en alguna parte. Por lo tanto, recopile algunos Forth que están implementados en el procesador que está utilizando.

    Debe seleccionar un procesador y eso lo bloqueará prácticamente. Luego puede usar uno de los Camelforth (porque está ahí para los procesadores más populares) y comenzar con su aplicación. Si no estás muy contento, puedes modificarlo para convertirte en tu propio Forth. Si está utilizando el 6809 o el procesador Renesas, o un i86 de 16 bits, puede usar mi ciforth como punto de partida.

    Cuestiones relacionadas