Benvenuti nel manuale di riferimento MALDA
MALDA: The AI-First Programming Language è un linguaggio di programmazione moderno e orientato agli oggetti, pensato per costruire agenti AI e workflow di automazione. Con supporto nativo all'integrazione LLM, all'orchestrazione di agenti e ai sistemi multi-agente, MALDA rende semplice creare applicazioni intelligenti e autonome.
MALDA: Multi Agent Language with Development Automation - Il nome MALDA riflette i principi del linguaggio: Multi Agent (supporto nativo all'orchestrazione di più agenti AI che collaborano), Language (un linguaggio completo, con sintassi, runtime e tooling), Development (una toolchain completa - interprete, compilatore, IDE, language server - per costruire e distribuire software reale) e Automation (gli agenti di coding possono scrivere MALDA grazie al language pack in docs/llm/, e i programmi MALDA automatizzano a loro volta il lavoro di sviluppo, perché prompt, agenti e workflow durevoli sono costrutti del linguaggio).
Avvio rapido
Se programmi già, parti dai costrutti caratteristici. -> Review lega il prompt allo schema. Senza await, la chiamata è un template reso (nessuna API key). validate("Review", …) è lo stesso controllo che await eseguirebbe sul JSON del modello. Le annotazioni di tipo altrove sono type hint IDE/LSP, non controlli a runtime. Stesso file: Examples/Basics/first_look.malda.
1. First Look
schema Review {
summary: string;
issues: string[];
}
prompt codeReview(code, language) -> Review {
system: "You are an expert reviewer of {language}.",
user: "Review this {language} code:\n\n{code}"
}
var rendered = codeReview("function add(a, b) { return a + b; }", "javascript");
io.print(rendered.user);
var checked = validate("Review", {
"summary": "Looks fine",
"issues": []
});
if (checked.ok) {
io.print("schema ok: " + checked.data.summary);
} else {
io.print("schema failed: " + checked.error);
}
Poi il percorso della sintassi, se vuoi il linguaggio core prima di agenti e API. Preferisci le chiamate namespaced (io.print, math.sqrt, str.upper); il print piatto continua a funzionare.
2. Output a stampa
io.print("Hello, World!");
3. Variabili e aritmetica
var price = 12;
var quantity = 3;
var total = price * quantity;
io.print("Total: " + total);
4. Condizionali
var score = 82;
if (score >= 60) {
io.print("Pass");
} else {
io.print("Fail");
}
5. Cicli e funzioni
function printCountdown(start) {
var current = start;
while (current > 0) {
io.print(current);
current = current - 1;
}
io.print("Go!");
}
printCountdown(3);
6. Programma iniziale completo
Questo esempio combina variabili, array, un ciclo, una funzione e un'if in un unico programma lineare:
var cart = [12, 18, 7];
var total = 0;
for (var item in cart) {
total = total + item;
}
function describeTotal(amount) {
if (amount >= 30) {
return "big order";
}
return "small order";
}
io.print("Items: " + cart.length);
io.print("Total: " + total);
io.print("Summary: " + describeTotal(total));
Per altri programmi per principianti eseguibili nello stesso stile, vedi Esempi e Start Here.
Scegli il percorso
Percorso 1: imparare a programmare con MALDA
Inizia da qui se stai imparando a programmare per la prima volta. Segui questa sequenza:
- First Look (
prompt+schema+validate) - Hello World
- Variabili e aritmetica
- Condizionali
- Cicli
- Funzioni
- Programma iniziale completo
- Esempio di input
Vedi Esempi per programmi per principianti eseguibili.
Dopo il percorso core, diramati verso Testing e qualità, Dati e database e App nel browser.
Percorso 2: costruire app AI con MALDA
Inizia da qui se conosci già le basi e vuoi arrivare in fretta a prompt, agenti e app AI full-stack.
- Blocchi
prompte prompting riutilizzabile - Agenti e workflow basati su tool
- REST API e controlli UI
- Showcase web e API full-stack
Funzionalità principali
Linguaggio core
- Typing dinamico - Le variabili possono contenere valori di qualsiasi tipo
- Orientato agli oggetti - Classi, ereditarietà, polimorfismo
- Actor - Modello ad actor nativo per la programmazione concorrente
- Funzioni - Funzioni first-class con supporto alla ricorsione
- Array - Array dinamici con metodi built-in
- Strutture di controllo - if/else, while, for, foreach
Capacità AI-First
- Integrazione LLM - Supporto built-in per OpenAI, OpenRouter, LMStudio, OLLAMA
- LLM locali - LlamaCppClient per l'inferenza locale con modelli GGUF
- Sistema di agenti - Creare agenti autonomi con ruoli e istruzioni
- Sistema di tool - Definire tool personalizzati con il decoratore @Tool
- Orchestrazione multi-agente - Coordinare più agenti che lavorano insieme, anche in sistemi gerarchici
- Gestione delle conversazioni - Gestione automatica delle tool call con esecuzione parallela in sola lettura (attiva di default)
Funzionalità Web e API
- Web server - HTTP server built-in per servire HTML
- REST API - Creare REST API con routing a decoratori
- Framework UI Web - Usare
@PAGEe@AIPAGEcon una libreria di componenti per applicazioni full-stack con backend MALDA e UI renderizzata sul server - Server MCP - Esporre funzioni MALDA come tool MCP
- Generazione UI - Generare interfacce HTML usando agenti LLM
Indice dei capitoli
Per iniziare
Per iniziare con MALDA, esegui malda Examples/Basics/first_look.malda dalla CLI. Il Desktop IDE è il riferimento Windows (WPF); il Web IDE è un playground nel browser (non a parità con il Desktop); VS Code + LSP è l'editor cross-platform. Il Desktop IDE offre:
- Syntax highlighting
- IntelliSense/auto-completamento
- Debugger completo con breakpoint
- Diagnostica degli errori
- Compilatore per creare eseguibili standalone
- Profiling built-in per analizzare i colli di bottiglia nelle esecuzioni interpretate e transpile
Se sei nuovo al linguaggio, percorri gli esempi di Avvio rapido qui sopra dall'inizio alla fine prima di passare ad agenti e funzionalità full-stack.
Quando sei pronto a regolare il comportamento a runtime, vedi l'Appendice per i flag CLI di profiling (inclusi gli snapshot periodici opzionali su file per le esecuzioni lunghe) e il riepilogo del report.
Esempio: un agente semplice
Un esempio rapido di creazione di un agente AI in MALDA:
// Create an agent (pass a client; for remote models use OpenRouterClient)
var client = new OpenRouterClient();
var agent = new Agent("Assistant", "helper", "You are a helpful assistant.", client);
var response = agent.think("What is 2+2?");
io.print(response.content);
Quando usi await prompt(...) o agenti specializzati (es. CodingAgent) senza passare un client, MALDA usa un LLM locale di default (Qwen/Qwen2.5-0.5B-Instruct, scaricato come build GGUF da Hugging Face al primo uso — nessuna API key).