3 Sep 2023 - 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)-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)js"string literal" for JavaScript strings (#24653)-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)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)-d ident=value and retrieval in code via $d('ident', )-warn-about-allocs for debugging allocations when using manual memory management@[freed] attribute for assign statements (for the above mode)&&= and ||= operators (#21678)fn f(some int, ...) { (#21812)-n for skipping notes (similar to -w for skipping warnings)x.vweb is now veb, the official and recommended way to build web apps in V. Built
on top of pico.v.@VMODHASH comptime variable to store the commit sha of a V module (#21091)new_map := {...old_map, 'k1': 1, 'k2': 5} (#20561)@[_linker_section] attribute (#20629)@[export] for global variables too (#20649)@[aligned] and @[aligned:8] attributes for structs and unions (#19915)$if T is $array_dynamic { and $if T is $array_fixed { in addition to
$if T is $array { (#19882)-W impure-v the default (#19940)0 to reference fields now requires unsafe blocks (fix #14911) (#19955)r and R switches for repeating in string interpolation, '${"abc":3r}' == 'abcabcabc' (#20197)$string comptime type, cleanup (#20233)if o != none { (#20275)is operator and smartcasting (#20315)encoding.xml module with parser, validation, entity encoding, unit tests (#19708)@VCURRENTHASH to replace C.V_CURRENT_COMMIT_HASH (#19514)a.sorted(|x,y| x > y) (#19390)-os plan9, $if plan9 {, and _plan9.c.v (stage 1 for plan9) (#19389)import flag as _array.sorted() and array.sorted_with_compare() methods, that do not modify their
receivers (#19251)Enum.from_string(name string) for converting strings to enum values (#19156)@[attr] syntax to replace [attr] ([] is used for too many things). Most likely to be
replaced with @attr() in the future.none for not first values on map initialization (#18821)gx and replace all occurences with gg (which now contains all the functionality of
gx) (#24966)any arg, prevent any from being used as map key,value or array
type (#24277)[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 behavior22:47:08Z (#22585)x.vweb and vweb in favor of veb, a faster, easier, and more stable framework.pub fn on_c_main() {, is now pub fn on_c_main(should_trace_c_main bool) {Request.cookies map has been deprecated. Replaced with Request.cookie() and
Request.add_cookie().arr[1..4] now requires unsafe if the slice can modify the original immutable array.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) #26230sizeof(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.vc.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)none 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)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)@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)const n = int(sizeof(u64)); _ = [n]int{} (fix #21544) (#21548)@[noinit] (#21587)Result variants (#21620)field map (i.e. a plain untyped map), used inside a struct (#21625)$if x { condition, using const x = $d('ident', false) (fix #21709) (#21713)\uxxxxx in raw strings (#21724)field [$d('x', 2)]int = [1, 2]! (#21741)& <>, similar to && ||any type to the checker to resolve parsing issues (#21146)none to fn f(arg ?&Type) { (fix #21213) (#21231)continue and break statements (#21294)Result callbacks functions like map/filter/all/any (#21055)@[params] attribute as mutable function parameters (#21206)none is passed (#21509)option or result return type, for infix operator overloading (#20494)@[noinit] attribute, through using T{} (#20516)@[deprecated] attribute for consts (fix #20523) (#20550)non_opt_array << optvalue (#20573)mut static x := map[string]int{} (#20596)#define X and asm riscv64 {} blocks in .v files, with -freestanding (make embedded
usecases easier)(x) := 10 (#20695)none as match cond (#20688)x as Y.field, suggesting using (x as Y).field instead for clarity (#20725)arg_typ_sym.embed_name() when there are no errors (#20820)Flags.bit ^ Flags.bit1 and ~Flags.bit (flagged enums) (fix #20925) (#20929)@[translated] (#20935)@[translated]\nmodule ... files (#20938)@[translated] files (#20964)check_ref_fields_initialized methods (#21016)Optional and Result high val in a for x in low..high { loop (#21043)$for i in struct.values and $for i in enum.fields (#19845)more than 1000 possibilities in match range to a notice (#19862)import some modname as _ in the same .v file (fix #19899) (#19900)unsafe (#19977)$for (#20057)string to enum error check, handle EnumName(string_variable) too (#20210)or {}
block) (#20266)len: (fix #20272) (#20279).free() method calls, when used on fixed arrays (#20320)string to voidptr cast entirely (#20351)field ?&Type without default value (#19786)else branch in [flag] enum match (#19375)each(a, |x| println(x)), i.e. using lambda expressions, when expecting fn (x int)const source = $embed_file(@FILE).to_string()nil to struct fields (#18725)$tmpl function type mismatches (#18826)@STRUCT in static methodsnone, i.e. type Abc = none (#19078)Checker.expr_or_block_errthread as var name (#19174)chan type (#19167)@[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)-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 toostruct Abc { pub mut: } (fix #24404) (#24403)mut static counter := 0 inside unsafe {} blocks (prepare for removing a -translated
mode quirk)[]!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)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)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)[$d('s', 4)]int{}, move resolving to method on ComptimeCall (#21701)$d() in fixed size array struct fields (#21731)@[flag] enum methods, with modules named flag (#21844)mod.Enum.val inside fn args (#21908)delete and update (#21113)file_name_dir
field (#21202)for in Iterator{} { (fix #21179) (#21282)for x in Iterator{} {, when there are no field initialisations (#21333)$tmpl("x.html"), when the template file contained % at the end (#21402)ScopeVar and Ident (#21523)sort or sorted (fix#20436) (#20485)MyEnum.from(1)! generic static method (#20411)MyEnum.from(0)!, implement MyFlaggedEnum.zero() (#20623)@include template directives (#20628)scope &Scope = unsafe { nil } fields (#20774)builtin are
preparsed) (fix #20606) (#20611)-silent -print-watched-files mode (used by v watch) (#20873)set_all + clear_all methods to [flag] enum bitfields (#19717)import math { sin, cos } (#19738)sql as name (#19298); support for module x;_ := [10]?int{}) (#19392); statements, allowing for oneliners like
./v -e 'import os; println( os.ls(os.args[1])!.sorted(a > b) )' vlib/math (#19345)enum, sum type and alias (#19043)const x := 123, to make extracting locals as constants less annoying while prototypingfor i++; i<10; i++ { (fix #18445) (#19035)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)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)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)_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_checkerx := t.wait(), when t := go fn () string { (fix #24577) (#24580).js.v when -backend has already been used (fix #7840) (#24654)-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):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 well-showcc (when the
cache is empty)v -dump-defines - -check cmd/v, which is faster, because it can skip code
generation-d trace_transformer-coverage support + vcover tool (#21154)enum_variant = some_const + 10 (fix #21777) (#21779)v xyz instead of v xyz.v just once (#21801)-skip-unused (fix #21907) (#21914)modules (#21083)githash to be able to get the githash of every passed project (#21178)v wipe-cache, when the object files are not recognized-cross, allow for $if cross ? {arch.c.v; rename pref.c.v to pref.v (#21387)os_from_string, add missing qnx, remove deprecated wasm options that used -
instead of _ (#21390)diff (#21435)v test-cleancode, when a slower diff tool is installed (#21447)diff.compare_text (#21458)v file.v --unknown-option (#21391)Text file busy; code: 26 case), bump
tool_recompile_retry_max_count from 3 to 7v -b js file.v commands are run at the same
time (all trying to recompile the JS backend program) (#20631)./v -freestanding -cc riscv64-elf-gcc -d no_main -no-builtin -no-preludes -showcc -keepc x.vos, of $
embed_file(), when compiling with -freestanding (#20712)-fno-strict-aliasing, for -prod to gcc/icc (#20368)-skip-unused for programs that import x.vweb too (do not skip unused routing
methods)-dump-defines - to help explore all the available user and
system defines for a given program (#19576)-macosx-version-min 10.2 and -macosx-version-min 0 (with default
of 10.7) (#19626)v run file.c.v (#19745)-fast-math, passing either -ffast-math or /fp:fast (for msvc) to the C backend,
and $if fast_math { to detect it at comptimesrc/modules and modules (#19437)v run file.v, exits by a signal (fix#19412) (#19471)\_ (fix #19131) (#19134)@[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)for 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)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 android-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)string.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)int to f32Any in decode_struct, encode_struct and to_any (#21972)./v -cc clang-18 -gc none simple_bytebeat.v (the audio depends on threads)d,c,dd,ddd,dddd pattern support for parse_format() (#22003)@[tail] field when no fields has been matched yet in flag.parse[T]() (#22043)-cc msvc -gc boehm (thanks to @Ekopalypse)arrays.parallel module, containing parallel.run/3 and parallel.amap/3
implementations (#22090)-d builtin_print_use_fprintf, make the C fn declarations stricter (#22137)m = {}, after multiple iterations
of setting keys and clearing (fix #22145) (#22146)flag.FlagParser style flags in to_struct[T] (#22152)flag.FlagParser style short flags in to_struct[T] (#22172)no_match entries instead (#22191)u16/u32/u64 -> []u8 conversion functions (#22193)@[direct_array_access]scrypt module to vlib/crypto (#22216)[0, n) (#22266)x.benchmark module, that estimates automatically how many iterations are
needed, to get a statistically significant result (#22215)a + b and a - b, when the signs are different, add more test cases (#22330)os_nix.c.v (#21564)@[toml: ], support @[skip] (#21571)last_index_u8, deprecate index_u8_last string methods, make consistent with
last_index (#21604)string.split_any (#21612)crypto.sha3 hash and extended output functions (#21664)@[direct_array_access] to very commonly used functions (#21771)arrays.chunk_while([0,9,2,2,3,2],fn(x int,y int)bool{return x<=y})==[[0,9],[2,2,3],[2]]pub fn arguments() []string {; make os.args use it, remove edge case in cgen (#21852)-d use_bundled_libgc to make it easier to debug/upgrade reliably libgc cloned
from ivmai/bdwgc (#21869)init value in the call, is an array (#21921)v vlib/v/gen/c/coutput_test.v for gcc14.1, which is stricterpub const is_used = 1 workarounds (#21160)i32 decoding and encoding (#21162)-autofree (#21204)at_exit(cb) wrapper for C.atexit (part 1) (#21254)s == '' or s != '', instead of s.len == 0 (#21300)command_test.v (#21307)__v_ start and __v_ endPenConfig fields public (#21353)- operator, union and intersection, now they no longer change the
receiver (fix #21315) (#21362)cli/testdata (#21456)decode_quoted_escapes (#21472)at_exit(cb) or {} (part 2) (#21263)new_reader_from_file/2 (#20530)is_hex(), is_int(), is_bin(), and is_oct() methods to the string type (#20540)io.Eof, instead of error('none') (#20619)-d gc_warn_on_stderr, to show the GC warnings, without installing a custom warn
fn callbackmath.max_u32 in favour of builtin max_u32, remove
unneceseary bits, reorder (#20838)encoding.txtar (port of Go's txtar module) (#20874)C.tm (a BSD and GNU extension) (#20907)@[json: '-'] (improve backwards compatibility with the json
module) (#20892)string_reader submodule (#20893)-prod -cc gcc bug, affecting os.open_file (fix #20923) (related to #20872) (#20960)-W impure-v the default (#19846)join_path (#19877)Direction pub and fix and add tests for push_many (#19983)compress.szip module, deprecate the szip one after 2023-12-31 (#20003)XDG_CACHE_HOME, if it is non empty, and it does not exist
yet, when calling os.cache_dir() (#20046)mv_by_cp for directories (#20154)draw_slice_filled() (#20182)@[direct_array_access] to js string trim_right method (#20222)time.Time (#20228)map_from/1 (#20294)v -N test vlib/cryptounsafe { a.reset() } method, for quickly setting all bytes in an array to 0execute_opt (#19723)math to builtin so that the entire math module
doesn't have to be imported(#19809)MMM support for parse_format() (#19284)?int to !int (#19311)@VEXE as an anchor, so v help will work more robustly.to_toml for complex structs (#19338)v -e "import net.http.file; file.serve()" (#19348)unescape() (#19267)builtin.wchar, to ease dealing with C APIs that accept wchar_t* (#18794)Block.new, to replace new (#18846)Log instance (#19242)parse_format with YY (#18887)isqrt_checked and standardize error format (#18939)v -os wasm32_emscripten examples/2048/create_image function (#19015)-d show_fps background, so fps>100 will not overflow itarrays.uniq, arrays.uniq_only, arrays.uniq_only_repeated,
arrays.uniq_all_repeated, arrays.distinct-d builtin_writeln_should_write_at_once and
-d builtin_write_buf_to_fd_should_use_c_write (#19243); is used (fix #25544) (#25561)veb.Result (fix #25970) (#25973)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?1117read_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)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.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_timeoutsvweb_livereload reference to veb_livereload (#22171)const x = int(0x80000000)m3u8 MIME type application/vnd.apple.mpegurl for multimedia playlists (#21688)Response.status() method comment, to indicate returning of a Status enum
field, instead of struct (#21735)text/x-vlang, for .v and .vsh file extensions (#21851)mbedtls to latest compatible version v3.3.0 (#21118)host:port, not just a host address) (#21185)index.html by default), and auto_index (true by default)
parameters to file.serve()v -http for v -e "import net.http.file; file.serve()" .EAGAIN or EWOULDBLOCK quietly (#21480)-prod -cc gcc 13.2.0 (fix #20506) (#20660)$if debug_ev_callback ? { for the
[vweb] error: write event on connection should be closed messageindex.html inside (#20784)/sub.folder/a_folder (#20863)-prod -cc gcc bug (#20872)char and usize types for describing more precisely the C API of mbedtls (#19837)read_set_cookies function (#20187)takeover_conn (#20249)-d no_vschannel on windows, to fix long waits, while connecting on some
systems (#20265)$vweb.html() integration in cgen for the newer x.vweb module (fix #20204)$if tinyc { conv.hton16(port) } $else { u16(C.htons(port)) }-W impure-v as default) (#19779)!string on decode (#18928)like, in, not in etc (fix #25032) (#25035)sanitize-memory-clang tooin and not in to orm_func (fix #24639) (#24642)@[serial] attribute for marking struct fields (#22814)references attribute to allow foreign key declarations on fields (#19349)[references] (#19387)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-d trace_sqlite, not just for the ORM@[flag] (#23975)pg, mysql, sqlite, mssql modules. Leave only the db. prefixed
db.pg, db.mysql etc-new-transformer dynamic array (#25817)$if trace_native_todos ? { to reduce noise in v test-alla := []Type{len: x, cap: y} and a[i] read/write (#25299)for in string for amd64 (#24613)C.EOF (#24724)-no-builtin (generate executables < 1KB Linux with
v -no-builtin -b native examples/hello_world.v)-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)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)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)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)[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)