embedded - ¿De qué Forth empezar a portar?
language-design retro-computing (6)
Con respecto a la compatibilidad con ANSI, si está utilizando Forth para su propia aplicación, puede omitir cualquier cosa que no necesite, o incluso cambiar cosas que no le gustan. Los fondos con rosca indirecta se encuentran entre los más compactos en los procesadores de 16 bits (no más en los 64 bits). Así que este es probablemente el camino a seguir.
La familia de los hilos roscados de Forth, llamados FIG-Forth, son todavía material educativo. jonesforth es un ejemplo de Forth que se desarrolla en el mismo sentido. Yo mismo soy el autor de ciforth, que fue una de las inspiraciones de jonesforth y de forforth, que probablemente valga la pena porque trata de explicar las razones para diseñar las cosas como son. La fuerza de Ting (en todo el lugar) y Camelforth también son buenos ejemplos. gforth con su desvío a través de cy su volumen es menos valioso para usted.
Un consejo general, si necesita una palabra clave (codificada en ensamblador, no en Forth, el nivel más bajo) es mejor que la robe y luego la reimplemente. El código para una división de 32 bits por 16 bits en todos, excepto los procesadores más oscuros, se encuentra en algún lugar. Así que reúna algunos Forth que se implementan en el procesador que está utilizando.
Debes seleccionar un procesador y eso te bloqueará bastante. Luego puedes usar uno de los Camelforth''s (porque está ahí para los procesadores más populares) y comenzar con tu aplicación. Si no estás del todo contento, puedes modificarlo para convertirte en tu propio Forth. Si está utilizando el procesador 6809 o Renesas, o un i86 de 16 bits, puede usar mi ciforth como punto de partida.
Busco desarrollar un nuevo sistema Forth , destinado a facilitar el desarrollo de juegos en una o posiblemente varias plataformas de consola retro. Soy una especie de principiante de Forth, y necesito tu ayuda para decidir a partir de qué código base de Forth empezar a portar.
Básicamente estoy buscando los méritos / desventajas de Forths en particular entre sí. Leí la fuente a JonesFORTH , tanto el elogio y la crítica de la misma, como las discusiones sobre ANS, y lamentablemente me dejaron sintiéndome algo confundido. La comunidad de Forth, por lo que puedo decir, parece estar bastante brutalmente dividida a lo largo del problema de cumplimiento de las normas, con muy buenos argumentos presentados por ambos bandos en cuanto a por qué la norma es tanto una cosa buena como una cosa terrible. Sin embargo, parece que no puedo encontrar buenos consejos prácticos sobre qué es exactamente lo que cambia el estándar, aparte del sentido general de que hace que las cosas sean más complicadas e increíbles de lo que quizás deberían ser.
Espero facilitar el desarrollo para programadores y aficionados que actualmente se asustan ante la posibilidad de desarrollar en ensamblaje o C, por lo que me inclino por un Forth más simple, pero realmente no sé lo suficiente sobre Forth para hacer un decisión educada.
Estoy como donde estás ahora. He estado leyendo casualmente en Forth por un tiempo y también creo que tiene un gran potencial, tal vez para scripting también. Sin embargo, no estoy ni 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 lisp. Con ese fin, no estoy seguro de la cantidad de C o ensamblaje que necesitarás codificar. Me inclinaba 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, me gustan las mejores Gforth y Pforth.
¿Cuáles estás usando?
Finalmente, aquí hay una lista de lecturas en línea que he descubierto:
¿Has encontrado alguna otra?
Recomiendo buscar eForth, el que escribió Ting. Una especie de figura moderna de alguna manera. Él tiene un kernel escrito en C, pero los kernels / sistemas eForth ya han sido portados a muchas plataformas / cpus la mayoría tiene kernels / cores de ensamblaje. Sin embargo, hay una genial llamada Factor. Comenzó como ''solo para juegos'' y terminó en un rincón salvaje y divertido del mundo del lenguaje de programación
Un sistema básico de Forth es muy pequeño y se puede implementar rápidamente. Creo que la siguiente página será muy útil para usted: " JonesFORTH ". Es un tutorial lineal sobre el arranque de un sistema Forth!
Asegúrese de implementar las palabras de definición (palabras que se ejecutan en tiempo de compilación). Ahí es de donde viene el poder de Forth; haciéndolo verdaderamente extensible.
No lo he probado, pero una vez me conformé con bigFORTH ya que es uno de los pocos Forths con una licencia de código abierto. También se mantiene activamente; por ejemplo, hubo un lanzamiento a principios de este año.
He recopilado un conjunto de enlaces comentados sobre Forth en los últimos años. Algo de eso es difícil de encontrar cosas.
Respecto a las charlas sobre estándares: esta es una discusión de 20 años. Creo que es más importante realmente hacer algo en lugar de hablar: implementar software, proporcionar ejemplos asombrosos, escribir documentación, invitar a otros a participar, etc. Charles Moore ha seguido adelante y ha hecho los chips Forth , 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.
Una cosa que tal vez quiera probar como primer paso es escribir un intérprete de Forth en un lenguaje de nivel superior como Java, C ++, Python, etc. Carecerá de los beneficios principales de un Forth a nivel de máquina: velocidad y compacidad, pero por escribiendo 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 a la CPU como una máquina virtual, por lo que crear una máquina virtual explícita no implica pérdida de conocimiento cuando llega el momento de pasar de una versión interpretada a una versión de código de máquina. Además, tendrá un plano de su propio código para realizar referencias cruzadas al crear la versión de la máquina.
Sin embargo, si está realmente cómodo con el código de la máquina, probablemente pueda omitir el paso anterior y simplemente aplicar uno de los estándares directamente.
En cuanto a los estándares, elegiría algún estándar, pero para empezar sería mínimo. Si necesita ir más allá de un estándar en términos de cosas distintas a las palabras definidas por el usuario, siempre puede avanzar hacia eso, ya sea estándar o no estándar, según lo requiera la implementación. Una de las mejores cosas de Forth es que es tan simple que puedes reescribir todo el compilador más fácilmente de lo que puedes reescribir parte del código de Forth que estarás ejecutando en él, jajaja.
Gameduino , una plataforma de desarrollo de juegos sobre Arduino, tiene una CPU mínima (J1 en adelante) que se ejecuta dentro.
Además del código fuente Verilog de J1 en adelante , 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.