Skip to content
Ridgun
English

Ridgun

The language itself: a compiler that compiles itself, the stable project tool, the specification and the book

02-primeiros-pasos-e-ferramentas.md159 lines · 7.2 KBRaw
1# Capítulo 02: Os teus dous mellores amigos: `ridgunc` e `stable` (Cero ficheiros YAML, prometido)
2
3Hai linguaxes cuxo compilador é marabilloso, pero cuxo sistema de proxectos parece deseñado polo teu peor inimigo: que se un `Makefile` de 400 liñas con tabuladores invisibles, que se un `pom.xml` infinito, que se un `webpack.config.js` que deixa de funcionar se o miras fixo...
4
5En Ridgun fixémonos unha promesa moi simple desde o primeiro día:
6
7> *"Só haberá dous executables en todo o ecosistema (`ridgunc` e `stable`), ambos estarán escritos no propio Ridgun, e o ficheiro de configuración do proxecto (`build.rg`) será código Ridgun normal e corrente. Nin JSON, nin YAML, nin TOML, nin inventos raros."*
8
9Imos ver como se usan.
10
11---
12
13## 2.1. `ridgunc`: O francotirador para ficheiros soltos
14
15Cando tes un único ficheiro `.rg` entre mans e queres probar unha idea rápida, analizar os seus tipos ou compilar un executable, falas directamente con **`ridgunc`**.
16
17Só ten 4 comandos que de verdade precisas lembrar:
18
19```bash
20# 1. "Compila isto ou metín a pata con algún tipo?"
21ridgunc check experimento.rg
22
23# 2. "Execútao xa!" (Compila e corre dun tirón)
24ridgunc run experimento.rg
25
26# 3. "Faime un binario nativo ELF listo para levar"
27ridgunc build experimento.rg -o meu_programa
28
29# 4. "Sácame o artefacto intermedio de bytecode (.rgc)"
30ridgunc compile experimento.rg -o experimento.rgc
31```
32
33### O superpoder oculto de `ridgunc check`
34Cando lanzas `ridgunc check`, non só che di *"0 erros"*. Tamén che sopra que estratexia escolleu o analizador estático para cada unha das túas funcións:
35- **`InlineSequential`**: *"Esta función é pequeniña e directa; vouna executar en liña sen meter sobrecusto de planificación"*.
36- **`LazyStealableTask`**: *"Aquí hai recursión ou un grafo paralelo `||`; prepároa para que outros núcleos de CPU poidan roubar traballo se fai falta"*.
37
38### O bisturí de `ridgunc build` (Por que os teus binarios non pesan 20 MB)
39Cando executas `ridgunc build`, o compilador non se limita a cuspir todo o código das bibliotecas que importaras:
401. Comeza na túa función `main` e percorre o grafo de chamadas para ver **que funcións usas de verdade**. Se importaches unha biblioteca enorme de 80 funcións pero só chamas a 2, as outras 78 descártanse antes sequera de tocar o ensamblador (*Tree-Shaking*).
412. Busca todas as funcións recursivas de cola e convérteas en bucles `loop` nativos que consumen **0 bytes de pila**.
423. Pasa a ligazón final con optimización global (*fat LTO*) e limpa o lixo de depuración DWARF para deixarche un binario compacto e afiado (~350 KB).
43
44---
45
46## 2.2. `stable`: Cando o teu proxecto medra e queres orde
47
48Un ficheiro solto está xenial para un script, pero en canto tes varios módulos, bibliotecas compartidas e probas, precisas un director de orquestra. Ese é **`stable`**.
49
50A estrutura de cartafoles dun proxecto Ridgun non ten misterio:
51
52```text
53a-mina-super-ferramenta/
54├── build.rg # O manifesto do proxecto (é código Ridgun!)
55├── src/
56│ ├── main/
57│ │ └── ridgun/
58│ │ ├── lib/ # Os teus módulos reutilizables (`import utilidades`)
59│ │ └── app/
60│ │ └── main.rg # Punto de entrada (`main => ()`)
61│ └── test/
62│ └── ridgun/ # As túas baterías de probas (`test *.rg`)
63│ └── test todo.rg
64└── target/ # Onde aparecen os binarios compilados
65```
66
67---
68
69## 2.3. `build.rg`: Un ficheiro de configuración que nunca che mentirá
70
71Por que nos negamos a usar YAML ou TOML para configurar un proxecto Ridgun?
72Porque en YAML trabúcaste en dous espazos de sangrado e non te decatas ata que falla o despregamento. En cambio, como **`build.rg` é un ficheiro Ridgun**, ten tipos estáticos, pasa por `stable check` e alíñase só con `stable format`:
73
74```ridgun
75type ProjectInfo =
76 name: String
77 version: String
78 edition: String
79
80project => ProjectInfo
81project = ProjectInfo "a-mina-super-ferramenta" "0.1.0" "2026"
82
83source dir => String
84source dir = "src/main/ridgun"
85
86test dir => String
87test dir = "src/test/ridgun"
88
89target dir => String
90target dir = "target"
91
92-- Opcional: activa o modo estrito de sinaturas e nomes (desactivado por defecto)
93strict mode => Bool
94strict mode = True
95```
96
97Se te trabucas ao escribir un campo, o propio compilador avísate. Sen sorpresas.
98
99### O modo estrito (`--strict` / `strict mode = True`)
100Por defecto, tanto `ridgunc` como os novos proxectos creados con `stable new` ou `stable init` teñen o modo estrito **desactivado** para que poidas prototipar con total liberdade. Cando queiras blindar o estilo canónico dun proxecto (como facemos no propio compilador de Ridgun), podes pasar `--strict` a `ridgunc` ou engadir `strict mode = True` ao teu `build.rg`. O modo estrito esixe dúas regras de elegancia:
1011. **Nomes de `fn ::` e `op ::` con espazos naturais, sen `_`**: as declaracións deben usar espazos (`fn :: calcular imposto`, nunca `fn :: calcular_imposto`).
1022. **Retornos múltiples separados por espazos tras `=>`**: cando unha función ou operador devolve varios valores, a súa sinatura de saída escríbese `=> Int Int` ou `=> Estado Int` (nunca `=> (Int, Int)` con parénteses nin comas).
103
104---
105
106## 2.4. A túa rutina diaria con `stable` (Os 4 fantásticos)
107
108Cando estás traballando dentro do teu proxecto, o teu día a día redúcese a catro comandos:
109
110### 1. `stable format` — A fin das discusións de estilo no equipo
111```bash
112stable format
113```
114Que o teu compañeiro pon tres espazos antes do `=>` e ti pos un? Dá igual. Executas `stable format` e en menos dun segundo deixa **todos** os ficheiros `.rg` do repositorio aliñados coma unha táboa suíza.
115
116### 2. `stable check` — O radar instantáneo
117```bash
118stable check
119```
120Percorre todos os módulos de `src/main/ridgun/`, verifica tipos, construtores, aridades e dimensións de tensores, e dáche o veredicto módulo por módulo.
121
122### 3. `stable test` — Durmir tranquilo polas noites
123```bash
124stable test
125```
126Busca todas as suites `src/test/ridgun/test *.rg`, execútaas e comproba cada `assert equals` e `assert true`.
127
128```ridgun
129-- Exemplo de src/test/ridgun/test mates.rg
130import test
131
132dobro Int => Int
133dobro x = x * 2
134
135main => ()
136main =
137 assert equals (dobro 21) 42
138 assert true ((dobro 5) > 0)
139```
140
141### 4. `stable built` (e `stable clean`) — A produción
142```bash
143stable built
144```
145Compila todos os obxectivos nativos en `target/`. E se algún día queres borrar `target/` e comezar limpo: `stable clean`.
146
147---
148
149## 2.5. Como importo un ficheiro desde outro? (`import`)
150
151Sen rutas relativas infernais tipo `../../../lib/cousas.rg`. Se tes un ficheiro `src/main/ridgun/lib/cadeas.rg`, en calquera outro ficheiro escribes arriba de todo:
152
153```ridgun
154import cadeas
155```
156
157E listo: todas as funcións e tipos de `cadeas.rg` están dispoñibles coma se estivesen no teu propio ficheiro. E que pasa se o módulo `A` fai `import cadeas`, o módulo `B` tamén fai `import cadeas`, e o teu `main.rg` importa `A` e `B`? Tranquilo: o cargador de Ridgun lembra que ficheiros canónicos leu xa e **só o inclúe unha vez**.
158
159Agora que tes a caixa de ferramentas controlada, pasemos ao **Capítulo 03** para dominar as funcións, os tipos, os bloques e os trucos con cadeas de texto.