Devkron.org English
Devkron. Knowledge in motion

Escriba menos código. Publique más rápido.

El lenguaje Devkron, o simplemente DKL [DevKron Language], es un metalenguaje dinámico, declarativo y con sintaxis variable: escribe HTML, XML y JSON por usted, se lee como cualquier lenguaje que ya conoce y le permite crear su propia sintaxis. Gratis para aprender y desarrollar.

  • El dato y su forma, juntos
  • Marcos listos para usar
  • Linux y Windows

Lo que escribe ya es el HTML

En DKL una página no se arma concatenando cadenas ni con plantillas aparte. La lógica y el marcado conviven en el mismo archivo, de forma natural.

##
table(class="pedidos")
{
    tr { th{"Folio"} th{"Cliente"} th{"Total"} }
    #!
    for i = 0; i < list.count(pedidos)
    {
        ref p = list.obj(pedidos, i)
        ##
        tr
        {
            td{ $"#<@@(p, \"#folio\")>" }
            td{ $"#<@@(p, \"cliente\")>" }
            td(align="right"){ $"#<@@(p, \"#total\"):#,0.00>" }
        }
        #!
    }
    ##
}

Resultado

<table class="pedidos">
  <tr>
    <th>Folio</th>
    <th>Cliente</th>
    <th>Total</th>
  </tr>
  <tr>
    <td>1001</td>
    <td>Ana López</td>
    <td align="right">1,250.50</td>
  </tr>
  <tr>
    <td>1002</td>
    <td>Luis Pérez</td>
    <td align="right">980.00</td>
  </tr>
</table>

Datos con la notación que ya conoce

Registros y listas como JSON, directamente en el código y con expresiones dentro. Sin clases, sin mapeos, sin ceremonia.

new pedido
{$$
    "cliente": "Juan",
    "partidas": [{"producto": "P-01", "cantidad": 2}],
    "total": 150.5 * 2
$$}
do print(to.json(pedido))

Resultado

{
  "cliente": "Juan",
  "partidas": [
    {
      "producto": "P-01",
      "cantidad": 2
    }
  ],
  "total": 301.0
}

Un lenguaje que se adapta a usted

DKL le permite crear su propia sintaxis. Defina frases a la medida de su negocio y el lenguaje las entiende. No es un truco: toda la sintaxis de DKL (if, for, new…) está definida así.

#def producto (clave, precio) "producto"
#pattern producto "PRODUCTO '$clave' CUESTA '#precio'"
catalogo
{
    PRODUCTO lapiz CUESTA 5.50
    PRODUCTO cuaderno CUESTA 38
}

Resultado

<catalogo>
  <producto clave="lapiz" precio="5.50" />
  <producto clave="cuaderno" precio="38" />
</catalogo>

Un árbol, como XML

Al igual que XML, un documento DKL representa un árbol de nodos anidados a partir de una raíz única. Cada nodo puede tener atributos y contener otros nodos o bloques de texto. Por eso DKL es completamente traducible a XML y sirve para definir datos u otros dialectos.

Personas(cantidad="3")
{
    Persona(nombre="Juan")
    Persona(nombre="Pedro")
    Persona(nombre="Camila")
}

Resultado

<Personas cantidad="3">
  <Persona nombre="Juan" />
  <Persona nombre="Pedro" />
  <Persona nombre="Camila" />
</Personas>

Influido por lo mejor de varios mundos

XML

Del que toma la representación de datos jerárquicos.

C

Cuya sintaxis, ampliamente conocida, facilita la codificación y el aprendizaje.

PHP

Por su capacidad de hacer que los documentos se generen a sí mismos.

JavaScript

Por su tipado dinámico y sus estructuras de datos (JSON).

Una consulta, un servicio JSON

Abrir la conexión, tomar los parámetros de la URL, consultar y responder en JSON: una sola instrucción. Los parámetros viajan separados del SQL, así que la consulta queda protegida contra inyección.

