*
***
*****
*******
*********
*******
*****
***
*
L'idea è nata parlando di che aspetto avrebbe un linguaggio di programmazione che, pur mantenendo funzionalità, richieda meno caratteri possibile. È evoluto in un LAM diverso, con uno pseudolinguaggio generico
È ora possibile salvare delle variabili, ma non esiste modo di accedere ai valori salvati, ed usare commenti.
var str abc <- "ciao";
var num 123 <- "1.23";
Sintassi leggermente cambiata per le variabili, in
var str abc = "ciao";
var num 123 = 1.23;
Inoltre ora è possibile stampare il contenuto di una variabile con
print(${abc});
Tutti i valori salvati sono però costanti e non possono essere aggiornati, né è possibile utilizzare dell'aritmetica.
- Implementati dei log extra per debug quando si compila con
make DEBUG=1
- Uniti gli struct Number e String in un unico Variable, definito come
struct Variable {
char *name;
double *number;
char *string;
struct Variable *prev;
struct Variable *next;
};
- Non è più necessario specificare il tipo di una variabile, è sufficiente mettere o no le virgolette.
var abc = "ciao";
var 123 = 1.23;
- Creata una serie di operazioni che possono essere effettuate su di una variabile numerica
var a = 2; # 2
var b = 1;
add(a, ${b}); # 3
divide(a, 1.5); # 2
multiply(a, 2); # 4
power(a, 3); # 64
sqrt(a); # 8
subtract(a, 5); # 3
print(${a}); # >>> 3
- Un operatore permette di concatenare delle stringhe
var a = "hello";
var b = " world";
concatenate(a, ${b});
print(${a}); # >>> hello world
- È ora possibile cambiare il valore di una variabile
var a = 3;
print(${a}); # >>> 3
var b = "ciao";(
print(${a}); # >>> ciao
Ora dove si può accedere ad una variabile con ${var}
è accettata anche un numero o una stringa grazie all'implementazione di eval() che gestisce i valori inseriti. Questa unifica l'implementazione del parsing per variabili, numeri e stringhe.
Quando vi è un errore sarà stampato un messaggio più specifico oltre all'ultima riga eseguita
[ERROR] An error occurred while running the following line
>>> add(w, ${v}); <<<
<!> Variable not found
Non dovrebbero più esserci particolari problemi quando si cerca di usare ';' in una stringa, ad esempio
print(";");
non verrà più letto come
print(";
Ho aggiunto dei rudimentali if / else (per ora è considerato true un numero diverso da 0)
var a = 12;
if ${a} {
print("1");
}
if 0 {
print("2");
} else {
print("3");
}
Stamperà:
1
3
Ora si possono includere altri file all'interno di uno già aperto, il contenuto sarà eseguito in mezzo a quello corrente
include "file.al";
var filename = "file2.al";
include ${filename};
Aggiunte due funzioni di casting
var a = "54";
num(a);
str(a);
Aggiunta una funzione che stampa il tipo di una variabile ed una per eseguire comandi in una shell
var cmd = "pkexec pacman -Syu";
type(cmd);
shell(${cmd});
Create le funzioni che saranno necessarie per gestire le liste
Aggiunte le liste. Ancora non è stato aggiunto il concetto di accesso tramite indice, è quindi necessario estrarre una variabile dalla lista (tramite il nome) per utilizzarla, per poi eventualmente reinserirla.
var x = 3;
list y << x;
list y >> x;
print(${x});
Ora si può accedere ad un elemento di una lista anche tramite un indice.
Inoltre una lista può essere eliminata con delete()
.
var x = 3;
list y << x;
print(y[1]);
delete(y);
Per richiedere input da un utente si potrà invece usare la sintassi
var a = "";
input(a);
print(${a})
Type ora salva il risultato in una seconda variabile invece che scriverlo su stdout
var a = 4;
var b = "";
type(a, b)
print(${b})
Aggiunti break e continue per interrompere l'esecuzione all'interno di un ciclo while Inoltre ora è accettato un not in if e in while
if not ${var} {
print("var è 0");
}
Migliorata la gestione di sintassi errate e aggiunta una funzione per confrontare due valori
var a = 7;
var uguali = 1;
compare(${a}, 7, uguali);
if ${uguali} {
print("I valori sono uguali");
} else {
print("I valori sono diversi");
}