Phel 0.36.0 introduce variables como valores de primera clase

Phel 0.36.0 es una versión mayor del lenguaje de programación funcional que compila a PHP, introduciendo capacidades fundamentales que amplían significativamente su poder expresivo. Entre las adiciones más relevantes se encuentran lasfirst-classVars, que permiten tratar las variables como valores de

Jubbly: Nuevo enfoque para asignar valores en programación

El proyecto 'Jubbly' explora una idea innovadora en diseño de lenguajes de programación, enfocada en simplificar y mejorar la forma en que se realizan las reasignaciones de valores, especialmente en estructuras de datos complejas. Tradicionalmente, en muchos lenguajes, asignar un nuevo valor a una v

orígenes del código: los 'ur-lenguajes' revelados

Este artículo explora un concepto fundamental en el desarrollo de software: los "ur-lenguajes" (lenguajes ancestrales). La idea central es que, aunque existen miles de lenguajes de programación, muchos comparten patrones básicos de construcción y organización, agrupándose en familias o "ur-lenguajes

FSet: Nuevo enfoque modulariza Common Lisp

## Modern Common Lisp with FSet: Un Enfoque Innovador para la Gestión de Dependencias y el Desarrollo Modular **1. Introducción: ¿Qué es FSet y por qué es importante?** Common Lisp es un lenguaje de programación poderoso y versátil, pero históricamente ha carecido de un sistema robusto y estandari

Clojure: del código a la infraestructura de Nubank

El documental "Documental" explora la historia de Clojure, un lenguaje de programación funcional que ha evolucionado desde una idea inicial hasta convertirse en la base de la infraestructura de ingeniería de Nubank, uno de los mayores bancos digitales independientes del mundo. Clojure no es un lengu

Scheme: repositorio desacoplado para datos

Este artículo presenta un enfoque innovador para la capa de datos en proyectos Scheme, buscando resolver un problema común: el acoplamiento estrecho entre la capa de control y la implementación específica de la base de datos (en este caso, SQLite). El autor, proveniente de un background en lenguajes

Rust: Maximiza el potencial con menos esfuerzo

El autor ha estado buscando el lenguaje de programación perfecto durante años, frustrado por las limitaciones de opciones populares como F#, TypeScript y C#. Si bien Rust ofrece un gran potencial, su curva de aprendizaje y complejidad (relacionada con la gestión de memoria y el sistema de tipos) han

Elm y la Z-Machine: una combinación inusual

Este artículo del blog de Whitebeard explora la creación de una máquina Z (Z-Machine) en Elm, un lenguaje de programación funcional puro. La Z-Machine, inventada por Infocom en los años 80, era una máquina virtual diseñada para permitir que sus aventuras de texto se ejecutaran en múltiples arquitect

K: Eliminan 'raze' para optimizar código

Este artículo explora una optimización interesante en el lenguaje de programación K, específicamente relacionada con la eliminación de una técnica llamada 'raze'. K es un lenguaje de programación de matriz (array language) conocido por su concisión y expresividad. El problema que aborda el autor, Ch

aprende a usar ⍋⍋: la función inesperada de APL

Este artículo explora el significado y la utilidad de la función ⍋⍋ en el lenguaje de programación APL, un tema que inicialmente parecía carecer de sentido según Paul Mansour. Aunque inicialmente se considera inútil (equivalente a una versión más lenta de otra función), el artículo revela una aplica

memo: Programa con fluidez y experimenta

## memo: Un Entorno de Programación Fluido y Experimental memo es un entorno de programación inusual, descrito como un "entorno de codificación de flujo de conciencia". En esencia, se trata de un lenguaje de programación experimental que prioriza la continuidad y la espontaneidad sobre la estructur

Haskell: Usa `do` para registros más claros

Este artículo del blog de HaskellForAll aborda una recomendación de estilo para la construcción de registros (tipos de datos) en Haskell: priorizar la notación `do` sobre los operadores `Applicative` (como `<$>` y `<*>`). Aunque ambos métodos son válidos, la notación `do` ofrece ventajas significati

Ocaml mejora interoperabilidad con C++

Este cambio introduce un nuevo backend en C++ para el compilador `ocamlc`, mejorando significativamente la integración con código C existente y la interoperabilidad a través de la Foreign Function Interface (FFI). Tradicionalmente, `ocamlc` utilizaba un C intermedio para la FFI, lo que resultaba en

TinyAPL: Combinadores impulsan la programación funcional

## Combinadores en TinyAPL: Funciones que Transforman la Programación Funcional ¿Qué son y por qué son importantes? En el mundo de la programación funcional, los combinadores son una herramienta poderosa y a menudo sutil. En esencia, un combinador es una función que *no modifica* sus argumentos o

Error en compilador Rust al emular tipos avanzados

Este artículo técnico explora una peculiaridad en el sistema de tipos de Rust y cómo un intento de emular tipos de orden superior (HKTs) llevó a un error de desbordamiento en la evaluación de requisitos de traits, causando que el compilador fallara. El autor, en su intento de crear un lenguaje de sc

Tipos y errores: un análisis de Map.take! en Elixir

