Releases: vlang/v
Releases Β· vlang/v
weekly.2026.05
releases: weekly.2026.05
weekly.2026.04
releases: weekly.2026.04
weekly.2026.03
releases: weekly.2026.03
weekly.2026.02
releases: weekly.2026.02
0.5
V 0.5.0
31 Dec 2025
Improvements in the language
- Add comptime
if is sharedsupport (fix #25600) (#25602) - Make
defer{}scoped by default, usedefer(fn){}to get the old behavior #25639) (#25665) - Add gotodef support for nested struct members, fn return types, etc (#26131)
- Add a new v.comptime stage
COMPTIME, that runs after the checker (CHECK), and before the transformer (TRANSFORM), to simplify the work that later stages do #26068 (#26161)
Checker improvements/fixes
- Correctly detect variadic arg passed to struct fn (fix #25504) (#25509)
- Fix $(field.name) access on closure fn (fix #25513) (#25514)
- vls: skip unrelated files (#25531)
- Fix mutability in
for inloops with pointer values (fix #25520) (#25536) - Fix type inference, when pushing an empty array to a 2D array (fix #23854) (#25508)
- Prevent array.insert for array of references when non-reference is passed (fix #25511) (#25557)
- Add more support for mod autocomplete, allow for .vv files too (#25562)
- Fix cast from an empty struct to option (fix #25566) (#25581)
- Ensure ?Struct is not parsed as ??Struct when param is ?T (fix #25559) (#25564)
- Fix if branch type nr_muls mismatch (fix #25556) (fix #25555) (#25571)
- Fix comptime else branch handling (fix #25586) (#25589)
- Smart detect
or {}inside loop when usingc <-val(fix #24550) (#25435) - Vls fix goto definition (#25595)
- Fix generic resolve for external module generic static method call (fix #21476) (#25634)
- Correctly detect type, when prepending to generic array (fix #25585) (#25645)
- Allow cast from voidptr to sumtype in unsafe block (fix #25652) (#25657)
- Disallow calls to a shared receiver method, on a non-shared var (fix #25577) (#25656)
- Fix or block endwiths expr (fix #25329) (#25667)
- Set ast file fallbacks for vls (fix #25678) (#25679)
- Error/warn when using
defer(fn)inside function-scope andlockstmts (#25681) - Maintain correct ref level in generic fn (fix #25676) (#25687)
- In vls mode, make ensure_type_exists return true (#25695)
- Only collect/hoist inner vars, when
deferis function-scoped (#25693) - Improve type checking for sumtypes with generics (fix #25690) (#25699)
- Unwrap for base type if ft.typ and inferred_typ are both opt (fix #25517) (#25728)
- Disallow deference of nil (fix #25740) (#25746)
- Fix comptime main fn (#25747)
- Parser,fmt,checker: use a trie for matching the generic array methods
all,any,count,filter,map,sortandsorted(#25759) - Fix array fixed unresolved return check and resolver (fix #25774) (#25790)
- Allow explicit sumtype to option casts (fix #25796) (#25812)
- Fix possible race on expected arg types unwrapping on cgen (#25815)
- Skip init check for options (fix #25798) (#25830)
- Fix module var set at change_current_file() (fix #25845) (#25846)
- Improve handling of array decompose for dynamic arrays and array init (fix #25838) (#25843)
- Force all fn declarations to follow after all other top level statements (fix #25889) (#25890)
- Fix used features tracking when printing pointer values (fix #25899) (#25901)
- Match type when auto deref occurs (fix #25913) (#25916)
- Relax the redundant () check to a notice, to enable a future
v -W test vlib/builtinjob on the CI - remove () from match branch exprs (fix #25950) (#25952)
- Fix array map anon fn return fixed array (fix #25928) (#25977)
- Cleanup the output of
v new --web abcdafter feedback from https://youtu.be/IuE6Bo1klK0?t=555 - Allow assign to a shared int var (fix #25986) (#25988)
- Ensure type of global exists (fix #25910) (#25998)
- Ensure fn pointer cannot be used as non-fn argument (fix #26017) (#26022)
- Make sure
$foreval body statements at least once to set types and avoid markused issues later (fix #26058) (#26063) - Fix return static method name (fix #26105) (#26110)
- Support gotodef for struct init and sumtype rhs (#26157)
- Detect circular type references in sumtype declarations (fix #24511) (#26162)
- Add interface type handling and new testcase (fix #24116) (#26165)
- Allow enum fields to reference previously declared fields (fix #25241) (#26173)
- Clear all ref from autostr receiver_type (needed by #25857) (#26202)
- Allow for
_being used as bothimport x as _andfn f(_ int) {(fix (#26219) #26230
Parser improvements
- Fix vls mode strut mut keyword (fix #25548) (#25551)
- Fix vfmt comment in struct init after the update expr (fix #24361) (#25668)
- Fix infix expr comment in middle (fix #24183) (#25671)
- Disallow using generic functions as a field type name inside struct decl (fix #25452) (#25705)
- Warn on
@[deprecated_after]used without a corresponding@[deprecated]attribute (#25712) - Fix last stmt is fn call in or_expr (fix #25732) (#25739)
- Allow for
|mut x, y|expr(fix #25734) (#25735) - Allow using
a,banditas var names, when using the builtin array methods (fix #25729) (#25755) - Disallow generic function to be exported (fix #25794) (#25806)
- Support
-d trace_parseto ease diagnosing problems related to the order of parsing of .v files in modules - Fix the language support for a nested anonymous C.struct (fix #25807) (#25789)
- Disallow untyped
chanused as a fn parameter type (fix #25818) (#25854) - Improve the unused import warning message (add fixing alternatives) (#25880)
- checker,parser,ast: make
type MyBuilder = strings.Builderwork (part 1); addmodfields to ast.SumTypeDecl and ast.AliasTypeDecl (#25943) - Remove dead code in Parser.is_array_type/0 (#26080)
- Check invalid struct name in struct_init() (fix #26030) (#26093)
- Remove the support for the obsolete generic fn call syntax f() (first deprecated in 2022/11) (#26126)
- Fix comptime for lock shared field (fix #26143) (#26146)
- checker,parser: add multifile gotodef support for -line-info (#26167)
- Optmize Parser.call_kind (#26196)
Compiler internals
- markused: fix markused struct heap (#25542)
- markused: fix array.prepend C code dependency (fix #25573) (#25582)
- markused: fix fn marked as used when variable and fn uses same name (fix #25649) (#25650)
- checker,transformer: add always true/false branch detection for the
ifandmatchconstructs (#25674) - v.util: measure more precisely how long a new tool recompilation lasts in launch_tool, when using
v -d trace_launch_tool self - transformer: fix struct init comparison turning into boolean (#25724)
- v.builder: support V_NO_RM_CLEANUP_FILES=1, to ease debugging of -usecache issues
- v.builder: make it easier to reproduce the exact specific stages of -usecache module compilation by logging the full CLI options for each
- v.builder: fix
.vshmode doing an implicitimport os, now only for .vsh file itself (fix issue spotted in #25736) (#25745) - v.builder: improve diagnostic information for a failed build_thirdparty_obj_file
- transformer: transform ArrayInit into a function call for C and native backends (part 1)
- builder,pref: add
-file-listsupport (implement feature #25707) (#25749) - pref: for -usecache, set .parallel_cc = false and .no_parallel = true to make compilations more deterministic and ease CI diagnostics
- markused: fix missing builtin__memdup definition, when an option struct field is used (fix #25801) (#25802)
- transformer: move array logic to array.v
- v.builder: improve the error message for failing cgen; suggest
-gand-show-c-output - v.pref: fix GitHub download URL for the photonwrapper .so file (fix #25708) (#25831)
- v.pref: use
v downloadfor downloading the prebuiltphotonwrappershared library (#25849) - markused: fix const as fn mark as used (fix #25888) (#25895)
- transformer: disable generic str_intp opt (fix #25896) (#25897)
- v.scanner: remove obsolete .is_crlf and .is_vh fields (#25918)
- v.scanner: use a named return for decode_XXX_escape_single methods, to reduce the generated C diff churn, during scanner code updates
- markused: add new auto_str() used funcs for bootstrap (#25938)
- v.builder: provide more detailed error message, on
msvc: failed to build a thirdparty object, not just the failed command - v.builder: improve formatting of the
failed to build a thirdparty objectmessage for msvc - scanner: remove old generic check logic (fix #25959) (#25997)
- transformer: fix the setting of a generic flag for fixed array type with
-new-transformer(#26009) - transformer: add file/line info for fn with
expand_simple_interpolation(#26135) - transformer: add early return to avoid transform getting applied twice for a
for x < y {body (#26153) - markused: fix option none markused (fix #26147) (#26151)
- v.builder: enable gc back with msvc, build separate
.debug.objthirdparty files when -g is passed, to prevent linking issues (#26215) - v.builder: support compiling asm .S files to .o files, mentioned in #flag directives (needed for #26185) (#26211)
- v.builder: fix compile asm file, followup of PR #26211 (#26227)
Standard library
- arrays: fix rotate_left() and rotate_right(), add test (#25539)
- encoding.base58: fix encoding, add test (#25538)
- x.crypto.chacha20poly1305: move up responsibility for allocs into higher caller (#25574)
- crypto.cipher: fix decryption in CBC mode, add test (#25584)
- os: use
@[noinline]on os.create/1 to workaround a-cc gcc -prodpanic (fix #25549) - time: fix non-digit checks for parse_rfc3339() (#25597)
- gg: add explicit bounds checking for image caching methods in gg (fix #25590) (#25591)
- time: fix quarter calculation in custom_format() (#25608)
- rand: fix randomness in shuffle() (#25617)
- gg: destroy unused GPU resources before replacing cached images (#25615)
- encoding.binary: fix serialize skip struct shared fields (related to issue #25600) (#25613)
- x.crypto.chacha20poly1305: make implementation use fixed sized arrays more (#25627)
- builtin: make result stri...
weekly.2025.01
releases: weekly.2025.01
weekly.2025.52
releases: weekly.2025.52
weekly.2025.51
releases: weekly.2025.51
weekly.2025.50
releases: weekly.2025.50
weekly.2025.49
releases: weekly.2025.49