মূল লেখায় যান

The beansc command

beansc হলো Beans-এর compiler আর তার command-line tool। এটাই কোড lex করে, parse করে, check করে, run করে, আর build করে। সাথে package manager, language server আর debug adapter — সবই এর ভেতরে আছে। শুরুর পয়েন্ট হলো compiler/beans/main.b, আর সেটা চালায় compiler/beans/driver.b

usage: beansc <lex|parse|check|mir|run> <file.b>...
beansc build [options] <file.b> [-o out]
beansc bindgen <header.h> -o <bindings.b> [options] [-- clang-options]
beansc pot init <module-name>
beansc pot add <dependency> [ref]
beansc pot add --system <pkg-config-name>
beansc pot remove <dependency>
beansc pot remove --system <pkg-config-name>
beansc pot update --system <pkg-config-name>
beansc pot <tidy|update [dependency]>
beansc upgrade
beansc doctor
beansc lsp-probe <file.b>:<line>:<col>
beansc lsp (language server on stdio)
beansc --version
build options:
--release -O3, NDEBUG
--lto link-time optimization
--target <triple> <supported target names>
--cpu <generic|native|name>
--features <+f,-f,...> enable or disable CPU features
--sysroot <path> target sysroot for a cross link
--cc <path> C driver to use (default clang)
--linker <name> pass -fuse-ld=<name>
--ar <path> static archive tool (default ar)
--header <path> write a C header for library exports
--emit <bin|obj|static|shared|ir>
--runtime <full|minimal|freestanding>
how much runtime; anything a profile
drops is refused at check time
--locked require exact beans.lock entries
--offline forbid dependency network access
কমান্ডকী করে
beansc --versioncompiler, language, আর runtime ABI-এর version ছাপায়।
beansc doctorএই install দিয়ে কী কী build করা যাবে, আর যা যায় না সেটা কীভাবে ঠিক করা যায় — সব বলে দেয়। সবসময় 0 দিয়ে exit করে।
beansc lex <file.b>...token stream-টা ঢেলে দেখায়।
beansc parse <file.b>...parse করে AST ছাপায়।
beansc check <file.b>type-check করে। ঠিক থাকলে <file>: ok, না হলে error। কোনো error হলেই exit 1।
beansc mir <file.b>check-করা, ownership-plan-করা MIR ছাপায়।
beansc llvm <file.b>native build যে LLVM IR ব্যবহার করে সেটা ছাপায়।
beansc run <file.b> [-- args...]আগে check করে, তারপর reference interpreter-এ চালায়।
beansc build [options] <file.b> [-o out]LLVM/Clang দিয়ে native binary বানায়।
beansc target <triple>একটা target-এর layout আর capability-এর তথ্য ছাপায়।
beansc bindgen <header.h> -o <bindings.b> [options] [-- clang-options]Clang দিয়ে Beans-এর C declaration বানিয়ে দেয়।
beansc pot init <module-name>বর্তমান directory-তে beans.pot বানায়; আগে থেকে থাকলে overwrite করে না।
beansc pot add <dependency> [ref]Git dependency যোগ করে beans.lock লেখে।
beansc pot add --system <name>install করা pkg-config C library-র linker row যোগ করে।
beansc pot tidyকোন কোন dependency সত্যিই ব্যবহার হচ্ছে সেটা মিলিয়ে beans.lock লেখে।
beansc pot remove <dependency>Git dependency মুছে beans.lock tidy করে।
beansc pot remove --system <name>C library-র generated linker row মুছে দেয়।
beansc pot update [dependency]lock-করা সব dependency নতুন করে আনে, নাম দিলে শুধু ওই একটা।
beansc pot update --system <name>pkg-config থেকে C library-র link block refresh করে।
beansc upgradeএই Beans install-টাকে সবশেষ release-এ তুলে দেয়।
beansc lspstdio-তে language server চালায়।
beansc debug-adapterstdio-তে debug adapter (DAP) চালায়।

আলাদা আলাদা জায়গার পেজ:

beansc এই environment variable-গুলো মানে:

Variableকী ঠিক করে
BEANS_HOMEInstall-এর root, আর upgrade যে prefix-এ লেখে সেটা।
BEANS_STDLIBStandard library-র root।
BEANS_RUNTIMEC runtime-এর source।
BEANS_WASM_HOSTWebAssembly host-এর source।
BEANS_ENCODINGEncoding bridge-এর source।
BEANS_CCকোন C driver ব্যবহার হবে।
BEANS_WASM_CCWebAssembly-র জন্য C driver।
BEANS_ARStatic archive tool।
BEANS_CPU_FEATURESএকটা allowlist — এটা শুধু detect-করা CPU feature লুকাতে পারে, নতুন কিছু যোগ করতে পারে না।
PATHclang আর linker-এর মতো tool খুঁজে পেতে ব্যবহার হয়।

কোনো formatter নেই (beansc fmt বলে কিছু নেই, আলাদা কোনো formatter tool-ও নেই) আর কোনো beansc test subcommand নেই। দেখুন Exit code আর সমস্যা সমাধান