Pon Eskiu a correr
Instala el compilador, escribe tu primer programa y córrelo. Unos cuantos minutos de principio a fin, sin toolchain que armar.
Instalación
En macOS o Linux, el script de instalación elige el build para tu máquina y lo pone en tu PATH:
curl -fsSL https://eskiu-lang.org/install.sh | sh
eskiuc --version
Eskiu 0.12.0 (LLVM ...)
Con Homebrew:
brew install eskiu-lang/eskiu/eskiu
O descarga el archivo de un release y descomprímelo donde quieras: trae bin/eskiuc
y la biblioteca estándar en lib/eskiu/stdlib/. En Windows, descomprímelo y agrega
su carpeta bin al PATH.
Para enlazar hace falta un toolchain de C en tu máquina (clang o gcc),
el mismo al que llaman Rust y Clang para generar un binario. macOS lo trae con las Command
Line Tools de Xcode; en Linux, instala build-essential (o gcc); en
Windows, MinGW de MSYS2. Windows se valida de punta a punta en un runner nativo de CI, pero
todavía no forma parte del release gate.
Hola, Eskiu
Un archivo de instrucciones corre como script. Crea hello.esk:
import <io>;
println("Hello, Eskiu!");
eskiuc run hello.esk
Hello, Eskiu!
eskiuc run genera un binario nativo, lo corre y limpia. Los programas más grandes
tienen un main:
import <io>;
int add(int a, int b) {
return a + b;
}
int main() {
println("Hello from Eskiu!");
printf("5 + 3 = %d\n", add(5, 3));
return 0;
}
Para conservar el binario, dale un nombre; un nombre .o se queda en el archivo objeto:
eskiuc hello.esk -o hello && ./hello
eskiuc hello.esk -o hello.o
Un struct con un método
Un método se escribe dentro del struct, o como una función Point_sum(Point* self);
p.sum() llama a cualquiera de los dos. Un literal de struct nombra sus campos, y los
que faltan empiezan en cero.
import <io>;
struct Point {
int x;
int y;
int sum() {
return self.x + self.y;
}
}
int main() {
let p: Point = Point{x: 3, y: 7};
printf("sum = %d\n", p.sum()); // sum = 10
return 0;
}
Memoria que tú manejas
alloc<T>(n) de <mem> da n elementos de tipo
T en cero, y defer los libera sin importar cómo termine la función:
import <io>;
import <mem>;
int main() {
*int buf = alloc<int>(4);
defer free(buf);
for (i in 0..4) {
buf[i] = (i + 1) * 10;
}
printf("sum = %d\n", buf[0] + buf[1] + buf[2] + buf[3]); // sum = 100
return 0;
}
Lambdas
Las funciones son valores. Una lambda tiene la sintaxis de una función, sin el nombre:
import <io>;
int apply(fn(int)->int f, int x) {
return f(x);
}
int main() {
let double_it: fn(int)->int = int(int x) { return x * 2; };
printf("%d\n", double_it(5)); // 10
printf("%d\n", apply(double_it, 4)); // 8
return 0;
}
Un proyecto con paquetes
eskiuc new crea un paquete, y eskiuc add trae otro desde git. Un
paquete que usa una biblioteca de C la descarga en el primer build:
eskiuc new myapp && cd myapp
eskiuc add onnx --git https://github.com/eskiu-lang/onnx --rev v0.1.0
eskiuc run
La página de paquetes lista los oficiales.
Qué sigue
- Prueba Eskiu en tu navegador, sin instalar nada.
- El libro de Eskiu: todo el lenguaje, capítulo por capítulo.
- Plataformas: compilar para la web, iOS, Android y bare metal.
- Showcase: lo que se ha construido con él.
eskiu