C'è qualcuno che è interessato gratuitamente a collaborare per realizzare, a tempo perso, un progetto open source da mettere su github? Si tratterebbe di realizzare un linguaggio di programmazione (e quindi il realativo compilatore che compilerà in linguaggio macchina o a, al limite in linguaggio c) che implementa un interessante paradigma di programmazione, quello delle tabelle. Secondo questo pararadigma ogni ogni tipo non scalare è rappresentabile come una tabella, dotata di righe e di colonne, su cui eseguire delle query, simili a quelle del linguaggio SQL. Obiettivo di questo paradigma è permettere di fare operazioni complesse in poche righe di codice.
Ecco degli esempi di sintassi per questo nuovo linguaggio.
int[] numbers1=[5,20,4,1,6];
int[] numbers2=from numbers1 where value >5;
out numbers2;
//L'output sarà [20,6]
Notiamo come il segno di uguale non significa "assegnazione", ma ha valore di "select"
Quindi in questo esempio in un array di interi vogliamo selezionare solo i numeri maggiori di 5:
Mettiamo invece il caso che dobbiamo calcolare la successione di Fibonacci, fino a 144
int[] numbers=[0,1] as arr append (arr[end]+arr[end-1]) loop while numbers[end]<145;
out numbers;
//l'output sarà 0,1,1,2,3,5,8,13,21,34,55,89,144
In questa query inizializziamo l'array con un valore iniziale [0,1] a cui assegnamo un alias ("arr", l'alias ci serve solo per poter scrivere la nostra query) e poi aggiungiamo a questo gruppo di valori iniziale (identificato con "arr") la somma degli ultimi 2 valori (numbers[end]+numbers[end-1]) e ripetiamo il
procedimento fintanto che l'ultimo valore rimane inferiore a 145.
in array multidimensionali , cioè che contengono altri array, abbiamo più righe e non una una soltanto come negli array monodimensionali.
int[][] bidimensional=[[8,89,5,6],[7,8,6],[67,9,10,90]];
//selezioniamo solo i numeri minori di 10
int[] numbers=from bidimensional where value::2 <10;
out numbers;
//l'output sarà [8,5,6,7,8,6,9]
Con ::2 vogliamo indicare i valori che stanno nella seconda riga, cioè gli interi, nella prima invece stanno gli array di int.
E magari in questo linguaggio sarà possibile usare la clausola distinct nelle nostre query:
int[] numbers= distinct from bidimensional where value::2 <10;
out numbers;
//l'output sarà [8,5,6,9]
Ovviamente sarà possibile creare tabelle custom, contenenti dati di diverso tipo, anche funzioni. Il tipo dei dati dovrà evvere dichiarato nella dichiarazione della tabella.
Anche su queste tabelle custom si potranno effettuare delle query.
Queste sono solo delle proposte di sintassi, per far capire che tipo di linguaggio si intende sviluppare. Sono bene accetti, ovviamente, suggerimenti.