Benvenuto!
One
è un linguaggio di programmazione open source, auto-hostato, che rende semplice creare software efficiente e affidabile.
È sviluppato da Max, John e altri collaboratori open-source.
- Semplicità
- Compilatore
- Possibilità di creare file in output (x86_64, i386)
- Linguaggio di programamzione di sistema
- Livello intermedio
- Programmazione network e API
- Supporto per la programamzione Web (in futuro)
- Generazione automatica del testo corrispondente sia per CSS che per HTML. Così non dovrai imparare più di
One
linguaggio per sviluppare un sito web - Utilizzo delle variabili in CSS, in modo tale da ottenere i colori o le dimensioni da un database
- Minimizzazione automatica dei risultati della pagina
- Generazione automatica del testo corrispondente sia per CSS che per HTML. Così non dovrai imparare più di
- Performance e alta velocità
- Supporto inline per il codice Assembly (in futuro)
- Non richiede librerie o tool specifici nel sistema dell'utente in modalità normale (in futuro)
- Non richiede librerie di runtime esterne in modalità normale (in futuro)
- Non richiede compilatori esterni per effettuare la compilazione (in futuro)
La sintassi del linguaggio One
è disponibile qui.
- Lexer/Parser (Quasi completamente)
- Albero sintattico
- VM
- Generatore di codice (ispirato da LLVM-C)
- Sviluppare una libreria di runtime e aggiungere funzionalità
- Creare un web framework per il linguaggio
- Riscrivere il compilatore in linguaggio
One
main {
ret 0
}
Equivalente in C:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
global_argc = argc;
global_argv = argv;
return (int) 0;
}
i32 main {
ret 10
}
Equivalente in C:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
global_argc = argc;
global_argv = argv;
return (int) 10;
}
main {
string in = "Hello, World!"
__ in
return in.length
}
Equivalente in C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
global_argc = argc;
global_argv = argv;
char *in = "Hello, World!";
printf("%s\n", in);
return (int) strlen(in);
}
Un altro esempio:
import web
home {
_ "Hi, Welcome"
}
error {
headers.add('HTTP/1.0 404 Not Found')
headers.add('content-type: text/html;charset=utf-8')
_ "<h1>404></h1>"
}
main {
if system.args.length === 2 {
port = system.args[1]
} else {
port = 8080;
}
web.route.add("/", home)
web.route.add("*", error)
web.listen(port)
return 0
}
Un altro esempio:
error {
headers.add('HTTP/1.0 404 Not Found')
headers.add('content-type: text/html;charset=utf-8')
_ `<!doctype html><html><head><title>Error 404</title><meta charset="utf-8"></head><body><h1>404></h1></body></html>`
}
vs
error {
headers.add('HTTP/1.0 404 Not Found')
headers.add('content-type: text/html;charset=utf-8')
page {
title: 'Error 404'
label {
type: 'h1'
_ "Not found!"
}
}
}
main:
// __ "Hello, World!"
_ "Hello,"
io.write(' ')
io.write("World")
__ '!'
end
@start
customName:
_ "Hello, World!\n"
end
@start
void app:
__ "Hello, World!"
end
@start
int customName:
_ "Hello, World!\n"
return 0
end
Questa architettura è disegnata solo per siti web e software nativo. In futuro, sarà disponibile anche per applicazioni mobili (native).
Le strutture mobili non sono ancora complete e hanno bisogno di più attenzione.
Esempio per dimostrarne il funzionamento:
title "Name - Main"
description "Descriptions"
/*
il tag keyword non è usato nel software, solo sul web.
*/
keyword "keywords"
style {
* {
margin 0
padding 0
}
header {
width "100%"
height "auto"
}
list {
color "red"
}
list item {
display "inline"
padding "10px"
background "yellow"
}
}
header {
list {
item {
_ "Home"
}
item {
_ "About"
}
item {
_ "Contact Us"
}
}
}
Equivalente in CSS/HTML/JS:
<html>
<head>
<title>Name - Main</title>
<meta name="description" content="Descriptions" />
<meta name="keyword" content="keywords" />
<style>
* {
margin: 0;
padding: 0;
}
header {
width 100%;
height: auto;
}
ul {
color: red;
}
ul li {
display: inline;
padding: 10px;
background: yellow;
}
</style>
</head>
<body>
<header>
<ul>
<li>Home</li>
<li>About</li>
<li>Contact Us</li>
</ul>
</header>
</body>
</html>
Fai riferimento a questo link per iniziare ad imparare il linguaggio.
- GNU / Linux
- Windows
- macOS (Incompleto)
- BSD
Sono benvenute tutte le tipologie di contributo, inclusi bug reports, richieste di nuove funzionalità, miglioramento della documentazione etc. Per fare una domanda o aprire una discussione, crea un'issue o unisciti al server Discord di One.
Se non sai come fare una Pull Request su GitHub per favore leggi questa guida.
Se vuoi contribuire, per favore leggi le linee guida qui.
Puoi anche aiutare nello sviluppo di One
facendo una donazione su ❤️ Patreon.
Grazie a tutti i collaboratori!!
Se vuoi contribuire allo sviluppo di questo progetto, puoi contattarci a: [email protected]
One
è rilasciato sotto la GNU General Public License v3.0. Per favore fai riferimento ai termini nel file LICENSE incluso nel repository.