metáfora metafora juridica ejemplos forth

metafora - ¿Ejemplos de aplicaciones Forth muy concisas?



metafora juridica ejemplos (5)

En esta charla , Chuck Moore (el creador de Forth) hace algunas afirmaciones muy audaces y arrolladoras, como:

  1. "Cada aplicación que he visto que no codifiqué tiene diez veces más código que necesita"
  2. "Alrededor de mil instrucciones me parece bien hacer algo"
  3. "Si está escribiendo un código que necesita [variables locales], está escribiendo un código que no es óptimo. No use variables locales".

Estoy tratando de averiguar si el Sr. Moore es a) un genio absolutamente brillante o b) un chiflado. Pero esa es una pregunta subjetiva, y no estoy buscando la respuesta a esa pregunta aquí. Lo que estoy buscando son ejemplos de problemas complejos del mundo real que se pueden resolver en "1000 instrucciones o menos" usando Forth y el código fuente que demuestra cómo hacerlo. Un ejemplo que muestre solo una pieza no trivial de un sistema del mundo real estaría bien, pero no muestras de código "de juguete" que podrían duplicarse en 5 o 10 líneas de otro lenguaje de alto nivel, por favor.

Si ha escrito sistemas del mundo real en Forth, utilizando solo una pequeña cantidad de código fuente, pero no está en libertad de mostrar la fuente (porque es de propiedad exclusiva), me gustaría saber de eso.


¡Forth es realmente increíblemente compacto! Las palabras sin parámetros formales (e instrucciones de cero operandos en el hardware, por ejemplo, el GA144 ) ahorran mucho. El otro contribuidor principal a su compacidad es la factorización absolutamente implacable del código redundante que ofrece la convención de llamadas y la naturaleza concatenativa.

No sé si califica como un ejemplo que no sea de juguete, pero la implementación de Turtle Graphics para Fignition (en FigForth) tiene solo 307 bytes compilados y cabe en un solo bloque fuente. Esto incluye el punto fijo trig y todos los comandos normales de tortuga. Este no es el mejor ejemplo de Forth legible debido a tratar de exprimirlo en un único bloque fuente con nombres de un solo carácter y tales:

/ 8.8 fixed point sine table lookup -2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c, : s abs 3C mod dup 1D > if 3C swap - then dup E > if -1 1E rot - else 1 swap then n + c@ 1+ * ; 0 var x 0 var y 0 var a 0 var q 0 var w : c 9380 C80 0 fill ; / clear screen : k >r 50 + 8 << r> ! ; : m dup q @ * x +! w @ * y +! ; / move n-pixels (without drawing) : g y k x k ; / go to x,y coord : h dup a ! dup s w ! 2D + s q ! ; / heading : f >r q @ x @ y @ w @ r 0 do >r r + >r over + / forward n-pixels dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ; : e key 0 vmode cls ; / end : b 1 vmode 1 pen c 0 0 g 0 h ; / begin : t a @ + h ; / turn n-degrees

Su uso es extremadamente conciso también.

: sin 160 0 do i i s 4 / 80 + plot loop ;

: burst 60 0 do 0 0 g i h 110 f loop ;

: squiral -50 50 g 20 0 do 100 f 21 t loop ;

: circle 60 0 do 4 f 1 t loop ; : spiral 15 0 do circle 4 t loop ;

: star 5 0 do 80 f 24 t loop ; : stars 3 0 do star 20 t loop ;

: rose 0 50 0 do 2 + dup f 14 t loop ;

: hp 15 0 do 5 f 1 t loop 15 0 do 2 f -1 t loop ; : petal hp 30 t hp 30 t ; : flower 15 0 do petal 4 t loop ;

