UStackUStack
Franz icon

Franz

Franz es un lenguaje de programación funcional y orientado a prototipos, con sintaxis concisa y compilación nativa vía LLVM IR.

Franz

¿Qué es Franz?

Franz es un lenguaje de programación de alto nivel, funcional, interpretado, de tipado dinámico y de propósito general, con una sintaxis concisa y una biblioteca estándar extensa. Su objetivo principal es admitir patrones de programación funcional y ofrecer herramientas para gestionar efectos y una ejecución predecible.

El proyecto se presenta como un lenguaje orientado a prototipos con efectos seguros por capacidades y reproducción determinista, incluyendo “estrictamente sin efectos secundarios” (con una excepción explícita para E/S). También incluye una ruta desde el código fuente hasta ejecutables nativos mediante LLVM IR.

Características principales

  • Núcleo funcional con objetos orientados a prototipos: Utiliza una base funcional reducida más objetos orientados a prototipos para modelar el comportamiento, manteniendo el lenguaje centrado en construcciones funcionales.
  • Efectos seguros por capacidades con reproducción determinista: Diseñado para ayudar a localizar y controlar efectos procedentes de archivos Franz importados.
  • Estrictamente sin efectos secundarios (con excepción de la tabla de E/S): El modelo del lenguaje se describe como libre de efectos secundarios salvo por un mecanismo de E/S mencionado explícitamente.
  • Compilación nativa mediante LLVM IR: Admite compilación directa a ejecutables nativos usando LLVM IR.
  • Literales de lista y operaciones de lista en LLVM: Incluye sintaxis de literales de lista como [1, "hello", 3.14] y listas anidadas, además de operaciones como head, tail, cons, empty?, length, nth y is_list.
  • Primitivas de comparación y matemáticas compiladas para tipos comunes: Proporciona operadores de igualdad y orden (is, less_than, greater_than) para enteros, flotantes y cadenas, plus funciones matemáticas como remainder, power, random, floor, ceil, round, abs, min, max y sqrt.
  • Flujo de control y condicionales tipo patrón: Ofrece construcciones if/when/unless y “cadenas cond” para ramificaciones de múltiples vías estilo coincidencia de patrones.
  • Ámbito léxico con clausuras basadas en instantáneas: Implementa ámbito léxico donde las clausuras capturan variables del entorno en el momento de su definición; admite clausuras anidadas de profundidad arbitraria.
  • Aislamiento basado en capacidades para código importado: Utiliza patrones de ejecución aislada mediante use_with() y localización de efectos mediante use_as() y notación de punto (como se describe en el texto del repositorio).

Cómo usar Franz

  1. Clona o abre el repositorio de Franz e inspecciona el README.md incluido y los archivos de ejemplo (por ejemplo, examples/mult-table.franz y examples/game-of-life.franz).
  2. Revisa los módulos de la biblioteca estándar mencionados en la documentación (String, Math, List, Func) para ver las funciones incorporadas y las operaciones de lista y combinadores de lista disponibles.
  3. Sigue los patrones de ámbito léxico y clausuras mostrados en el texto del repositorio para verificar cómo las clausuras capturan variables y cómo se comportan las clausuras anidadas。
  4. Ejecuta los scripts proporcionados del repositorio para ejercitar la implementación y las pruebas de humo (el repositorio menciona scripts bash como scripts/run-comparison.sh y pruebas de humo automatizadas).

Casos de uso

  • Constru

Alternativas

  • Lenguajes de programación funcional con sistemas de tipos fuertes (por ejemplo, lenguajes de la familia ML): Si buscas principalmente una sintaxis funcional con alcance predecible y cierres, pero no necesitas la compilación nativa basada en LLVM como enfoque principal.
  • Lenguajes basados en prototipos (por ejemplo, JavaScript con patrones funcionales): Útil cuando tu interés se centra en el modelado orientado a prototipos, aunque el flujo de trabajo y el modelo de efectos descrito para Franz difieren.
  • Lenguajes de propósito general compilados con características funcionales (por ejemplo, lenguajes que compilan a través de LLVM): Si deseas compilación a LLVM IR y construcciones funcionales, pero prefieres un ecosistema con sintaxis y convenciones de ejecución distintas.
  • Lenguajes de scripting utilizados para prototipado con enfoques de sandboxing: Si tu prioridad es experimentar rápidamente con ejecución controlada (el repositorio discute patrones de seguridad basados en capacidades), puedes elegir un entorno de ejecución diferente que ofrezca sus propios mecanismos de sandbox.