do httpres.json(dbr.list(dbr.open("tienda@miapp"), "
        SELECT sku, nombre, precio FROM producto
        WHERE nombre LIKE CONCAT('%', @q, '%')", httpreq.get()))

/productos.dkl?q=café

[
  {
    "sku": "P-01",
    "nombre": "Café 1 kg",
    "precio": 189.90
  },
  {
    "sku": "P-03",
    "nombre": "Café molido",
    "precio": 95.00
  }
]

Lo de todos los días, ya hecho

Casi todo sistema repite lo mismo: iniciar sesión, dar de alta, consultar, editar, borrar, listar, subir archivos, mostrar reportes. Devkron trae esas piezas listas para que usted programe solo lo que hace única a su aplicación.

CRUD-L: una tabla, un sistema completo

Publique una tabla con una regla de rutas y un archivo de configuración, y obtenga un servicio REST en JSON, formularios y listados HTML, y maestro-detalle guardado en una transacción.

/tienda/{_entities_type}/{_entity_id?} > tienda/entry-point.dkl

Sitios con plantillas

La estructura común de todas las páginas, y un sitio nuevo desde una plantilla con un comando.

Autenticación

Sesiones, cookies, tokens y verificación de permisos.

Archivos

Subida, descarga y organización de archivos desde el navegador.

Tablas con totales

Agrupaciones, subtotales y totales para reportes en pantalla.

Bibliotecas que hacen el trabajo pesado

Incluidas en la descarga. Cada una resuelve en una línea lo que en otras plataformas requiere un paquete externo.

Hablar con otros sistemas

ref r = http.post_json(url, http.bearer(token), pedido)

Iniciar sesión con Google

ref u = jwt.verify_rs256(credencial, jwks, emisor, client_id)

Lotes en paralelo

ref r = threads.pool("factura.dkl", "folio", folios, threads.cpus())

Caché en memoria

do cache.set("catalogo", productos, 300)

Y además: candados contra folios duplicados, OAuth 2.0, hashes y firmas, fechas y zonas horarias, expresiones regulares, zip y bitácoras. Como paquetes opcionales: Excel, PDF, Word, CSV, imágenes y Markdown.

Su base de datos, escrita como texto

Describa sus tablas con DDM, instálelas con un comando y actualice bases en producción aplicando solo los cambios seguros, sin borrar datos. Las conexiones se piden por su nombre: las contraseñas nunca viven en el código y pueden ir cifradas.

dkl install-model db=tienda@miapp model=tienda.ddm
#include "ddm.dkh"

model "Tienda"
{
    #include "induxsoft.abstracts.ddm"

    entity "cliente" : "TableModel"
    {
        @"codigo" string(15) required unique
        @"nombre" string(150) required
        @"email" string(100)
        @"limite" decimal(14,2)
        @"iciudad" ref:"ciudad"
    }
}

¿Por qué usar DKL?

Porque es independencia. DKL preserva el conocimiento acerca de las cosas: todo el código escrito es un documento estructurado que puede traducirse a otros lenguajes y tecnologías.

Porque es divertido usar un lenguaje que uno mismo puede hacer evolucionar.

Y simplemente porque podemos y queremos hacerlo.

Acerca de Devkron

Devkron es un proyecto de Induxsoft, empresa mexicana de desarrollo de software. Fue diseñado para reducir el tiempo de aprendizaje de los programadores y hacerlos productivos pronto en la construcción de aplicaciones empresariales.

Hoy es un lenguaje con bibliotecas de propósito general, extensible, con acceso a bases de datos y ejecución en servidores web Linux y Windows. Induxsoft lo usa para las aplicaciones, servicios y páginas web que dan servicio a miles de usuarios en varios países.

Empiece hoy, gratis

Descargue, descomprima y ejecute su primer programa en minutos. Sin licencia, sin registro y sin límite de tiempo para desarrollar en su equipo.