Este artículo explora las limitaciones de los sistemas de tipos en lenguajes de programación dinámicos, utilizando como ejemplo la propuesta de una función `Map.take!/2` en Elixir. `Map.take/2` es una función existente en Elixir que extrae un subconjunto de claves de un mapa, ignorando las claves in

Recursión: A veces, la solución es recursiva

Este artículo explora una idea contraintuitiva en programación: a veces, la mejor solución para un problema recursivo es, precisamente, una solución recursiva. La premisa central es que, aunque teóricamente cualquier función recursiva puede convertirse en una iterativa, esta transformación a menudo

Matemáticas en Python: Descifrando los 'thinnings'

Este artículo explora el concepto de "thinnings", una herramienta matemática que, aunque a menudo vista como compleja en contextos como la teoría de tipos dependientes, puede ser aplicada y comprendida en lenguajes de programación más comunes como Python. En esencia, un thinning es una forma de test

Recursión sin pila: técnica para código más robusto

Este artículo del blog explora una técnica para transformar código recursivo, a menudo elegante y mantenible, en una forma imperativa más robusta, especialmente útil en entornos como Node.js y TypeScript donde los desbordamientos de pila son una preocupación. La idea central es simular explícitament

C++ se inspira en Lisp: nueva herramienta de programación

El proyecto `lmp` (Lisp-style Meta Programming) de Mistivia en GitHub introduce una forma innovadora de realizar programación meta (template metaprogramming) en C++ que se inspira en el paradigma funcional de Lisp. La programación meta en C++ permite escribir código que genera o manipula otro código

Nix evita errores de pila con nueva técnica

Nix, un lenguaje de gestión de paquetes y construcción, a menudo se enfrenta a limitaciones de profundidad de pila debido a su naturaleza recursiva. Cuando se ejecutan operaciones iterativas (simuladas a través de recursión), el evaluador de Nix puede alcanzar un límite de 10.000 niveles de llamada,

Scala: Concurrencia optimizada con técnica inspirada en Haskell

Este artículo explora una técnica avanzada para mejorar la concurrencia en Scala, inspirada en el lenguaje Haskell y su biblioteca Haxl. El problema que aborda es cómo optimizar la ejecución de múltiples consultas de datos, evitando una serie de llamadas secuenciales a la base de datos. En Haskell,

Aprende Clojure: Plataforma práctica para desarrolladores

ClojureStream es una plataforma integral diseñada para el aprendizaje y la comunidad en torno a los lenguajes de programación Clojure, ClojureScript y Datalog. En un mundo donde la curva de aprendizaje de nuevas tecnologías puede ser empinada, ClojureStream se presenta como un recurso estructurado y

Scheme y 'GOTO': Emulación con Continuaciones

Este artículo explora cómo emular la instrucción `GOTO` en el lenguaje Scheme utilizando continuaciones. `GOTO` es una instrucción de control de flujo que permite saltar a una línea específica de código, algo que Scheme, por diseño, no ofrece directamente. Dijkstra, en su famoso artículo, criticó `G

Rust: Diseña con Tipos, Evita Validaciones

Este artículo, originalmente escrito en Haskell y ahora adaptado a Rust, introduce un patrón de diseño llamado "Parse, don't Validate" y el diseño impulsado por tipos (Type-Driven Design). La idea central es evitar funciones de validación explícitas y, en su lugar, codificar las restricciones y gara

Mini-lenguajes: programación en código reducido

Este artículo de Taylor Troesh explora el fascinante mundo de los "Lil' Fun Langs", o lenguajes de programación muy pequeños. La idea central es que es posible crear lenguajes de programación funcionales y con tipado estático con una cantidad sorprendentemente baja de código. El artículo no solo pre

Diseño con Tipos: Analiza, No Valides

El artículo explora el concepto de diseño impulsado por tipos (type-driven design), una metodología que el autor ha tenido dificultades para explicar de manera concisa. La clave para comprender este enfoque reside en la idea de "parse, don't validate". El autor ilustra esto a través de ejemplos en H

Programación Funcional: El Peligro de la Confianza Excesiva

El artículo de Ian Duncan critica la tendencia en la programación funcional (FP) a enfocarse excesivamente en la corrección local del código, lo que lleva a una falsa confianza en las propiedades del sistema en su conjunto. Argumenta que, independientemente del paradigma de programación, los desarro

Swift y Kotlin: ¿Demasiada Estricción en la Programación?

El artículo del blog 'The Clean Code' explora una tendencia preocupante en el desarrollo de lenguajes de programación modernos, específicamente Swift y Kotlin. Ambos lenguajes, aunque con orígenes distintos (Swift derivado de Objective-C y Kotlin de Java), comparten una marcada inclinación hacia la

SimCity en Texto: Un Juego Único en Emacs

ElCity es un juego de construcción de ciudades por turnos, único porque se ejecuta completamente dentro del editor de texto Emacs. Imagina un SimCity, pero en lugar de gráficos complejos, utilizas caracteres ASCII para representar edificios, carreteras y otros elementos. Esto no es solo una curiosid