Dash

Escribe código limpio, sintetiza ejecutables nativos.

Un lenguaje de alto nivel para el Amiga, con una sintaxis que se lee como Ruby o Python. Se traduce a C y se compila en tu PC a un ejecutable de 68k: sin intérprete ni máquina virtual en el Amiga.

De tu código a un ejecutable de 68k

Tres programas de verdad. Lo que escribes, el C que genera Dash (un fragmento) y lo que sale en el Amiga.

  1. Dash
  2. C
  3. m68k-amigaos-gcc
  4. Amiga
hola.dash Lo que escribes
Window MiVentana
  title "Hola Dash"
  width 400
  height 150
end

Main
  MiVentana.open
  EventLoop
    On Close
      Print "Adiós!"
      Stop
    end
  end
end
hola.c El C que genera Dash
// User Code
win_MiVentana = OpenWindowTags(NULL,
    WA_Left, 50, WA_Top, 50,
    WA_Width, 400, WA_Height, 150,
    WA_Title, (ULONG)"Hola Dash",
    WA_CloseGadget, TRUE,
    WA_DragBar, TRUE,
    WA_DepthGadget, TRUE,
    WA_SizeGadget, FALSE,
    WA_Borderless, FALSE,
    WA_Activate, TRUE,
    WA_MinWidth, 40, WA_MinHeight, 20,
    WA_MaxWidth, (ULONG)~0, WA_MaxHeight, (ULONG)~0,
    WA_GimmeZeroZero, TRUE,
    WA_IDCMP, IDCMP_CLOSEWINDOW,
    _dash_screen ? WA_CustomScreen : TAG_IGNORE, (ULONG)_dash_screen,
    TAG_DONE);

if (!win_MiVentana) _dash_exit(20);
_dash_win = win_MiVentana;
_dash_rp = win_MiVentana->RPort;
{
BOOL running = TRUE;
struct IntuiMessage *msg;
ULONG msg_class;
UWORD msg_code;
ULONG _dash_tmev = _dash_tmp_mark();

while (running) {
    _dash_tmp_release(_dash_tmev);  /* temporaries of the previous messages */
    WaitPort(win_MiVentana->UserPort);
    while (win_MiVentana && (msg = (struct IntuiMessage *)GetMsg(win_MiVentana->UserPort))) {
        msg_class = msg->Class;
        msg_code = msg->Code;
        (void)msg_code;
        ReplyMsg((struct Message *)msg);

        switch (msg_class) {
            case IDCMP_CLOSEWINDOW: {
Printf("Adi\363s!\n");
    running = FALSE;

                }
                break;
        }
    }
}
if (win_MiVentana) {
    if (_dash_win == win_MiVentana) _dash_win = NULL;
    _dash_before_close(win_MiVentana);
    CloseWindow(win_MiVentana);
    win_MiVentana = NULL;
}
_dash_tmp_release(_dash_tmev);
hola En el Amiga
Una ventana con su bucle de eventos. El ejecutable entero, con su runtime, ocupa esto:

Una ventana con su bucle de eventos. El ejecutable entero, con su runtime, ocupa esto:

5 KB de ejecutable

581 funciones para todo el Amiga

Ventanas, gráficos, sonido, red y el sistema, sin escribir C y sin acordarte de qué librería abrir:

Interfaz
Intuition, GadTools, ReAction y MUI 3.8 o 5 (con zona de dibujo con doble búfer).
Gráficos
Copper, Blitter y BOBs, sprites de hardware y por software, doble búfer, RTG (CyberGraphX y Picasso96), y IFF, PNG, JPEG o GIF por datatypes.
Red
TCP y UDP, y HTTPS con AmiSSL 5.1 que reanuda la sesión TLS.
El lenguaje
Tipos inferidos, structs con métodos, lambdas, listas y diccionarios con tipo, Float y Fixed 16.16, módulos. Memoria por contador de referencias: sin recolector y sin pausas.
Si hace falta
C dentro del código (@native, @c) y enlazar librerías (@link).
581 builtins
  • MUI82
  • ReAction79
  • Tareas en otro proceso58
  • Intuition46
  • Gráficos avanzados43
  • Entrada30
  • Gráficos29
  • Sistema26
  • Red (TCP)24
  • DOS24
  • RTG21
  • Audio21
  • GadTools19
  • Texto18
  • Menús, búferes, TLS, fuentes y más61

Con VS Code

La extensión «Dash for Amiga» colorea el código, marca los errores mientras escribes, completa, va a la definición y formatea. Compila y ejecuta en FS-UAE o Amiberry, depura con F5 (también en un Amiga de verdad, por la red) y trae un editor visual de ventanas MUI.

Se instala desde el fichero .vsix de su página en GitHub (versión 0.2.1).

El editor visual de ventanas MUI
El editor visual de ventanas MUI

Hecho con Dash

Dash crece con programas de verdad: lo que les falta se añade al lenguaje, y luego lo tiene cualquiera.

Qué necesitas

En el Amiga
AmigaOS 3.0 o posterior; un 68000 basta. MUI y HTTPS piden un 68020.
En tu PC
Linux, macOS o WSL2, con Python 3.10, la librería Lark y el compilador cruzado m68k-amigaos-gcc. Dash compila en el PC: no en el Amiga.