9 Mar 2026
-new-generic-solver) (#26280)${expr} (#26494)foo()? == foo where foo returns !string (fix #26383) (#26403)@VCURRENTHASH for V build/bootstrapped outside of a Git repository (fix #26407) (#26426)fn f(x u8) {} f(999) (fix #26584) (fix #26585) (#26586)[3]!int{} (fix #26244) (#26249)[T] as fn return type (#26530)pub: not being detected in structs in -vls-mode (#26581)-cc gcc -prod to avoid the need for the
-cflags -fno-inline-small-functions workaround with gcc > 12.0 (fix #26512) (#26552)*?, +?, ?? (fix #26579) (#26582)strict: true mode for x.json2.decode(), that rejects string-to-number type
casting during decoding (fix #26082) (#26220)io.string_reader module (not used in vlib, with confusing and under
tested/documented API - see #25713 ) (#26274)draw_rounded_rect_filled function (#26390)@[json: name] attr support for enum values (fix #26437) (#26441)@[direct_array_access] (#26507)import regex.pcre (#26545)cipher.AEAD (#26632)camel_to_snake underscore placement in uppercase runs (#26634)for x in start .. end { support (#26248)-b wasm before the checker stage (#26281)for in strings and FixedArrays (#26290).wasm.v, and platform independent .v files (#26386)$veb.html() too in the compiler error messages, as a known comptime function (#26605)-new-transformer (#26341)-assert backtraces after e317c63+= overloading for aliases, regression after 29e60da #23967 (fix #26416) (#26423)./v test vlib/toml after 38ac4e6 (#26485)-o short flag conflict that broke hot reload (fix #26221) (#26277)// inside string literals (fix #25603) (#26240)v missdoc @vlibv questv install --local guiv check-md . (#26623)-subsystem windows executable (#26572)strings.lorem module; use it in the Markov chain text generator
example (#26387)v run examples/2048/ on macos (regressed after 5d6de17) (#26705)31 Dec 2025
if is shared support (fix #25600) (#25602)defer{} scoped by default, use defer(fn){} to get the old behavior #25639) (#25665)COMPTIME, that runs after the checker (CHECK), and before the
transformer (TRANSFORM), to simplify the work that later stages do #26068 (#26161)for in loops with pointer values (fix #25520) (#25536)or {} inside loop when using c <-val (fix #24550) (#25435)defer(fn) inside function-scope and lock stmts (#25681)defer is function-scoped (#25693)all, any, count,
filter, map, sort and sorted (#25759)v -W test vlib/builtin job on the
CIv new --web abcd after feedback from https://youtu.be/IuE6Bo1klK0?t=555$for eval body statements at least once to set types and avoid markused issues later
(fix #26058) (#26063)_ being used as both import x as _ and fn f(_ int) { (fix (#26219) #26230@[deprecated_after] used without a corresponding @[deprecated] attribute (#25712)|mut x, y|expr (fix #25734) (#25735)a, b and it as var names, when using the builtin array methods (fix #25729)
(#25755)-d trace_parse to ease diagnosing problems related to the order of parsing of .v files
in moduleschan used as a fn parameter type (fix #25818) (#25854)type MyBuilder = strings.Builder work (part 1); add mod fields to
ast.SumTypeDecl and ast.AliasTypeDecl (#25943)if and match constructs
(#25674)v -d trace_launch_tool self.vsh mode doing an implicit import os, now only for .vsh file itself (fix
issue spotted in #25736) (#25745)-file-list support (implement feature #25707) (#25749)-g and -show-c-outputv download for downloading the prebuilt photonwrapper shared library (#25849)msvc: failed to build a thirdparty object,
not just the failed commandfailed to build a thirdparty object message for msvc-new-transformer (#26009)expand_simple_interpolation (#26135)for x < y { body (#26153).debug.obj thirdparty files when -g is
passed, to prevent linking issues (#26215)@[noinline] on os.create/1 to workaround a -cc gcc -prod panic (fix #25549)u8(x).repeat(y) (fix regression after #22100) (#25625)v -experimental program_using_gg.vrune and char types too (#25635)defer(fn) { syntax where appropriate (part 2 of #25639) (#25653)@[direct_array_access] to hot functions (#25750)'1.23e-308'.f64() (fix #25751) (#25752)import math (just for int_max), to improve compilation time and complexity
for code that uses sha3-d no_getpid and -d no_gettid for systems that lack proper process management
APIs== with eq_epsilon() in equals() (#25873)v -new-transformer vlib/strconv/atoi_test.v (#26021)\r occurence in multi-line """ strings (\r\n is still allowed) (#26029)TODOs for fixed issue #9507 (#26037)jq normalization (#26092)key/* exceptions (#26125)x := s.index(sub) or { -1 } pattern (#26123)array/* exception (#26138)key/duplicate-keys-06.toml (#26140)true and false as keys when parsing root table (#26144)v vet -W vlib/flag/ (fix remaining doc comments)push_http_header (#26155)table/* (#26189); is used (fix #25544) (#25561)veb.Result (fix #25970) (#25973)Result type with column names (#25737)mut db := sqlite.connect_full(":memory:", [.readwrite, .create, .fullmutex], "")! defaulting to
unix/win32 depending on the platformv check-md vlib/db/pg/README.md-new-transformer dynamic array (#25817)$if trace_native_todos ? { to reduce noise in v test-all-no-closures option to detect closure usage earlier (for emscripten or for less well
supported platforms) (#25565)fn (d Struct) a[T]() T { return d } when T is a sumtype (#25644)defer stmts with if exprs and or blocks that return a value (#25651)defer generation within comptime $if/$match/$for (#25677)ast.ComptimeSelector in fixed array checks (fix #25767) (#25777)$for, handle in dumpexpr (fix#25781) (#25784)-d trace_check and -d trace_cgen to help diagnose checker and cgen ordering issues-d trace_cgen_fn_decl and -d trace_cgen_gen_fn_decl too-d trace_cgen_fn_decl and -d trace_cgen_gen_fn_declstmts_with_tmp_var (#25915)$for method in Type.methods { (#25976)@[heap] structs with large fixed arrays (fix #22690) (#26183)v doc with VJOBS=1 on the CI, to make remote diagnosing of failures easiersw := time.new_stopwatch() callv test . toov test cmd/tools/vdoc step too, to ease diagnosing remote CI failuresv -silent test .timeout-minutes: 15 to timeout-minutes: 20 to reduce false positives due to
network timeouts (mostly for the Termux job)v help check-md when v check-md . failssanitize-address-clang-without-gc that passes -gc none through VFLAGS (#25780)VTEST_SHOW_LONGEST_BY_RUNTIME=5 \
VTEST_SHOW_LONGEST_BY_COMPTIME=5 \
VTEST_SHOW_LONGEST_BY_TOTALTIME=5 \
v test .
v test-all output to ease visual comparisons in separate
shells, without scrolling-q descriptionv search failures easier to diagnose (on the CI)v download -o some/folder/local.toml TOML_URL, in addition to --target-folder--sha3-256 support for checksumming the content that v download savesvtest build: tags to eliminate the need for the skip_fsanitize_too_slow list in
vtest-self.vIf the code is in a folder with multiple .v files for temp V REPL
files, to improve messages for 'asdas'.starts_wiz('xyz')-new-transformer task to v test-all. Remove -skip-unused flags (it is the default
for ~1 year).v -W -silent test-self vlib (especially on CIs); always
show compilation errors for failuresVTEST_KEEP_SESSION=1 ./v test vlib/mathis_sqlite3_present check more robust (work with the system packaged sqlite library
again too)macos-14 instead of macos-13 (the older runner is being deprecated) (#25670)v run ci/linux_ci.vsh v_self_compilation_usecache_clangsqlite module.-std=c99, instead of -std=gnu99 to avoid name colisions with C
linux macros defined by gcc/clang (#25848)gcc as the name of the compiler instead of egcc on OpenBSDv -W -silent test-self vlib on linux, so deprecations/warnings introduced in PRs, can
fail (and be fixed) earlier (#25955)-d max_suggestions_limit=140 for v itself, to improve handling of large .v files
with many thousands of lines on windows./v doc -check-examples -f none vlib/ (#25554)v -d trace_execution run examples/brainvuck.v mandlebrot.bf-silent for the v build-examples task on windows, to make it easier to diagnose
recent gcc-windows timeouts-silent from the macos build_examples task too, to make remote diagnosing of CI
timeouts easierupdate_fn: fn (dt f32, ctx &gg.Context) to gg.Context and gg.Config . Pass
consistently the current GG context to all callback functions, instead of nil.v -d trace_before_request run examples/veb/veb_example.v after feedback
from https://youtu.be/IuE6Bo1klK0?t=2100rg --multiline --multiline-dotall "continue\n\t+\}\n\t+\}\n\t+return" -B3 -A3 v -os macos -experimental -b native -o hw.macos examples/hello_world.v on
linuxdoomv (#26200)19 Sep 2025
-div-by-zero-is-zero, which allows for x / 0 == 0 and x % 0 == x, avoiding division
by zero traps/panics (#24981)@OS, @CCOMPILER @BACKEND and @PLATFORM (#25174)gx and replace all occurences with gg (which now contains all the functionality of
gx) (#24966)sizeof(T) usage in generic struct (fix #24806) (#24808)$if sizeof(T) == int_literal { support (#24831)builtin.closure in 2d87ac4 (#24989)err removal (#25043)v -is_o -o x mm.v, where mm.v starts with module abc (i.e. not just module main)x in p.imported_symbol (#25201)T.typ and T.unaliased_typ checking to $match (fix #25200) (#25202)$match @OS { too (#25222)unsupported size ... for global messages, for
v -b native examples/hello_world.v-force-bounds-checking to enable easier testing of functions
tagged with @[direct_array_access] (essentially turning off that flag)for c in [othermod.Struct{field: 255}] { (fix #24943) (#24978)-translated mode (fix #25024) (#25061)=r, =&r, +r, +&r,=m,=rm,=@ccl, =*r) (fix #25070) (#25072)ui, during the migration of code from gx to gg) (#25106)v -cross -o vc/v.c cmd/v (part 1) (reduce CI annotation
noise)mod field to ast.FnTypeDecl too_option_none too (fix #24862) (#24885)@[markused] from option and result fns (#24900)@[markused] for interface declarations too (#24963)v -shared run empty.v (issue found by Felipe Pena)PANIC DEPS too (for consistency and easier redirection for the whole
trace)$if support (enable
$if platform { import module struct Abc {} }) (#25216)-d trace_type_symbols_after_checkerfor for i, r in s.runes_iterator() {
without first allocating an array for all the runes (#24769)-d builtin_free_nop to help diagnose problems with too early manual free()
calls-d gg_memory_trace_frame to be used in combination with
-prealloc -d prealloc_dump@[noinline] for level_from_tag/1 and target_from_label/1 to avoid triggering panics for
programs using log, compiled with -prod and -cc gcc>10 (fix #24874)builtin (#24942)-force-bounds-checking option./v -g -force-bounds-checking test vlib/toml/ (thanks to tankf33der)./v -force-bounds-checking test vlib/builtin/./v -g -force-bounds-checking vlib/regex/ (fix by
@penguindark) (#24960)archive.tar module to enable reading of .tar ang .tar.gz files (#24995)./v doc -m -f html vlib/builtin/set_vert_uniform and
set_frag_uniform APIs (#25019)assert "ä ö å æ ã ø ô é ë".title() == "Ä Ö Å Æ Ã Ø Ô É Ë"
(fix #25017) (#25026)@[markused] to builtin_init, remove its heuristic from markused.vos. .... for f32.str() (fix #25141) (#25144)unknown host OS panic from os.get_host_os()flag_to.v (fix #25166) (#25172)flag_to.v (#25189)math.pi // comment (fix #25229)ui to compile cleanly for PR#25264,
part 1ascon cryptographic module, based
on https://doi.org/10.6028/NIST.SP.800-232 (Lightweight Cryptography Standards for Constrained
Devices) (#25260)app.text() -> ctx.text() in README.md-d trace_tcp; move error_code() calls right after the
corresponding C APIs (errno is a global that should be read immediately to be valid)/dist/littlejs.js?1117like, in, not in etc (fix #25032) (#25035)a := []Type{len: x, cap: y} and a[i] read/write (#25299)static and volatile var deref (fix #24778) (fix #24779) (#24807)struct none { in cgen, if none is not used by V code reachable from fn main() { (#24824)struct map { and related type declarations, when no V maps are used (#24826)type Dict = map[string]string (fix #24878) (#24883)__closure_init call for sokol/gg programs on android as well (#24892)next method (fix #24890) (#24894)next method if defined in for x in iterator { (#24905)in operation (fix #24983) (#25011)err declaration or or { } blocks (#25034)#if defined __BIONIC_AVAILABILITY_GUARD && ... to be compatible with more Termux versionscast(&(arr.last() as Type)) (fix #23528) (#25132)$if results in checker only (fix #25123) (fix#25156) (#25150)"$for (fix #25211) (#25212)@[reused] attribute to mark methods, reusing the receiver memory on return (needed for
autofree) (fix #25221) (#25235)builtin APIs with builtin__ (#25264)if x := g() { x } else { return } adding newline after return (fix #24908) (#24945)@[deprecated] pub type Alias = int (fix #24968), workaround
-usecache bug (#24969)-new_int (part 2) (#25298)main instead of master as their core branchv should-compile-all more immediately useful in CI jobs (turn off stdout
buffering)// vtest vflags: -w in _test.v files, to allow v -W test . later, for files,
that have known warnings-prealloc self compilation checks on more platforms (#24891)-force-bounds-checking optionv repeat "program" "program_that_is_over_10x_faster"return"" in vdoc html output (fix #24979)v repeat -S, to only show the summary of
the runs, without the progress lines-cc gcc too./v doc -m -f html vlib/Copying instead of Generating for the static resources in ./v doc -m -f html vlib/-is_o option (in v help build-c) and add a test for it (#25052)pkg install in termux_ci.yml to reduce false positives.-os termux, to
make the emulation closer to a real Termux (#25128)apt update to reduce the recent
timeouts during installing dependencies (#25147)awalsh128/[email protected] instead of a manual apt update/apt install
step, to leverage caching more (#25256)awalsh128/[email protected] works on master (#25257)Unhandled Exception on windows 7 (#24803)thirdparty-linux-armv7_bdwgc.sh for building libgc.a on ARMv7 CPUs (#25077)v build-tools without flags for the tools-windows jobv -cross -o vc/v.c cmd/v on linux (part 2, see also 037a3b4)v -cross -o x.c cmd/v on windows too (part 1, fix V errors)apt update commands, in
ci/linux_ci.vsh, when run in a github CI runnerv build-tools and v build-examples running on a i686 (the problem was discovered by
@tankf33der)v -cc gcc examples/hello_world.v (#24996)v doc -check-examples -time -f ansi vlib/builtin/ passv doc -unsafe-run-examples -time -f ansi vlib/builtin/ pass toov doc -check-examples -f none vlib/builtinv doc -unsafe-run-examples -f none vlib/bitfield/ toov doc -unsafe-run-examples -f none vlib/arrays/parallel/ toov doc -unsafe-run-examples -f none vlib/arrays/ toov doc -unsafe-run-examples -f none vlib/compress/ toov doc -v -unsafe-run-examples -f none vlib/ could be added to the CIv -W -Wimpure-v examples/hello_world.v (move ctovstring_impl to builtin.c.v)19 Jun 2025
js"string literal" for JavaScript strings (#24653)any arg, prevent any from being used as map key,value or array
type (#24277)c.expr(mut node.left) rechecks for ast.CallExpr (fix #24353) (#24380)pub const pname = &char(C.SDL_POINTER) to fix the clean
compilation of code using vlang/sdl3[]T (fix #24423) (#24457)filter, count, any, all (fix #24508) (#24540)ast.ParExpr first in prefix_expr (fix #24584) (#24588)arr << logic to check_append()or{} expr (fix #24656) (#24658)if mut x != none {, when x is an immutable option (fix #24692) (#24694)struct Abc { pub mut: } (fix #24404) (#24403)mut static counter := 0 inside unsafe {} blocks (prepare for removing a -translated
mode quirk)unsafe { nil } to be voidptr (fix #25558) (#25570)$compile_warn(msg) and
$compile_error(msg) (#24992)$if T is $pointer { and $if T is $voidptr {, to make it easier to implement a pure V
dump(), without cgen specific code (#24628)$int too (fix #24346) (#24378)$dbg with @[heap] structs (fix #23979) (#23989)x := t.wait(), when t := go fn () string { (fix #24577) (#24580).js.v when -backend has already been used (fix #7840) (#24654)strings.Builder.clear(), fix array.clear() not working in the JS backend (#23992)xor_key_stream failing after a while (fix #24043) (#24046)new_cipher to be !&Cipher (#24113)crypto.ripemd160 module (#24119)-b wasm -d no_imports (#24188)$if var.return_type == 1 { (fix #24391) (#24393)encode/1 types of T != struct (fix #24435) (#24443)exp_decay to interpolation.v (#24545)dotfiles := os.walk_ext('.', '', hidden: true) (#24617)T.indirections comparison (fix #24630) (#24636)@DIR (as a comptime equivalent to os.dir(@FILE)) at runtime) (#24742)-os androidread_ptr/2 (from read/1) to UdpConn for consistency with TcpConn (#24000)close/0, select/2 and remote/0 methods of UdpSocket pub (#24004)@[unsafe]-d veb_max_read_bytes=16384, -d veb_max_write_bytes=16384,
-d veb_default_port=1234, -d veb_max_http_post_size_bytes=8388608v -http -d http_folder=vlib/_docs (allow customizing the folder, port, and
index file through CLI arguments to v -http)sanitize-memory-clang tooin and not in to orm_func (fix #24639) (#24642)for in string for amd64 (#24613)C.EOF (#24724)prof_measured_time into a thread local, for the supported C compilers) (#24061)@[keep_args_alive] with ptr (fix #23973) (#24058)x in [...]! operator with fixed arrays (fix #24082) (#24083)assert s[x..y] == "literal" (fix#24103) (#24105)index loop var (fix #24117) (#24124)-cstrict + notice about such usage (fix #24139) (#24143)strip should be used instead); temporary fix for usecache + tomlif mut var != none { for optional interface values (fix #24351) (#24410)unsafe {nil} comparison and initialization (fix #24374) (#24411)for mut var in arr { to pointer (fix #24432) (#24456)nil or 0 to option ptr field (fix #24447) (fix #24500) (#24502)a == [?int(none)] (#24504)nil param to arg expecting ptr (fix #24491) (#24503)const_init_or_block.vv in vlib/v/gen/c/coutput_test.v, when
VFLAGS=-no-parallel is usedswitch() { statements, generated by match() { ones (#24618)"hello".str => c"hello" (fix #24635) (#24652)unbuffer_stdout() to make the output more reliablesanitize-memory-clang? instead of sanitize-memory-clangs390 CI job for simple doc/yml changes (#24160)src subdir from projects, created by v new (#24236)// vtest build: !os_id_ubuntu? tags in the _test.v files, detected by v testv -o v2 -usecache cmd/v after ad5b829import mod { f } (#24340)gh-builder)v timeout, support killing the child process on timeout by default (#24367)v timeout 2 sleep 5./v -d network test cmd/tools/vpmv reduce, fix timeout leaks (#24405)v doc produced html nodes toov doctor (packaged V versions often lack a .git/ folder) (fix#24419) (#24420)arrays.diff module, implement a simple platform independent tool
v diff file1.txt file2.txt using it (#24428)v retry to reduce the false positives for retrieving the dependencies for vinix toohg version too, to ease the diagnosing of install_version_test.v failuresv doctor show CFLAGS and LDFLAGS too (if set)v search ui work again through the vpm site (fix #23966) (#24535)v test vlib (fix #24505)v watch (such DB files are very likely to change
during prototyping)v doc -f md module output useful by default (#24737)apt update before apt install in cross_ci.yml, to make the linux job more robustv doctorC.CREATE_NO_WINDOW on windows in os.raw_execute/1 (fix #24390) (#24418).hg/hgrc file for install_version_test.v (workaround windows failure)/opt/local/lib/pkgconfig for MacPorts on macos (#24626)cmd/tools/vtest_test.v (#24707)v -os wasm32_emscripten -o ms.html examples/gg/minesweeper.v (use os.asset to load the font,
avoid the implicit closures for the frame/event callbacks)'sync.pool implementation on
different platforms-profile report column, to show only the func time, excluding the accumulated children
calls time (usable through ./v -profile - run a.v |sort -nk3 for example) (#24056)v -gc boehm_leak -cg -keepc run examples/gg/minimal.v (part 1 - before the gg loop) (#24749)20 Mar 2025
[attr] syntax an error (@[attr] has to be used instead)string.index_after() now returns an Option (like string.index()), use
string.index_after_() for the old behaviornone to be passed to ?T param (fix #23381) (#23385)for iterator method .next(), not marked as used (fix #23312) (#23321)[]T (fix #23315) (#23322)as casting (#23327)as operator (fix #23349) (#23358)foo(?i64(123)) for fn foo(x ?I64) { and type I64 = i64 (#23373)node.args[0] on fixed_array_builtin_method_call and array_builtin_method_call (#23411)&(&var) (fix #23365) (#23418)&((&a)) and similar expressions, with innermost ast.PrefixExpr (enhance #23418) (#23419)return in lockexpr stmts (fix #23434) (#23435)m[key] if m is Option (fix #23446) (#23459)@[markused] from fn isnil(), set
c.table.used_features.auto_str_ptr = true instead (#23464)a := [none] (fix #23457) (#23504)node.args.len, method.generic_names.len, node.concrete_types.len and
node.op.str() (#23536)expr is Type if expr is Optional (fix #23486) (#23510)option_var.str() an error, when done without unwrapping it first (fix #23557, fix #23558) (#23563)arr = voidptr(0) (fix #23675) (#23687)module no_main programs, that can redefine their own main function, or not define any
of their own as wellpub type C.HINSTANCE = voidptr, being used in@[export: "wWinMain"]
fn mymain(x C.HINSTANCE, xprev C.HINSTANCE, lpcmdline &C.WCHAR, cmdshow int) int {
in module no_main programs (#23812)v := if c { none } else { none }) (#23829)none is used (fix #23831) (#23833)any type validation on assignment (fix #23905) (#23906)[]!type{} (fix #23360) (#23375)map[k]v(expr) (#23401)-statsstruct Abc, that lacks a body (#23627)import mod { Sym }, when Sym is later used, for more cases (fix#23412) (#23626)-d trace_parse_file_path_and_mod, to help diagnosing module lookup problems@[has_globals] to be used for all V programs, turn the @[wasm_import_namespace]
error into a notice$for (fix #23953) (#23959)-skip-unused on a short program, that prints array (fix #23436) (#23437)eprintln(err) on imported module on short program (related: #23498) (#23499)-- (#23470)unknown command suggestions, for more misspelled variants, like v sefl; make
util.new_suggestion calls parametrizable-os wasm32_emscripten and filtering _d_wasm32_emscripten.c.v and
_notd_wasm32_emscripten.c.v files. (#23797)./v -os cross -o vc/v.c cmd/v && clang-18 -o v_from_vc vc/v.c -lpthread#flag -DName=$d(...) (#23895)@VCURRENTHASH, to minimise the vlang/vc diffs for each
commit-d trace_parsed_files#line directives with tcc (the ../../../.. etc is no
longer needed with newer tcc) (#23974)-cflags -D_SGL_DEFAULT_MAX_VERTICES=4194304 to customize how many
vertices you can send through gg/sokol in a frame@[markused] tag to isnil(), because cgen generates calls to it in some cases (#23462)os.split_path('/usr/lib/test.so') -> ('/usr/lib','test','.so'); fix
platform dependent behaviour of os.dir/1, os.base/1, os.file_name/1 (#23532)-prealloc -d prealloc_memset -d prealloc_memset_value=65 -d prealloc_dump, to
better analyze the memory patterns of running V programsstbi.resize_uint8/3,
with a different fn signature) (#23580)FnGC_WarnCB alias (#23633)ecdsa.PrivateKey.new() to use a high level API (#23640)encoding.csv.RandomAccessReader (#23677) os.quoted_path() to os.system calls using v.pref.out_name, for the compress
flag (fix #23685) (#23686)#flag $when_first_existing(libABC.a, /some/path/libABC.a, ...), without
panicing (unlike #flag $first_existing(...)) (#23780)rotate_around_* (cw/ccw) functions to vec.Vec2[T] (#23807)-os cross -o vc/v.c (avoid the generic calls in the new write_u8
and read_u8)./v -os cross -o vc/v.c cmd/v && cc -o v_from_vc vc/v.c -lpthread./v -prod -cstrict -cc gcc-11 vlib/math/math_bench_test.v (use unions to implement
f64_bits/1 and f64_from_bits/1 for compilers != tcc)PrivateKey.new by avoiding match+assignments (#23899)calc_digest_with_evpkey (#23901)-cstrict -cc gcc-11 passes for markdown
as well".public_key method of PrivateKey (#23920)sign_digest routine (#23960)ctx.no_content() + prevent content-type being set if the mime type is empty (#23425)-cstrict -cc clang-18 -prod compatibility for programs that do
import net.mbedtlsverbose: true option, to restore the old
behavior if needed (#23725)SSL_get1_peer_certificate instead of the deprecated SSL_get_peer_certificate .v run file.v, in case of compiling a program with warnings/notices.-d trace_sqlite, not just for the ORM@[flag] (#23975)none (fix #23318) (#23320)-d trace_unused_by_main and -d trace_skip_unused_just_unused_fns, to find out
potentially obsolete functions that are not used at all in a project-cstrict (fix build of chip8-v project) (#23414)instance.t.wait() on default 0 initialized thread field t (fix #23390)#23392field union {, to improve interoperability with C (
similar to field struct {) (#23539)map[Enum]Value, and enum Enum as u64 { (fix #23630) (#23632)for or-block (fix #23625) (#23644)map_set (fix #23650) (#23652)if true {$if typeof[T]().idx, $if typeof[T]().unaliased_typ checking (#23665)@[sql: serial] and @[serial] are not the same (fix #23346) (#23678)v -path bootstrap_alternative_backend/ run simple.v (#23679)#postinclude directiveglobal_g.out << g.out instead of global_g.out.write(g.out) or { panic(err) }-gc none -d no_main -no-builtin -no-preludes to compile C
style V programs@[keep_args_alive] (partial fix for #23804) (#23805)g++ (fix #23701) (#23870)./v -prod -cstrict -cc gcc-11 test vlib/math/ pass cleanly (workaround a problem in V's
cgen, that -cstrict discovered)pub fn (mut a []string) free() { method, NOT the generic
fn (a &array) free() { one. (#23911)T.key_type, typeof(expr).key_type, T.value_type, typeof(expr).value_type,
T.element_type, typeof(expr).element_type for getting Map[K]V and []T types (fix #23914) (#23962)v should-compile-all folder/, where folder/ contains project subfolders (containing
v.mod files and multiple top level .v files)v should-compile-all . with support for compiling .wasm.v and .js.v files; skip
module name files, compile projects that have .glsl filesv bug report wordingemcc --version diagnostic in v doctor, when emcc is presentv -W build-tools (#23368)v buf file.v, when run in a folder != vrootv bug file.v, fix v bug /long/abs/path/file.v toodocker-alpine-musl-gcc job (#23399)v vet folder/ + new features (track long fns, empty fns and repeated code),
enabled by the new -F and -r flags (#23405)v help crun (#23431)-I option to notice fns, with the potential to be inlined (#23534)v check-md . print the actual length of lines too, when reporting errors/warnings about
them (#23606)v download (show progress on stdout, when it is connected to an
interactive terminal; hide log stdout->stderr notice)CI=name ./v -d network test cmd/tools/vpm/ ; update the image runners in vpm_ci.yml (#23628)v reduce program.v, in order to make smaller reproductions (rpdc.v files), before filing
cgen bugs (#23636)cmd/tools/vrun, to make it easier to use .vsh scripts on systems,
with /usr/bin/env still not supporting -Sv run shebang in cmd/tools/vrunv reduce parser for functions, and add more loops to reduce more (#23694)v reduce output; bump version, warn on failed string_reproduces/3, but continue to run (#23697)v reduce (#23709)cmd/tools/vdoc/doc to cmd/tools/vdoc/document, so that it can be imported from other
programs through -path, without conflicting with the top level doc/ folder in the main repo (#23733)-skip-unused tasks, since that is the new
default (#23746)v -g self in .github/workflows/native_backend_ci.yml, to improve remote
diagnosis of panics in PRs-silent for the longer test runs (suppress most OK lines, to reduce scrolling on
failure)v repeat failing_cmd show the error output just once, but also still measure the time it
took to executev ast (#23938)v timeout to be able to later use v timeout 5.1 git -C . fetch V_REPO in v doctor and
other tools.git -C . fetch V_REPO in v doctor (it
normally takes <1s) (fix #23955)v doctor -skip-github to fully skip the fetching step, in places that have limited
connectivity (alternative fix/workaround for #23955)fn screen_size() Size (fix #23146) (#23326)v doctor format, fixes for windows, tcc and others (#23361)DYLD_FALLBACK_LIBRARY_PATH on macos, when -use-coroutines is used, so that v run
can work, and the executable can find the downloaded photonwrapper shared library (#23516)v doctor output on OpenBSD: get gcc version from egcc; do not run ldd to get the glibc
version (fix #23576) (#23578)v download (#23613)v test . show the running _test.v files each minute (set by
VTEST_REPORT_RUNNING_PERIOD_MS); diagnose stuck windows gcc CI jobs (#23649)ubuntu-20.04 to ubuntu-24.04 (#23706)VJOBS: 1 in the windows tcc job anymoreVNATIVE_PE_DLL_PATH, to make it easier to diagnose problems with PE generation on non
windows platforms (#23756)v (#23779)-b native, competing the creation of the
backend executable => CI failures on the gcc-windows job)v install avoid using --filter=blob:none --shallow-submodules --also-filter-submodules on
windows (#23840)// vtest build: !do_not_test ?, // vtest build: !windows && tinyc to skip files during
testing on specific platforms, without having to keep centralised skip lists (#23900)dl, generate a DllMain() in cgen instead for -shared on
windows (#23961)v bug, for example: v bug -cg -autofree file.v (#23335)-cc tcc, improve the infrastructure, use
a V global instead of a C one (fix #23214) (#23350)./v -check-unused-fn-args examples/tetris/log.use_stdout(), use it to silence the transition note for the most commonly used V
tools/examples (#23642)v ast, to skip all nodes with default values like [], {}, 0, false;
with it v ast -pts examples/hello_world.v | wc -l is 36 lines./v -gc none -autofree run examples/tetris/ (avoid return s1 + s2 + s3, clone the
arrays, passed to the fontstash wrapper)module no_main as wellv build-examples failure on gcc-windowsmodule no_main based examples in v should-compile-allv -os wasm32_emscripten -o examples/tetris/tetris.html examples/tetris/ (avoid
using -sMODULARIZE) (#23814)math.vec, the builtin array support, instead of datatypes, and by
removing casts that are no longer neededv -cstrict -cc gcc-11 examples/sokol/particles and the same but with clang-18 too-cstrict -cc clang-18 for the sokol examplesVFLAGS='-no-skip-unused -cstrict -cc clang-18' v should-compile-all examples/sokol/ toovanilla_http_server - a fast, multi-threaded, non-blocking, port and host reuse,
thread-safe, epoll server (#23094)linux&&gcc // some commentv repeat -R 5 -r 10 "v run examples/hello_world.v" also show the time it took for all runs
in each repeatv should-compile-all examples/22 Dec 2024
-skip-unused is now on by default resulting in much smaller cgen and binaries. 70% reduction for
hello world.-parallel-cc for speeding up -prod and -cc clang/gcc compilation by up to 14 times!#include "foo.c" is enough (behind
-experimental for now)..index .any .all .map .sort .sorted methodsin expr with number ranges: if var in 1..4 { (fix #20352) (#22754)match, in and ==) (#22643)map[k]()? and map[k]()() (#22740)if tree.root != none { (#22895)array.count as a method that accepts a predicate, similar to filter, but returning just the
number of matches (#23054)== and != (fix #23108) (#23113)22:47:08Z (#22585)T.unaliased_typ if branch evaluation (fix #22587) (#22598)App.method field initialisation, for fn fields, initialised with generic methods (#22665)f() or { T{} } in a generic method, for fn f() ?T {, being called with T, being a
container like []int etc, not just a primitive type like int (#22672)f() or { T{} } part 2, see also cc55aa5 (handle the case of an ignored result as
well) (#22687)& structinit (#22689)from_string type restriction (related to #22783) (#22803)foo[T] as a value (#22820)if expressions (#22845)mutable_field: const_array (fix #22862) (#22863)json.encode_pretty with a struct init expression argument (#22897)!= none, support if mut x != none { too (fix #22936) (#22943)v -check file.v on files with parser errors (fix#22981) (#22982)$res() used in defer {} blocks with more statements, add a test (#22998)[]Enum{len: 10, init: .thing} (fix #23077) (#23165)T{} (#22682)@[must_use] tag for fns/methods, and an experimental -check-result option (#22983)type as field type on params struct construction (fix #23091) (#23098)type and other keywords as plain attr value (fix #23150) (#23154)@[tag] for hash statements, like #define and #flag (#23210):parse_text to the paths of .v files, printed by -print-v-files, for parse time generated
snippets_wasm32_emscripten.c.v suffix for platform files too-ldflags
is passed at the same time)Scanner.is_started field (#22918)-x objective-c with -parallel-cc for now-parallel-cc to parallel_cc.v-debug and -cdebug, as more explicit alternative names for -g and -cg (#23208)-parallel-cc fails (#23211)-no-prod-options to turn off passing -O3 -flto, while still keeping the
$if prod { branches (passing custom flags with -cflags -Os already works)-no-prod-options with -cc msvc as wellstring.starts_with/1 and string.ends_with/1, when compiled
with tcc (#22620)fixed_array_any_all_test.v (related #22609) (#22621)-d no_gc_threads for turning off passing -DGC_THREADS=1 while compiling the
GC libraryflag.to_struct, add test (#22696)shift_left/1 and shift_right/1 methods to BitField (#22700)string.is_pure_ascii() (#22748)x.encoding.asn1 (#22783)-autofree while recompiling the V compiler several
times@[markused] (used by cgen)@[manualfree] to workaround -autofree compilation issues with gitly, and other
projects using crypto.rand and math.bigos.getwd in favor of os.get_current_dir (part 1) (#22966)"-os cross (fix #22991)assert big.integer_from_int(1) == big.integer_from_bytes([u8(0), 0, 0, 0, 1]) (fix#23115) (#23124)assert math.log10(10) == 1.0 pass in the common case (#23129)icon field to gg.Config, for easier access (fix #23135) (#23138)-exclude @vlib/math/*.c.v (fix #23136) (#23140)json_option_raw_test.v, compiled with
-fsanitize=address,pointer-compare,pointer-subtract) (#23172)rand.cuid2 module (#23181)import veb, only for templates that do use functions defined in veb-d picoev_verbose_errors, do not use any naked eprintln by default, since that
is a low level module-d mbedtls_client_read_timeout_ms=7000,
-d mbedtls_server_read_timeout_ms=60000, and -d trace_mbedtls_timeouts@[serial] attribute for marking struct fields (#22814)[1,2]! in a (fix #22559) (#22579)& prefix (fix #22628) (#22638)map[k] := fn () state, when assigning anonymous fns (fix#22705) (#22707)json (fix #22717) (#22720)[1, 2, 3]!.map(it * 2) (#22722)assert [1, 2, 3]!.contains(2) (#22725)assert [1, 2, 3]!.index(2) == 1 (#22727)assert [1, 2, 3]!.reverse() == [3, 2, 1]! (#22745)-no-builtin flag (when used separately from -d no_main) (#22765)a in [x,y,z] optimisation for ast.IndexExpr and ast.SelectorExpr again (#22767)in expr optimization (#22764)or blocks for f() or {} (#22775)typeof (fix #22779) (#22782)err var on else branch, after last else if (fix #22784) (#22786)-cstrict (spotted in #22783) (#22802)T{} when T is ref type + dereferencing issue when comparing int alias to int (fix#22795) (#22807)return if cond { x } else { return missing } (fix#22838) (#22839)$if in an if expression, when compiled with -g (fix #22873) (#22888)msvc compiler does not support inline assembly to cgen (so it will only get triggered,
when ASM blocks are still present, in what is passed to cgen)x as string expr, when x is a ?string value (#22953)return (#22967)foo.bar as string, where foo.bar is ?string (fix #22960) (#22973)-show-timings -stats (#22990)gettid() on glibc < 2.30 (#22987)-cstrict (#23144)none (fix #23164) (#23168)none) (complete #23164) (#23176)return none for unwrapping (#23183)sql db { ... } blocks (fix #22601) (#22602)~same~ label, when the results in v repeat are not different enoughv repeat runs, done by compare_pr_to_master.v,
to reduce σ on machines with more varied loadv repeat -N ./cmd/tools/vtest_test, by adding a -N/--no_vexe_reset option to
v repeatzizmor .github/workflows/paths_ci.yml and fix reported issues (#22681)v test folder/ (#22716)v test to allow for // vtest hide_retries so that retry_test.v can hide its own (
deliberate) retriesmain_test.v files, to reduce false positives (workaround)v doctor output for missing cc. Add a diagnostic line checking for emcc --version toov fmt -w vlib/v/pref/should_compile.vv test)v retry timeout to 10 minutes, clarify the usage of its --timeout option.v retry in more places, that do network operations that can fail temporarily (#22836)v download -RD URL/script.vsh, to download script.vsh, then run it locally, then
remove it, in a single commandv help retryv help repeat./v -autofree -o v2 cmd/vv build-toolsv vet produce a nicer note, including the offending files, instead of file.v (#22957)oldv, so it can fail early, with a meaningful
error message, if they are not present.-cc tcc -no-retry-compilation, do not use more complex constants, but functions in
vlib/math/vec/vec2_test.vv download instead of wget (#23196)v retry -- v setup-freetype to make the CI more robust against random network failuresmacos-14 instead of macos-12 because
of https://github.com/actions/runner-images/issues/10721ci/common/runner.v, use it to simplify ci/macos_ci.vsh even more-d no_vschannel-subsystem windows
insteadV self compilation with -usecache on macos for now (#23145)typeof(var).indirections and T.indirections (#22805)typeof(expr).unaliased_typ (#22806)T(v) / SumType(v) (#22664)T.methods with generic types and interface checking with is operator (fix#22721) (#22724)examples/thread_safety/ (#22571)./v -os linux examples/json.v on macos (#22651)examples/veb/veb_example.v with V compiled with tcc on macosv compiled with tcc on macosv -skip-unused -cc tcc examples/hello_world.v on *BSDv run examples/net_t.v)./v -check -stats examples/hello_world.vv run examples/hello_world.v in a shell28 Sep 2024
implements keyword for explicit interface implementation$for param in method.params { (#22229)@BUILD_DATE, @BUILD_TIME and @BUILD_TIMESTAMP, all using
v.util.get_build_time(), and overridable through SOURCE_DATE_EPOCH (#22213)x.vweb and vweb in favor of veb, a faster, easier, and more stable framework.@FN and @METHOD (#21990)const () groups (an error after 2025-01-01) (#22019)-d trace_checker and error diagnostic information on compiler panics@[_allow_multiple_values] attribute, when declaring enums that have duplicate
values (#22224)implements parts of struct declarations (#22230)mt sync.Mutex = sync.new_mutex()) (fix #18088) (#21949)any value in pure V code (prevents invalid cgen) (fix #12623) (#22334)lock, used as a variable name (#21937)@include in templates, to work with relative paths & prevent recursive calls (#21943).${var} used in a template, compiled by $tmpl() (fix #22231) (#22270)-showcc (when the
cache is empty)