Entré en https://repl.it/jam con TablaM, un experimento para construir un lenguaje de programación relacional.
Empecé a programar en la década de 1990 con FoxPro, un entorno de programación de stack completo (en ese momento no usamos nombres geniales como "stack completo") donde era natural usar bases de datos ... y fue MUY productivo.
Podía hacer TODO (formularios, informes, bases de datos, utilidades, etc.) con un único lenguaje y entorno.
Microsoft, en un movimiento muy extraño, lo mata junto con Visual Basic (impactante porque era el lenguaje MÁS popular en ese momento) cuando intenta pasar todo a .NET. Así que todos saltan del barco y el único remanente de la idea está representado hoy por Access y algunas otras herramientas, casi todas propietarias, atrapadas en el pasado o en pedazos de lo que chicos en estos días llaman "NoSql / BigData", que tienen una mayor complejidad.
Ahora, después de usar más de 12 idiomas y más frameworks y bibliotecas que puedo contar, quiero recuperar esa experiencia: Una herramienta diseñada para datos, donde los datos son tan importantes como el código y para usarlo no se requieren ORMs u otras herramientas que causen el conocido impedance mismatch.
Esto significa que si la mayoría de los lenguajes se centran en detalles de bajo nivel o en ingeniería en general, TablaM se adaptará con algunas decisiones de diseño pequeñas y grandes para que sea agradable escribir aplicaciones para comercio electrónico, finanzas, ERP y similares.
La característica más distintiva del lenguaje es el uso del modelo relacional como base para su funcionamiento. Esto nos permite proporcionar un conjunto de operaciones universales y consistentes que facilitan la manipulación de datos.
Por ejemplo, donde la mayoría de los idiomas tienen diferentes métodos para "consultar" elementos (a veces llamados search
, otras veces get
o find
o filter
o ...), lo que significa que debes aprender todas las formas diferentes que cambian de acuerdo con el contexto o el tipo de objeto que estás usando, en TablaM es solo ?where
, y TODOS los valores, incluso archivos, bases de datos, sockets, números, texto, etc ... se puede consultar con el mismo conjunto de operadores. Y no necesitas codificarlos, porque están disponibles universalmente.
Una pequeña muestra del idioma según lo planeado (qué funciona hoy está en el sitio oficial):
-- A column, aka: Vectors...
let qty := [10.5, 4.0, 3.0]
-- Like APL/kdb+ operations apply to more than scalars
qty * 16.0
-- Show: Vec[it:Dec; 168.00; 64.00; 48.00]
-- The ? (query) operator allow to do SQL-like queries to anything
let doubled := qty ?select #0 * 2.0
-- like files!
let products := open("products.csv")
-- and is streamed, so can query big ones
for p in products ?where #price > 0.0 do
print(p)
end
-- so, we can do joins between anything:
for p in cross(products, qty) ?limit 10 do
print(p.products.price * p.qty)
end
-- No nulls, we have proper algebraic types
type Status = case Pay, NotPay end
-- Use databases:
use db.sqlite
let db := sqlite.open("data.db")
for sale in db.invoices ?status = Status.Pay do
print(sale)
end
Entonces, ¿qué tipo de lenguaje es TablaM?
Nota: Los elementos marcados **(tbd) **están en la hoja de ruta ...
Hemos preparado este material para este concurso:
Sitio oficial: https://tablam.org
Código: https://github.com/Tablam/TablaM
Nota: ¡No se deje engañar por la abundancia de documentos! El código aún está muy temprano en su progreso ...