LDC2(1)
โจ NAME โจ
Bestie, this is LDC2 โ the LLVM D Compiler. Iconic. ๐
๐ซ DESCRIPTION ๐ซ
๐ OVERVIEW ๐
LDC - the LLVM D compiler. No cap, that's the whole vibe.
๐ USAGE ๐
ldc2 [options] files --run
So you run ldc2 with some [options] and some files, and if you tack on --run, it runs the resulting program, passing the remaining arguments to it. Slay. ๐
๐ OPTIONS ๐
General options:
-Dโ Generate documentation. Cute, right? ๐--Dd=<directory>โ Write documentation file to<directory>.--Df=<filename>โ Write documentation file to<filename>.-Hโ Generate'header'file.--HCโ Write C++'header'equivalent to stdout.- Use
-HC=verboseto add comments for ignored declarations (e.g.extern(D)).
- Use
--HCd=<directory>โ Write C++'header'file to<directory>.--HCf=<filename>โ Write C++'header'file to<filename>instead of stdout.--Hd=<directory>โ Write'header'file to<directory>.--Hf=<filename>โ Write'header'file to<filename>.--Hkeep-all-bodiesโ Keep all function bodies in.difiles.-I <directory>โ Look for imports also in<directory>.-J <directory>โ Look for string imports also in<directory>.
Setting the optimization level:
-Oโ Equivalent to-O3.--O0โ No optimizations (default).--O1โ Simple optimizations.--O2โ Good optimizations.--O3โ Aggressive optimizations.--O4โ Equivalent to-O3.--O5โ Equivalent to-O3.--Osโ Like-O2with extra optimizations for size.--Ozโ Like-Osbut reduces code size further.-P <cppflag>โ Pass<cppflag>to C preprocessor.-Xโ Generate JSON file.--Xf=<filename>โ Write JSON file to<filename>.--allinstโ Generate code for all template instantiations.--betterCโ Omit generating some runtime information and helper functions.--boundscheck=<value>โ Array bounds check.=offโ Disabled.=safeonlyโ Enabled for@safefunctions only.=onโ Enabled for all functions.
-cโ Compile only, do not link.--cache=<cache dir>โ Enable compilation cache, using<cache dir>to store cache files.--cache-pruneโ Enable cache pruning.--cache-prune-expiration=<dur>โ Sets the pruning expiration time of cache files to<dur>seconds (default: 1 week). Implies-cache-prune.--cache-prune-interval=<dur>โ Sets the cache pruning interval to<dur>seconds (default: 20 min). Set to0to force pruning. Implies-cache-prune.--cache-prune-maxbytes=<size>โ Sets the maximum cache size to<size>bytes. Implies-cache-prune.--cache-prune-maxpercentage=<perc>โ Sets the cache size limit to<perc>percent of the available space (default: 75%). Implies-cache-prune.--cache-retrieval=<value>โ Set the cache retrieval mechanism (default:copy).=copyโ Make a copy of the cache file.=hardlinkโ Create a hard link to the cache file (recommended).=linkโ Equal to'hardlink'on Windows, but'symlink'on Unix and OS X.=symlinkโ Create a symbolic link to the cache file.
--checkaction=<value>โ Action to take when an assert/boundscheck/final-switch fails.=Dโ Usual D behavior of throwing anAssertError.=Cโ Call the C runtime library assert failure function.=haltโ Halt the program execution (very lightweight).=contextโ Use D assert with context information (when available).
--conf=<filename>โ Use configuration file<filename>.--covโ Compile-in code coverage analysis and.lstfile generation.- Use
-cov=<n>forn% minimum required coverage. - Use
-cov=ctfeto include code executed during CTFE.
- Use
--cov-increment=<value>โ Set the type of coverage line count increment instruction.=defaultโ Use the default (atomic).=atomicโ Atomic increment.=non-atomicโ Non-atomic increment (not thread safe).=booleanโ Don't read, just set counter to1.
--cs-profile-generateโ Perform context sensitive PGO instrumentation.--cs-profile-path=<string>โ Context sensitive profile file path.--d-debug[=<level/idents>]โ Compile in debug code>= <level>or identified by<idents>.--d-version=<level/idents>โ Compile in version code>= <level>or identified by<idents>.
Allow deprecated language features and symbols:
-dโ Silently allow deprecated features and symbols.--dwโ Issue a message when deprecated features or symbols are used (default).--deโ Issue an error when deprecated features or symbols are used (halt compilation).--deps[=<filename>]โ Write module dependencies to<filename>(only imports).'-deps'alone prints module dependencies (imports/file/version/debug/lib).--enable-asserts=<value>โ (*) Enable assertions.--enable-color=<value>โ (*) Force colored console output.--enable-contracts=<value>โ (*) Enable function pre- and post-conditions.--disable-d-passesโ Disable all D-specific passes.--disable-gc2stackโ Disable promotion of GC allocations to stack memory.--enable-inlining=<value>โ (*) Enable function inlining (default in-O2and higher).--enable-invariants=<value>โ (*) Enable invariants.--disable-loop-unrollingโ Disable loop unrolling in all relevant passes.--disable-loop-vectorizationโ Disable the loop vectorization pass.--enable-preconditions=<value>โ (*) Enable function preconditions.--disable-red-zoneโ Do not emit code that uses the red zone.--disable-simplify-drtcallsโ Disable simplification of druntime calls.--disable-simplify-libcallsโ Disable simplification of well-known C runtime calls.--dllimport=<value>โ Windows only: whichextern(D)global variables to dllimport implicitly if not defined in a root module.=noneโ None (default with-link-defaultlib-shared=false).=externalOnlyโ Only symbols from modules imported from an-extIimport root.=defaultLibsOnlyโ Only druntime/Phobos symbols and symbols from modules imported from an-extIimport root (default with-link-defaultlib-sharedand-fvisibility=hidden).=allโ All (default with-link-defaultlib-sharedand-fvisibility=public).
--dwarf-version=<int>โ Dwarf version.--edition=<NNNN[filename]>โ Set language edition to edition yearNNNN, optionally only applying tofilename.--enable-postconditions=<value>โ (*) Enable function postconditions.--enable-switch-errors=<value>โ (*) Enable runtime errors for unhandled switch cases.--extI=<directory>โ Look also in<directory>for imports that are external to the currently compiling binary. This affects the-dllimportbehavior for data symbols from these binary-external modules.--extern-std=<value>โ C++ standard for name mangling compatibility.=c++98โ Sets__traits(getTargetInfo, "cppStd")to199711.=c++11โ Sets__traits(getTargetInfo, "cppStd")to201103(default).=c++14โ Sets__traits(getTargetInfo, "cppStd")to201402.=c++17โ Sets__traits(getTargetInfo, "cppStd")to201703.=c++20โ Sets__traits(getTargetInfo, "cppStd")to202002.=c++23โ Sets__traits(getTargetInfo, "cppStd")to202302.
--fcf-protectionโ Instrument control-flow architecture protection.--fcf-protection=<value>โ Instrument control-flow architecture protection.- Values:
=none,=branch,=return,=full.
- Values:
--fdebug-prefix-map=<<old>=<new>>โ Prefix map for filenames in DWARF debuginfo.--fdmd-trace-functionsโ DMD-style runtime performance profiling of generated code.--ffast-mathโ Set@fastmathfor all functions.--ffat-lto-objectsโ Include both IR and object code in object file output; only effective when compiling with-flto.--finstrument-functionsโ Instrument function entry and exit with GCC-compatible profiling calls.--float-abi=<value>โ ABI/operations to use for floating-point types:=defaultโ Target default floating-point ABI.=softโ Software floating-point ABI and operations.=softfpโ Soft-float ABI, but hardware floating-point instructions.=hardโ Hardware floating-point ABI and instructions.
--flto=<value>โ Set LTO mode, requires linker support.=fullโ Merges all input into a single module.=thinโ Parallel importing and codegen (faster than'full').
--flto-binary=<file>โ tell the linker which LTO plugin library to load, bestie. So<file>is something likeLLVMgold.soon Unixes orlibLTO.dylibon Darwin ๐ง--fno-delete-null-pointer-checksโ okay so this makes dereferencing a null pointer count as defined behavior while optimizing (instead of undefined behavior, thank u very much). Why does that matter? Because otherwise the optimizer is out here going "well if that pointer got dereferenced it couldn't have been null," and then it optimizes away branches based on that assumption. This flag says not today ๐--fno-discard-value-namesโ keeps value names in LLVM IR instead of yeeting them into the void.--fno-exceptionsโ turns off generation of exception stack unwinding code, on the assumption that no Exceptions will be thrown. So likeโฆ don't throw ๐--fno-moduleinfoโ stops ModuleInfos from being generated.--fno-pltโ don't make function calls through the PLT.--fno-rttiโ stops TypeInfos from being generated.--fp-contract=<value>โ lets the compiler get aggressive about forming fused FP ops ๐ฅ=fastโ fuse FP ops whenever it's profitable=onโ only fuse the 'blessed' FP ops.=offโ only fuse FP ops when the result won't be affected.
--fprofile-generate[=<filename>]โ generates instrumented code that collects a runtime profile intodefault.profraw(which gets overriden by=<filename>or by theLLVM_PROFILE_FILEenv var) ๐--fprofile-instr-generate[=<filename>]โ same vibe: generates instrumented code to collect a runtime profile intodefault.profraw, overriden by=<filename>or theLLVM_PROFILE_FILEenv var.--fprofile-instr-use=<filename>โ uses instrumentation data for profile-guided optimization.--fprofile-sample-use=<filename>โ uses instrumentation data for sample-based profile guided optimizations.--fprofile-use=<filename>โ uses instrumentation data for profile-guided optimization.--frame-pointer=<value>โ picks your frame pointer elimination optimization, choose your fighter:=allโ disable frame pointer elimination=non-leafโ disable frame pointer elimination for non-leaf frames=reservedโ enable frame pointer elimination, but reserve the frame pointer register=noneโ enable frame pointer elimination
--fsanitize=<checks>โ turns on runtime checks for various forms of undefined or suspicious behavior โจ--fsanitize-address-use-after-return=<value>โ picks how AddressSanitizer detects stack use-after-return (UAR):never|runtime(default) |always=neverโ completely disables detection of UAR errors (and reduces code size).=runtimeโ adds the code for detection, but it can be disabled via the runtime environment (ASAN_OPTIONS=detect_stack_use_after_return=0). Requires druntime support.=alwaysโ enables detection of UAR errors in all cases. (reduces code size, but not as much asnever). Requires druntime support.
--fsanitize-blacklist=<file>โ adds<file>to the blacklist files for the sanitizers.--fsanitize-coverage=<type>โ says what type of coverage instrumentation you want for-fsanitize.--fsanitize-memory-track-origins=<int>โ enables origins tracking in MemorySanitizer (0=disabled, default).--fsanitize-recover=<name>โ enables recovery for the specified sanitizers ('all'= enable for all supported sanitizers).--fsave-optimization-record[=<filename>]โ generates a YAML optimization record file of all the optimizations LLVM performed ๐--fsplit-stackโ uses a segmented stack (see Clang documentation).--fthread-model=<value>โ the thread model:=global-dynamicโ Global dynamic TLS model (default)=local-dynamicโ Local dynamic TLS model=initial-execโ Initial exec TLS model=local-execโ Local exec TLS model
--ftime-traceโ turns on the time profiler. It generates a JSON file based on the output filename (also see--ftime-trace-file). โฑ๏ธ--ftime-trace-file=<filename>โ says where the time trace file should go.--ftime-trace-granularity=<uint>โ the minimum time granularity (in microseconds) traced by the time profiler.--fvisibility=<value>โ the default visibility of symbols:=defaultโ hidden for Windows targets without-shared, otherwise public=hiddenโ only export symbols marked with'export'=publicโ export all symbols
--fwarn-stack-size=<threshold>โ warns you when the stack size is bigger than the given number.--fxray-instruction-threshold=<value>โ sets the minimum function size to instrument with XRay.--fxray-instrumentโ generates XRay instrumentation sleds on function entry and exit ๐ท--gdwarfโ emits DWARF debuginfo (instead of CodeView) for MSVC targets.
๐ Generating debug information ๐
-gโ adds symbolic debug info--gcโ adds symbolic debug info, and optimizes for non-D debuggers--gline-tables-onlyโ adds line tables only
--hash-threshold=<uint>โ hashes symbol names longer than this threshold (experimental, bestie ๐).-i[=<pattern>]โ includes imported modules in the compilation.--identifiers=<value>โ picks the non-ASCII tables used for D identifiers:=c99โ C99=c11โ C11=UAX31โ UAX31=allโ All, the least restrictive set, which comes with all the others (default)
--identifiers-importc=<value>โ picks the non-ASCII tables used for ImportC identifiers:=c99โ C99=c11โ C11 (default)=UAX31โ UAX31=allโ All, the least restrictive set, which comes with all the others
--ignoreโ ignores unsupported pragmas (this one's the default, so it's just quietly doing its thing ๐ธ).--libโ creates a static library.--linkonce-templatesโ uses discardablelinkonce_odrlinkage for template symbols, and lazily & recursively defines all referenced instantiated symbols in each object file.--linkonce-templates-aggressiveโ the experimental, more aggressive variant of the above ๐--lowmemโ enables the garbage collector for the LDC front-end. This brings the compiler's memory requirements down but makes compile times go up ๐--lto-aix-system-assembler=<path>โ the path to a system assembler, and it's only picked up on AIX.--lto-pass-remarks-filter=<regex>โ only records optimization remarks from passes whose names match the given regular expression.--lto-pass-remarks-format=<format>โ the format used for serializing remarks (default:YAML).--lto-pass-remarks-output=<filename>โ the output filename for pass remarks.--m32โ 32 bit target--m64โ 64 bit target--mabi=<string>โ the name of the ABI to be targeted from the backend.--mainโ adds a defaultmain()if there isn't one already (e.g. for unittesting, cute โจ).--makedeps[=<filename>]โ writes module dependencies in Makefile compatible format to<filename>/stdout (only imports).--march=<string>โ the architecture to generate code for (see--version).--mattr=<a1,+a2,-a3,...>โ target specific attributes (-mattr=helpfor details).--mcpu=<cpu-name>โ targets a specific cpu type (-mcpu=helpfor details).--mdcompute-file-prefix=<prefix>โ a prefix to prepend to the generated kernel files.--mdcompute-targets=<targets>โ generates code for the specified DCompute target list. Use'ocl-xy0'for OpenCL x.y, and'cuda-xy0'for CUDA CC x.y.--mixin=<filename>โ expands and saves mixins to<filename>.--mtriple=<string>โ overrides the target triple.--mv=<<package.module>=<filespec>>โ uses<filespec>as the source file for<package.module>.--noasmโ disallows use of the inline assembler.--nogcโ doesn't allow code that generates implicit garbage collector calls.--o-โ does not write an object file.--od=<directory>โ writes object files to<directory>.--of=<filename>โ uses<filename>as the output file name.--opโ preserves the source path for output files.--oqโ writes object files with fully qualified names.--output-bcโ write LLVM bitcode--output-llโ write LLVM IR--output-mlirโ write MLIR--output-oโ write native object--output-sโ write native assembly--plugin=<dynamic_library.so,lib2.so>โ passes plugins to load.--preview=<name>โ enables an upcoming language change identified by<name>, and honestly just use?to get the list ๐ฎ--releaseโ compiles a release version, defaulting to disabled asserts/contracts/invariants, and bounds checks in@safefunctions only.--relocation-model=<value>โ chooses the relocation model:=staticโ Non-relocatable code=picโ Fully relocatable, position independent code=dynamic-no-picโ Relocatable external references, non-relocatable code=ropiโ Code and read-only data relocatable, accessed PC-relative=rwpiโ Read-write data relocatable, accessed relative to static base=ropi-rwpiโ Combination ofropiandrwpi
--revert=<name>โ undoes a language change, and<name>tells it which one you mean. don't know the names? pass?and it'll list them for you. ๐--run <string>...โ runs the program you just built, passing whatever else you tacked on along to it. so the leftover args become the program's args, no cap.--sharedโ creates a shared library (i.e. a DLL). ๐--singleobjโ creates only a single output object file. that's the whole vibe, one object, periodt.--template-depth=<uint>โ sets the maximum number of nested template instantiations. keep it cute, don't recurse forever.--threads=<int>โ literally no description in the original. it's just standing there. mysterious main character energy ๐--transition=<name>โ helps you out with a language change identified by<name>. again, pass?for the list. it's like--revert's more supportive cousin.--unittestโ compiles in unit tests. ๐งช--use-undefโ usesundefwhen generating programs.-vโ verbose. tell me everything bestie ๐ฃ๏ธ--v-cgโ verbose codegen.--vcolumnsโ prints character (column) numbers in diagnostics.--verror-style=<value>โ sets the style for the file/line number annotations on compiler messages. pick your fighter:=digitalmarsโ'file(line[,column]): message'โ this is the default.=gnuโ'file:line[:column]: message', conforming to the GNU standard used by gcc and clang.=sarifโ generates JSON output conforming to the SARIF (Static Analysis Results Interchange Format) standard, useful for integration with tools like GitHub and other SARIF readers.
--verror-supplements=<uint>โ limits the number of supplemental messages for each error (0means unlimited โ go feral).--verrors=<uint>โ limits the number of error/deprecation messages (0means unlimited).--verrors-contextโ shows error messages with the context of the erroring source line (including caret). the caret is lowkey iconic.--verrors-specโ shows errors from speculative compiles such as__traits(compiles,...).--vgcโ lists all gc allocations, including hidden ones. ๐ nothing escapes.--vtemplatesโ lists statistics on template instantiations. want more? use-vtemplates=list-instancesto additionally show all instantiation contexts for each template.--vvโ prints the front-end/glue code debug log.
Warnings: โ ๏ธ
-wโ enables warnings as errors, meaning compilation will halt. it's giving stern.--wiโ enables warnings as messages, so compilation will continue. soft launch energy.
Generic Options: ๐ ๏ธ
--helpโ displays available options (--help-hiddenfor more).--help-listโ displays a list of available options (--help-list-hiddenfor more).--versionโ displays the version of this program.
Linking options: ๐
-L <linkerflag>โ passes<linkerflag>to the linker.--Xcc=<ccflag>โ passes<ccflag>to GCC/Clang for linking/preprocessing.--defaultlib=<lib1,lib2,...>โ the default libraries to link with (overrides previous). note: it overrides, it doesn't append, bestie.--disable-linker-strip-deadโ do not try to remove unused symbols during linking.--gcc=<gcc|clang|...>โ the C compiler to use for linking (and external assembling). defaults to theCCenvironment variable if it's set, otherwise tocc.--link-defaultlib-debugโ links with debug versions of the default libraries.--link-defaultlib-sharedโ links with shared versions of the default libraries. defaults to true when generating a shared library (-shared).--linker=<lld-link|lld|gold|bfd|...>โ sets the linker to use. when explicitly set to''(nothing), it prevents LDC from passing-fuse-ldtocc.--mscrtlib=<libcmt[d]|msvcrt[d]>โ the MS C runtime library to link with.--platformlib=<lib1,lib2,...>โ platform libraries to link with (overrides previous).--staticโ creates a statically linked binary, including all system dependencies. absolute unit of a binary
Polly Options: Configure the polly loop optimizer ๐ฆ
--pollyโ enables the polly optimizer (works with-O1,-O2or-O3).--polly-2nd-level-tilingโ enables a 2nd level loop of loop tiling. loops on loops, we love to see it.--polly-ast-print-accessesโ prints memory access functions.--polly-context=<isl parameter set>โ provides additional constraints on the context parameters.--polly-dce-precise-steps=<int>โ the number of precise steps between two approximating iterations. (a value of-1schedules another approximation stage before the actual dead code elimination.) ๐ตโ๐ซ--polly-delicm-max-ops=<int>โ the maximum number of isl operations to invest for lifetime analysis;0= no limit.--polly-detect-full-functionsโ allows the detection of full functions.--polly-enable-simplifyโ simplifies SCoP after optimizations.--polly-ignore-func=<string>โ ignores functions that match a regex. multiple regexes can be comma separated. scop detection will ignore all functions that match ANY of the regexes provided.--polly-isl-arg=<argument>โ option passed to ISL.--polly-matmul-optโ performs optimizations of matrix multiplications based on pattern matching.--polly-on-isl-error-abortโ abort if an isl error is encountered. no chill mode.--polly-only-func=<string>โ only runs on functions that match a regex. multiple regexes can be comma separated. scop detection will run on all functions that match ANY of the regexes provided.--polly-only-region=<identifier>โ only runs on certain regions (the provided identifier must appear in the name of the region's entry block).--polly-only-scop-detectionโ only runs scop detection, but no other optimizations.--polly-optimized-scopsโ Polly โ dumps the polyhedral description of Scops optimized with the isl scheduling optimizer, and the set of post-scheduling transformations is applied on the schedule tree.--polly-parallelโ generates thread parallel code (isl codegen only).--polly-parallel-forceโ forces generation of thread parallel code, ignoring any cost model.--polly-pattern-matching-based-optsโ performs optimizations based on pattern matching.--polly-postoptsโ applies post-rescheduling optimizations such as tiling (requires-polly-reschedule).--polly-pragma-based-optsโ applies user-directed transformation from metadata.--polly-pragma-ignore-depcheckโ skips the dependency check for pragma-based transformations.--polly-process-unprofitableโ processes scops that are unlikely to benefit from Polly optimizations.--polly-register-tilingโ enables register tiling.--polly-reportโ prints information about the activities of Polly. gossip, but for the optimizer.--polly-rescheduleโ optimizes SCoPs using ISL.--polly-showโ highlights the code regions that will be optimized in a (CFG BBs and LLVM-IR instructions).--polly-show-onlyโ highlights the code regions that will be optimized in a (CFG only BBs).--polly-stmt-granularity=<value>โ the algorithm to use for splitting basic blocks into multiple statements:=bbโ one statement per basic block.=scalar-indepโ scalar independence heuristic.=storeโ store-level granularity.
--polly-tc-optโ performs optimizations of tensor contractions based on pattern matching.--polly-tilingโ enables loop tiling.--polly-vectorizer=<value>โ selects the vectorization strategy:=noneโ no Vectorization.=stripmineโ strip-mine outer loops for the loop-vectorizer to trigger.
okay a couple of housekeeping notes before we move on ๐
-d-debug can also be specified without options, in which case it enables all debug checks (i.e. asserts, boundschecks, contracts and invariants) as well as acting as -d-debug=1.
Boolean options can take an optional value, e.g., -link-defaultlib-shared=<true,false>. Boolean options marked with (*) also have a -disable-FOO variant with inverted meaning.
so, the whole thing is:
based on DMD v2.112.1 and LLVM 19.1.7 built with LDC - the LLVM D compiler (1.42.0) Default target:x86_64-pc-linux-gnuHost CPU:skylakehttps://dlang.org-https://wiki.dlang.org/LDC
Registered Targets: ๐ฏ
aarch64โ AArch64 (little endian)aarch64_32โ AArch64 (little endian ILP32)aarch64_beโ AArch64 (big endian)amdgcnโ AMD GCN GPUsarmโ ARMarm64โ ARM64 (little endian)arm64_32โ ARM64 (little endian ILP32)armebโ ARM (big endian)avrโ Atmel AVR Microcontrollerbpfโ BPF (host endian)bpfebโ BPF (big endian)bpfelโ BPF (little endian)hexagonโ Hexagonlanaiโ Lanai
โฆand the list keeps going, bestie, because there are so many more targets ๐ buckle up:
loongarch32โ 32-bit LoongArchloongarch64โ 64-bit LoongArchm68kโ Motorola 68000 familymipsโ MIPS (32-bit big endian)mips64โ MIPS (64-bit big endian)mips64elโ MIPS (64-bit little endian)mipselโ MIPS (32-bit little endian)msp430โ MSP430 โ [experimental] so don't come for me if it's weirdnvptxโ NVIDIA PTX 32-bitnvptx64โ NVIDIA PTX 64-bitppc32โ PowerPC 32ppc32leโ PowerPC 32 LEppc64โ PowerPC 64ppc64leโ PowerPC 64 LEr600โ AMD GPUs HD2XXX-HD6XXXriscv32โ 32-bit RISC-Vriscv64โ 64-bit RISC-Vsparcโ Sparcsparcelโ Sparc LEsparcv9โ Sparc V9systemzโ SystemZthumbโ Thumbthumbebโ Thumb (big endian)veโ VEwasm32โ WebAssembly 32-bitwasm64โ WebAssembly 64-bitx86โ 32-bit X86: Pentium-Pro and abovex86-64โ 64-bit X86: EM64T and AMD64xcoreโ XCorextensaโ Xtensa 32
okay that's it, that's the page, we made it to the end together ๐ซถ no cap, there is literally nothing else hiding down here. this edition is LDC 1.42.0, dated June 2026 โ go compile something iconic with it, you absolute legend ๐โจ
๐ฆ where this page comes from
- ubuntu stonking: ldc 1:1.42.0-2 ยท BSD-3-Clause AND BSL-1.0 AND LLVM
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms