Marejeleo ya CLI ya wavec
Hati hii inaelezea kwa kina utekelezaji wa CLI kulingana na kiwango cha sasa cha utekelezaji wa wa Wave (wavec).
Misingi muhimu:
wavecni kikokotoo.- Ufungaji/ufumbuzi wa kifurushi (faili la kufuli, usajili, upakuaji) sio jukumu la
wavec. - Uhuru wa nje unapitishwa kwa
waveckama maelezo ya CLI ya wazi.
1. Umbizo la msingi
wavec [global-options] <command> [command-options]
Mf:
wavec -O2 run main.wave
wavec build app.wave --link ssl -L ./native/lib
wavec run app.wave --dep-root .vex/dep
2. Kanuni za uchanganuzi wa amri (Mruhimu)
wavec kwanza huskani chagua-la-dunia kwenye maelezo yote, kisha hutafakari <command> kwa maelezo mengine.
Yaani chaguo-la-dunia hayana nafasi maalum.
wavec -O3 run main.wave
wavec run main.wave -O3
wavec run -O3 main.wave
Nambari zote tatu zilizotajwa hapo juu ni sahihi.
Unapotumia --, utapunguza uchangaji wa chaguo-la-dunia baada yake na kuhamisha kwenye eneo la amri.
wavec -- run main.wave
3. Amri
3.1 run <file>
Inakusanya na kuendesha faili ya Wave.
wavec run hello.wave
Kufanya kazi:
- Uchanganuzi wa chanzo + upanuzi wa kuingiza
- Uundaji wa LLVM IR
- Kiungo cha binary asilia (
target/<file_stem>) - Endesha
Tabia:
wavecinapeleka msimbo wa kumalizia wa programu iliyotekelezwa.
3.2 build <file>
Huunda faili ya kutekeleza (exe).
wavec build app.wave
Failia zinazotoka:
target/<file_stem>
3.3 Machaguo ya build (-o, -c)
Amri ya build inaweza kudhibiti jina la faili na muundo wa toleo kama chaguzi.
wavec build app.wave -o ./bin/app
wavec build app.wave -c
wavec build app.wave -c -o ./build/app.o
-o <file>: Taja jina la faili la pato.- Kimya chaguo(
-chaipo): taja njia ya pato la faili ya kutekeleza - Pamoja na
-c: taja njia ya pato la faili la kitu
- Kimya chaguo(
-c: Ruka kiungo na uzalishe faili la kitu pekee.- Wakati wa kutumia
-c, toa njia ya kitu kwa stdout.
Utendaji wa kawaida:
wavec build app.wave->target/appwavec build app.wave -c->target/app.o(njia ya kutokea)
Mfano wa kitu cha kernel cha kujitegemea:
wavec --llvm \
--target=x86_64-unknown-none-elf \
build kernel.wave --emit=obj --freestanding -o kernel.o
Unaweza pia kutumia aarch64-unknown-none-elf, riscv64-unknown-none-elf kwa njia ile ile.
3.4 install std, update std
Amri ya kusakinisha/kusasaisha maktaba ya kawaida.
wavec install std
wavec update std
3.5 --help, --version
wavec --help
wavec --version
4. Chaguzi za Ulimwengu
4.1 Uboreshaji
Thamani za kuruhusiwa:
-O0-O1-O2-O3-Os-Oz-Ofast
Mf.:
wavec -O3 run main.wave
4.2 Toa Debug
wavec --debug-wave=tokens,ast,ir run main.wave
Vitu vya kuruhusiwa:
tokensastirmchexall
4.3 Chaguzi za Kiungo
wavec build app.wave --link ssl --link crypto -L ./native/lib
--link=<lib>au--link <lib>-L<path>au-L <path>
wavec inapeleka kibinafsi kwa mchakato wa kiungo katika umbo la -l<lib>, -L<path>.
4.4 Chaguo la utegemezi wa nje (Muhimu)
Ni chaguo la kutafsiri import ya nje (pkg::...).
--dep-root <dir>
Huongeza chaguo la msimbo mzizi wa kifurushi.
wavec run app.wave --dep-root .vex/dep
Wakati unapochunguza kifurushi math:
- Chunguza
.vex/dep/math
Inaweza kuainishwa mara nyingi:
wavec run app.wave --dep-root .vex/dep --dep-root ./vendor/dep
--dep <name>=<path>
Inafunga jina la kifurushi kwa njia mahususi.
wavec run app.wave --dep math=.vex/dep/math
Kanuni:
- Muundo wa
name:[A-Za-z_][A-Za-z0-9_]* --deplazima iwe kwa umbo laname=path- Kukitaja jina la kifurushi mara kwa mara huzalisha kosa.
4.5 Chaguo la usaidizi wa nyuma (--llvm, --whale)
Chaguo la udhibiti wa usaidizi wa nyuma linatafsiriwa baada ya kupita --llvm pekee.
wavec --llvm --target=x86_64-unknown-linux-gnu build app.wave -c
Vitu vilivyoandaliwa (muhtasari):
--target,--cpu,--features,--abi--sysroot-C linker=<path>-C link-arg=<arg>(Inaweza kurudiwa)-C link-sysroot=<path>-C no-default-libs
Lengo kuu kwa msingi wa wavec print target-list ya sasa:
x86_64-unknown-linux-gnuaarch64-unknown-linux-gnux86_64-apple-darwinaarch64-apple-darwinx86_64-unknown-none-elfaarch64-unknown-none-elfriscv64-unknown-none-elf
--whale kwa sasa ni bendera ya watekaji iliyohifadhiwa, na usaidizi wa nyuma halisi bado haujatekelezwa (TODO).
5. Kanuni za tafsiri ya Import
Import ya Wave imegawanyika kwenye vitendo vitatu vifuatavyo.
- Import ya ndani
- Import ya std
- Import ya kifurushi cha nje
5.1 Ndani
import("foo");
import("path/to/mod.wave");
Inatafuta <path>.wave kwenye saraka ya faili ya msingi.
5.2 std
import("std::io::format");
Inatumia njia ya ~/.wave/lib/wave/std/....
5.3 Pakiti za Nje
import("math::add");
import("json::parser::core");
Fomati:
- Angalau sehemu kuu mbili za
package::modulezinahitajika
Mpangilio wa Njia za Pakiti:
- Piga ramani
--dep name=path - Tafuta
--dep-rootkatika kila<root>/<package>
Ikiwa pakiti sawa itapatikana katika mizizi kotekote kwa wakati mmoja:
- Usichague kwa umoja, uzingatia kosa la mfuatano
- Inapaswa kuwekwa na
--dep name=path
Mpangilio wa Utafutaji wa Njia ya Moduli:
<package_root>/<module_path>.wave<package_root>/src/<module_path>.wave
Mfano:
import("math::core::vec");
Utafutaji:
<package_root>/core/vec.wave<package_root>/src/core/vec.wave
6. Mifano ya Utekelezaji wa Ingizo la Nje
6.1 Mizizi ya Dep Moja Tu
Saraka:
.vex/dep/
math/
src/
add.wave
main.wave
Msimbo:
import("math::add");
Utekelezaji:
wavec run main.wave --dep-root .vex/dep
6.2 Kushindwa kwa Mfuatano wa Mfuatano
wavec run main.wave \
--dep-root .vex/dep \
--dep-root ./vendor/dep
Ikiwa math ipo kwa pande zote mbili, kuna kosa. Inapaswa kuwekwa kama ifuatavyo.
wavec run main.wave \
--dep-root .vex/dep \
--dep-root ./vendor/dep \
--dep math=./vendor/dep/math
7. Uchambuzi wa Jukumu la Vex
Muundo wa Ruhusa:
wavec: hariri/kufunga/utekelezaji + ufafanuzi uliotajwavex: Piga simuwavec ... --dep-root ... --dep ...baada ya kusakinisha/kudhibiti vitegemezi.
Mfano:
# Kwa ndani, hasira hufanya
wavec run main.wave --dep-root .vex/dep --dep math=.vex/dep/math
Mfuatano huu unahamisha mhariri kwa urahisi na kudumisha moja kwa moja usimamizi wa pakiti.
8. Marejeo ya Haraka
wavec run main.wave
wavec build app.wave
wavec build app.wave -o ./bin/app
wavec build app.wave -c
wavec build app.wave -c -o ./build/app.o
wavec run main.wave --debug-wave=tokens,ast
wavec build app.wave --link ssl -L ./native/lib
wavec run main.wave --dep-root .vex/dep
wavec run main.wave --dep math=.vex/dep/math
wavec --llvm --target=x86_64-unknown-linux-gnu build app.wave -c
wavec --whale build app.wave -c # TODO: reserved, not implemented