(blog descarado: http://blogs.msdn.com/b/ashleyf/archive/2012/02/18/turtle-graphics-on-the-fignition.aspx )


Las definiciones del ensamblador VAX / VMS de Forth Inc polyFORTH / 32 tomaron unos 8 bloques de origen. Un ensamblador VAX, en 8K de fuente. Comentado Todavía estoy asombrado, 30 años después.

No puedo verificarlo en este momento, pero supongo que el recuento de instrucciones para analizar esas definiciones de CÓDIGO estaría en los cientos bajos. Y cuando dije ''tomó unos 8 bloques'', todavía toma, la aplicación que usa ese núcleo está en vivo y en producción, 30 años después.


Lo que no se comprende bien hoy es la forma en que Forth anticipó un enfoque de codificación que se hizo popular a principios del siglo XXI en asociación con métodos ágiles . Específicamente:

  • Forth introdujo la noción de codificación de métodos pequeños: el uso de objetos pequeños con métodos pequeños. También podría defender los argumentos de Smalltalk y Lisp , pero a fines de la década de 1980, tanto la práctica de Smalltalk como la de Lisp tendían hacia métodos más grandes y complejos. Forth siempre adoptó métodos muy pequeños, aunque solo sea porque alentaba hacer mucho en la pila.

  • Además, incluso más que Lisp, popularizó la idea de que el intérprete era solo un pequeño patrón de software, no un ladrillo del tamaño de una disertación. ¿Tienes un problema que es difícil de codificar? La solución de Forth tenía que ser "escribir un poco de lenguaje", porque eso es lo que era la programación de Forth.

Forth fue en gran medida un producto de la memoria y las limitaciones de tiempo, de una era donde las computadoras eran increíblemente pequeñas y terriblemente lentas. Fue un hermoso diseño que te permite construir un sistema operativo y un compilador en una caja de cerillas.



Tienes que entender que Chuck Moore es un poco diferente a ti y a mí. Se formó en una era en la que las computadoras centrales constaban de 16 KB o su equivalente en la memoria central, y pudo hacer bastantes cosas con las computadoras de la época. Quizás el mayor éxito para Forth, fuera de su paquete de diseño de chips OKAD-II (que no es un error tipográfico), fue un sistema Forth multitarea multiusuario responsable de controlar simultáneamente los instrumentos de adquisición de datos y el software de análisis / visualización de datos en NRAO en una computadora de tamaño bastante modesto, apenas capaz de compilar el código fuente de Fortran por sí mismo.

Lo que él llama una "aplicación", podríamos considerar como un "componente" de una cosa más grande y más nebulosa llamada aplicación. En términos más generales, es bueno tener en cuenta que una "aplicación" de Moore es más o menos equivalente a una "vista" en una tríada de MVC actualidad. Para mantener pequeño el consumo de memoria, depende en gran medida de las superposiciones y las técnicas de compilación justo a tiempo. Cuando se cambia de una interfaz de programa a otra, generalmente se trata de volver a compilar toda la aplicación / vista desde la fuente. Esto sucede tan rápido que no sabes que está sucediendo. Algo así como Android Dalvik código Dalvik código ARM nativo cuando activas una aplicación cada día.

En cualquier momento, OKAD-II no tiene más de aproximadamente 2.5 KB de su código cargado en la memoria y en ejecución. Sin embargo, la fuente en disco para OKAD-II es considerablemente más grande que 2.5 KB. Sin embargo, aún es significativamente más compacto que su competidor más cercano, SPICE .

A menudo siento curiosidad por los puntos de vista de Chuck Moore y me parece fascinante su interminable esfuerzo por la simplicidad. Entonces, en la moda de MythBusters , puse a prueba sus afirmaciones tratando de diseñar mi propio sistema de la forma más mínima posible. Me complace informar que está muy cerca de sus afirmaciones, tanto en cuestiones de hardware como de software. Por ejemplo, durante la reunión del Grupo Silicon Valley Forth Interest (SVFIG) del pasado septiembre, utilicé mi propio Kestrel-2 para generar videos para el mazo de diapositivas. Esto requirió que escribiera un programa de presentación de diapositivas para él, que requirió 4 KB de memoria para el código y 4 KB para las estructuras de datos del mazo de diapositivas. Con un espacio promedio de seis bytes por palabra Forth (por razones que no entraré aquí), la estimación de "aproximadamente 1000 (Forth) instrucciones" para la aplicación es casi exacta de lo que Chuck Moore estima sus propias "aplicaciones " ser.

Si está interesado en hablar con los codificadores de Forth del mundo real (o que lo hayan hecho en el pasado, como parece ser), y está en el Área de la Bahía , el Silicon Valley Forth Interest Group aún se reúne Cuarto sábado del mes, excepto noviembre y diciembre, que es el tercer sábado. Si está interesado en asistir a una reunión, aunque solo sea para entrevistar a los codificadores de Forth y obtener una idea de lo que es el "mundo real" Forth, visítenos en meetup.com y acompañe. También transmitimos nuestras reuniones en YouTube, pero no somos muy buenos en eso. Estamos abusando de hardware y software inapropiados para hacer nuestra oferta, ya que tenemos un presupuesto de cero para este tipo de cosas. :)