Skip to content

0.3

Compare
Choose a tag to compare
@github-actions github-actions released this 30 Jun 07:48
  • C to V translation via C2V: v translate file.c. (Demo video: Translating DOOM from C to V, building it in under a second and running it!)
  • Lots of bug fixes in V, cgen, and C interop to allow running translated DOOM.v.
  • Programs built with the V compiler no longer leak memory by default.
  • Closures. All operating systems are supported. (Demo)
  • Option and Result are now separate types: ?Foo and !Foo respectively. Old code will continue working for 1 year and will result in a warning/hint.
  • Hundreds of new checks in the type checker.
  • All V's backends have been split up into separate processes. As the result, building V got 26% faster.
  • Maps and arrays can now return optionals: m[bad_key] or { ... }, if x := arr[key] { ... }.
  • ustring has been replaced with []rune (works just like in Go).
  • Maps can now have non-string keys.
  • A new compiler pass for transforming the AST (doesn't slow the compiler too much, adds about 25ms to v self). It eliminates unreachable branches and performs other simple optimizations and transformations.
  • C backend is now parallel (just the cgen part for now).
  • Lots of compiler source code clean up and minor optimizations. The compiler got ~30% faster according to fast.vlang.io.
  • Better compiler source code organization (absolutely necessary as it's surpassed 100k loc).
  • The naming of V's integer types is now more consistent: byte has been renamed to u8. Old code will continue working for 1 year and will result in a warning/hint.
  • The typo detector now highlights the suggested name so that it's more visible.
  • datatypes module now has Heap, Queue, Stack, BSTree, LinkedList.
  • Interfaces can now be embedded (like structs).
  • vlib now has a TOML parser, fully compatible with TOML 1.0.
  • Lots of work done on the V.js backend, including the graphics library, which has been ported to V.js.
  • JS promises, await (V.js).
  • It's now possible to do more complex array initialization by using each individual element of the array ([]int{init: it}).
  • Unsigned right shift operators >>> and >>>= have been added to V. (They work exactly like in Java.)
  • -nofloat option, which is useful for writing kernels and for embedded systems without an FPU (used in Vinix).
  • Generic interfaces.
  • TCC is now bundled with the language, this allows building V programs without an external C compiler dependency.
  • Null can be used in unsafe only (for example, for C interop).
  • Pointer arithmetics and comparing pointers to numbers is now also only allowed in unsafe.
  • Inline sumtypes.
  • New module compress.gzip.
  • Lots of net/net.http/vweb fixes (also used for the upcoming Gitly launch).
  • IPv6 support.
  • net.http headers are now enum fields instead of strings. This allows to avoid typos and offers autocomplete.
  • Struct field deprecation.
  • Static GC (no longer a dynamic lib dependency).
  • New various algorithms for random number generation: MT19937RNG, etc (module rand).
  • Fix immutability bugs that allowed to bypass compiler immutability checks and modify const/immutable values.
  • Lots of fixes in the JSON serializer.
  • Heap allocated only structs marked with [heap].
  • Significantly improve lots of error messages, make them more clear, suggest hints.
  • Bug fixes and new features in the pure V regex module.
  • Lots of new drawing functions in the graphics module (like gg.draw_polygon_filled(), gg.draw_arc_empty() etc)
  • Builtin FPS display in gg.
  • Latest Sokol backend in gg.
  • Advanced CI tests for the graphics module. Graphical apps are run on GitHub Actions instances, their output is saved to an image, uploaded, and compared to the expected result.
  • More bug fixes in generics.
  • Bug fixes in aliases. They can now fully replace the types they alias.
  • [minify] struct attribute for struct minification.
  • for in now works with fixed arrays.
  • The parser was made a bit faster by skipping vfmt code when not in vfmt mode (by using -d vfmt).
  • Lots of vfmt improvements, especially with comments.
  • Experimental #[index] syntax for negative indexing (like in Python, but needs special syntax instead of being used by default).
  • Visibility bug fixes in modules (pub).
  • Error propagation in complex expressions (e.g. foo(bar()?)).
  • Optionals can now by used in consts (const x := opt() or {}).
  • Lots of new documentation, including vlib modules documentation and the official V Documentation.
  • vpm improvements (including a new vpm mirror).
  • sync improvements including sync.thread_id(), sync.Once..
  • V can now be used to generate object files (foo.o) that can be used in existing C projects.
  • -usecache and -skip-unused fixes, they are close to being on by default.
  • Lots of Windows issues fixed.
  • Amazon Linux support.
  • Fixes in shared maps and arrays.
  • term.ui improvements, including multi byte/UTF-8 events.
  • New crypto modules, including crypto.des, crypto.cipher, crypto.blowfish.
  • Comptime fixes.
  • 4 byte bool option (-d 4bytebool) for compatibility with some C software.
  • strconv (pure V formatting module used in string interpolation) fixes and performance improvements.
  • ORM fixes (pg, mysql, sqlite). Tables are now created automatically based on the V structs, no more need in sql files to create tables for apps.
  • volatile keyword.
  • "stringliteral".len optimization (replaced by the actual number by the new transform pass).
  • Lots of inline assembler improvements (it's used a lot in Vinix).
  • Many new functions in the math module.
  • Separators in number literals: 1_000_000.
  • strings.Builder optimizations and new methods.
  • Autofree fixes (still not production ready, hidden behind the -autofree flag).
  • Lots of Android fixes in V and in vab.
  • Lots of commits to the native backend (amd64/arm64).
  • V interpreter fixes. (Still at an early stage.)
  • Go2V translator has been started by the community, and can already translate simple programs.
  • An early version of the Go backend (v -b go -o file.go file.v).