mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
V 0.3
This commit is contained in:
parent
9f59dbd319
commit
ec75860453
98
CHANGELOG.md
98
CHANGELOG.md
|
@ -1,17 +1,100 @@
|
||||||
-## V 0.2.5
|
## V 0.3
|
||||||
-*Not yet released, changelog is not full*
|
*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`.
|
- Introduce `isize` and `usize` types, deprecate `size_t` in favor of `usize`.
|
||||||
- Add `datatypes` and `datatypes.fsm` modules.
|
- Add `datatypes` and `datatypes.fsm` modules.
|
||||||
- Add `compile_error` and `compile_warn` comptime functions.
|
- 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.
|
- Bare metal support. Vinix OS kernel is now being developed in V.
|
||||||
- Builtin web framework vweb is now multithreaded, all CPU cores are used.
|
- Builtin web framework vweb is now multithreaded, all CPU cores are used.
|
||||||
- String interpolation and struct stringers are now implemented in pure V
|
- String interpolation and struct stringers are now implemented in pure V
|
||||||
with a much cleaner and faster implementation. Previously libc's `sprintf`
|
with a much cleaner and faster implementation. Previously libc's `sprintf`
|
||||||
was used.
|
was used.
|
||||||
- Improved `unused variable` warning. Assigning to a variable no longer marks it as 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
|
## V 0.2.2 - 0.2.3
|
||||||
*22 Jan 2021*
|
*22 Jan 2021*
|
||||||
|
@ -51,12 +134,11 @@ from local variables.
|
||||||
|
|
||||||
## V 0.2
|
## V 0.2
|
||||||
*22 Dec 2020*
|
*22 Dec 2020*
|
||||||
- Compile-time memory management via `-autofree`. [Video demonstration](https://www.youtube.com/watch?v=gmB8ea8uLsM).
|
- Compile-time memory management via `-autofree` (not production ready yet). [Video demonstration](https://www.youtube.com/watch?v=gmB8ea8uLsM).
|
||||||
It will be enabled by default in 0.3
|
|
||||||
- Channels and locks.
|
- Channels and locks.
|
||||||
- Thread safe typed arrays via keyword `shared`.
|
- Thread safe typed arrays via keyword `shared`.
|
||||||
- Struct embedding.
|
- 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).
|
- 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.
|
- 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.
|
- V's graphics module now uses Metal/DirectX/OpenGL instead of just OpenGL.
|
||||||
|
|
25
ROADMAP.md
25
ROADMAP.md
|
@ -1,34 +1,13 @@
|
||||||
## [Version 0.3](https://github.com/vlang/v/projects/5)
|
## [Version 0.4]
|
||||||
- [ ] [make `-autofree` the default](https://github.com/vlang/v/issues/6989)
|
|
||||||
- [x] [gc option]
|
|
||||||
- [ ] [coroutines](https://github.com/vlang/v/discussions/11582)
|
- [ ] [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)
|
- [ ] [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 parser
|
||||||
- [ ] parallel checker
|
- [ ] parallel checker
|
||||||
- [x] parallel cgen
|
|
||||||
- [ ] parallel C compilation
|
- [ ] parallel C compilation
|
||||||
- [ ] `recover()` from panics
|
- [ ] `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)
|
- [ ] 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<int>(5)`)
|
|
||||||
- [ ] fix all remaining generics issues
|
|
||||||
- [ ] merge v.c and v_win.c
|
- [ ] 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 }`
|
- [ ] Recursive structs via optionals: `struct Node { next ?Node }`
|
||||||
- [ ] Remove `foo = 0` for `&Foo`
|
- [ ] Remove `foo = 0` for `&Foo`
|
||||||
- [ ] Handle function pointers safely, remove `if function == 0 {`
|
- [ ] Handle function pointers safely, remove `if function == 0 {`
|
||||||
|
- [ ] Bundle openssl like GC
|
||||||
|
|
2
v.mod
2
v.mod
|
@ -1,7 +1,7 @@
|
||||||
Module {
|
Module {
|
||||||
name: 'V'
|
name: 'V'
|
||||||
description: 'The V programming language.'
|
description: 'The V programming language.'
|
||||||
version: '0.2.4'
|
version: '0.3.0'
|
||||||
license: 'MIT'
|
license: 'MIT'
|
||||||
repo_url: 'https://github.com/vlang/v'
|
repo_url: 'https://github.com/vlang/v'
|
||||||
dependencies: []
|
dependencies: []
|
||||||
|
|
|
@ -2,7 +2,7 @@ module version
|
||||||
|
|
||||||
import os
|
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 .
|
// vhash() returns the build string C.V_COMMIT_HASH . See cmd/tools/gen_vc.v .
|
||||||
pub fn vhash() string {
|
pub fn vhash() string {
|
||||||
|
|
|
@ -8,7 +8,7 @@ fn test_ok() ? {
|
||||||
ok_source := "Module {
|
ok_source := "Module {
|
||||||
name: 'V'
|
name: 'V'
|
||||||
description: 'The V programming language.'
|
description: 'The V programming language.'
|
||||||
version: '0.2.4'
|
version: '0.3.0'
|
||||||
license: 'MIT'
|
license: 'MIT'
|
||||||
repo_url: 'https://github.com/vlang/v'
|
repo_url: 'https://github.com/vlang/v'
|
||||||
dependencies: []
|
dependencies: []
|
||||||
|
@ -18,7 +18,7 @@ fn test_ok() ? {
|
||||||
content := vmod.decode(s)?
|
content := vmod.decode(s)?
|
||||||
assert content.name == 'V'
|
assert content.name == 'V'
|
||||||
assert content.description == 'The V programming language.'
|
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.license == 'MIT'
|
||||||
assert content.repo_url == 'https://github.com/vlang/v'
|
assert content.repo_url == 'https://github.com/vlang/v'
|
||||||
assert content.dependencies == []
|
assert content.dependencies == []
|
||||||
|
|
Loading…
Reference in New Issue
Block a user