From ec758604538c00cceb142d324609a241e665f7c7 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Thu, 30 Jun 2022 10:41:09 +0300 Subject: [PATCH] V 0.3 --- CHANGELOG.md | 98 ++++++++++++++++++++++++++++++++--- ROADMAP.md | 25 +-------- v.mod | 2 +- vlib/v/util/version/version.v | 2 +- vlib/v/vmod/parser_test.v | 4 +- 5 files changed, 96 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c8ad94b3..997c989ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,100 @@ --## V 0.2.5 --*Not yet released, changelog is not full* +## V 0.3 +*30 Jun 2022* +- 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!](https://www.youtube.com/watch?v=6oXrz3oRoEg)) +- 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](https://twitter.com/v_language/status/1528710491882852352)) +- `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`). + + +-## V 0.2.4 +*30 Aug 2021* - Introduce `isize` and `usize` types, deprecate `size_t` in favor of `usize`. - Add `datatypes` and `datatypes.fsm` modules. - Add `compile_error` and `compile_warn` comptime functions. - --## V 0.2.4 --*Not yet released, changelog is not full* - Bare metal support. Vinix OS kernel is now being developed in V. - Builtin web framework vweb is now multithreaded, all CPU cores are used. - String interpolation and struct stringers are now implemented in pure V with a much cleaner and faster implementation. Previously libc's `sprintf` was used. - Improved `unused variable` warning. Assigning to a variable no longer marks it as used. +*... lots of missing changelog for this version, sorry (will update a bit later)* ## V 0.2.2 - 0.2.3 *22 Jan 2021* @@ -51,12 +134,11 @@ from local variables. ## V 0.2 *22 Dec 2020* -- Compile-time memory management via `-autofree`. [Video demonstration](https://www.youtube.com/watch?v=gmB8ea8uLsM). -It will be enabled by default in 0.3 +- Compile-time memory management via `-autofree` (not production ready yet). [Video demonstration](https://www.youtube.com/watch?v=gmB8ea8uLsM). - Channels and locks. - Thread safe typed arrays via keyword `shared`. - Struct embedding. -- IO streams. +- IO streams (`io.Reader`, `io.Writer` etc). - A powerful websocket module that conforms to RFC 6455 and passes the Autobahn test suite (498 client tests and 249 server tests). - The `net` module is now non blocking and is more feature complete providing similar API to Go. - V's graphics module now uses Metal/DirectX/OpenGL instead of just OpenGL. diff --git a/ROADMAP.md b/ROADMAP.md index 18e2ae3c9..22fee7b26 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,34 +1,13 @@ -## [Version 0.3](https://github.com/vlang/v/projects/5) -- [ ] [make `-autofree` the default](https://github.com/vlang/v/issues/6989) -- [x] [gc option] +## [Version 0.4] - [ ] [coroutines](https://github.com/vlang/v/discussions/11582) -- [x] channels -- [x] lock{} -- [x] thread safe arrays - [ ] [thread safe maps](https://github.com/vlang/v/discussions/11729) -- [ ] [C2V translator](https://github.com/vlang/v/issues/6985) -- [ ] doom.v -- [x] rune type -- [x] replace `ustring` with `[]rune` -- [x] fix `byte.str()` -- [x] maps with non-string keys -- [x] iOS/Android support - [ ] parallel parser - [ ] parallel checker -- [x] parallel cgen - [ ] parallel C compilation - [ ] `recover()` from panics -- [x] IO streams -- [x] struct embedding -- [x] interface embedding -- [x] interfaces: allow struct fields (not just methods) - [ ] vfmt: fix common errors automatically (make vars mutable and vice versa, add missing imports) -- [ ] method expressions with an explicit receiver as the first argument -- [x] short generics syntax (`foo(5)` instead of `foo(5)`) -- [ ] fix all remaining generics issues - [ ] merge v.c and v_win.c -- [x] more advanced errors, not just `error('message')` -- [ ] VLS for autocomplete, refactoring, go to definition etc - [ ] Recursive structs via optionals: `struct Node { next ?Node }` - [ ] Remove `foo = 0` for `&Foo` - [ ] Handle function pointers safely, remove `if function == 0 {` +- [ ] Bundle openssl like GC diff --git a/v.mod b/v.mod index e45b0c685..d71f66bec 100644 --- a/v.mod +++ b/v.mod @@ -1,7 +1,7 @@ Module { name: 'V' description: 'The V programming language.' - version: '0.2.4' + version: '0.3.0' license: 'MIT' repo_url: 'https://github.com/vlang/v' dependencies: [] diff --git a/vlib/v/util/version/version.v b/vlib/v/util/version/version.v index 1ab8f25dd..557fe9a57 100644 --- a/vlib/v/util/version/version.v +++ b/vlib/v/util/version/version.v @@ -2,7 +2,7 @@ module version import os -pub const v_version = '0.2.4' +pub const v_version = '0.3.0' // vhash() returns the build string C.V_COMMIT_HASH . See cmd/tools/gen_vc.v . pub fn vhash() string { diff --git a/vlib/v/vmod/parser_test.v b/vlib/v/vmod/parser_test.v index 38a7ca0eb..a1a7dddeb 100644 --- a/vlib/v/vmod/parser_test.v +++ b/vlib/v/vmod/parser_test.v @@ -8,7 +8,7 @@ fn test_ok() ? { ok_source := "Module { name: 'V' description: 'The V programming language.' - version: '0.2.4' + version: '0.3.0' license: 'MIT' repo_url: 'https://github.com/vlang/v' dependencies: [] @@ -18,7 +18,7 @@ fn test_ok() ? { content := vmod.decode(s)? assert content.name == 'V' assert content.description == 'The V programming language.' - assert content.version == '0.2.4' + assert content.version == '0.3.0' assert content.license == 'MIT' assert content.repo_url == 'https://github.com/vlang/v' assert content.dependencies == [] -- 2.30.2