diff --git a/CHANGELOG.md b/CHANGELOG.md index 7df648fdd7..669babb5cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,115 @@ +## V 0.4.2 +*30 September 2023* + +#### Improvements in the language +- Short lambda expressions like `a.sorted(|x,y| x > y)` (#19390) +- Support `-os plan9`, `$if plan9 {`, and `_plan9.c.v` (stage 1 for plan9) (#19389) +- fmt: simplify the processing logic for removing inline comments (#19297) +- Align the custom values of the enum fields (#19331) +- Do not warn/error for `import flag as _` +- Keep anon struct decl fields in interfaces (#19461) +- Support -N, turning all notices into errors, to ease the process of finding places that may need attention/correction + +#### Breaking changes +- Remove inline comments (#19263) + +#### Checker improvements/fixes +- Disallow module name duplicates in local names (#18118) +- Check enum fields with duplicate value (fix #19309) (#19310) +- Disallow alias ptr cast of a map value (#19336) +- Require `else` branch in `[flag]` enum match (#19375) +- Disallow assigning pointer values to option struct fields (#19380) +- Fix generic comparison for conditional assignment (#19401) +- Allow using ! and ~ on aliased bool and integral types (#19403) +- Warn -> error for uninitialized ref fields +- Parser, checker: allow lambdas anywhere anonymous functions are expected (#19436) +- Allow for `each(a, |x| println(x))`, i.e. using lambda expressions, when expecting `fn (x int)` +- Check fixed array init with default expression (#19472) +- Allow for `const source = $embed_file(@FILE).to_string()` +- Fix C.type in imported modules + +#### Parser improvements +- parser: fix fixed array with eval const size (#19269) +- parser: disallow using `sql` as name (#19298) +- parser: fix `;` support for `module x;` +- parser: fix fixed array of option values (`_ := [10]?int{}`) (#19392) +- parser: fix assigning with in another module sumtypes 2 (#19415) +- v.ast: improve Stmt.str(), showing more details about ast.Block, ast.DeferStmt, ast.ForInStmt, ast.GlobalDecl + +#### Compiler internals +- pref: support `-fast-math`, passing either -ffast-math or /fp:fast (for msvc) to the C backend, and `$if fast_math {` to detect it at comptime +- parser, transformer: fix transformer.infix_expr() and cleanup parse_types.v (related #19269) (#19276) +- pref,builder: support -use-os-system-to-run to workaround segfaults using not fully updated xcode command line tools +- v.builder: fix compiling code, that imports modules from both `src/modules` and `modules` (#19437) +- os, v.builder: show more details, when a program ran by `v run file.v`, exits by a signal (fix #19412) (#19471) + +#### Standard library +- math: speedup the pure V math.pow implementation for non-fractional powers (#19270) +- math: add more C. fn overrides, for the default C backend (speed up examples/path_tracing.v) (#19271) +- time: add `MMM` support for parse_format() (#19284) +- os: include sys/sysctl.h on FreeBSD to avoid implicit definition of sysctl function (#19293) +- crypto.md5: change the Digest.write return type, from `?int` to `!int` (#19311) +- v.help: use os.executable() instead of @VEXE as an anchor, so `v help` will work more robustly. +- toml: fix custom `to_toml` for complex structs (#19338) +- all: support `;` statements, allowing for oneliners like `./v -e 'import os; println( os.ls(os.args[1])!.sorted(a > b) )' vlib/math` (#19345) +- vlib: add net.http.file, allowing for `v -e "import net.http.file; file.serve()"` (#19348) +- vlib: remove functions and fields, deprecated before 2023-03-20 +- toml: fix toml encoding of complex types (#19408) +- arrays: add a partition function, that splits a given array, based on a criteria, passed as a callback fn (#19417) +- toml: add decoding for struct fields of type map[string]T (#19447) +- arrays: add arrays.each, arrays.each_indexed, and tests for them +- encoding.html: implement `unescape()` (#19267) + +#### Web +- net.http: fix http.fetch(), without explicit method (default again to .get, not to .acl) +- net.http: default explicitly to Method.get for http.Request and http.FetchConfig too +- examples: add examples/fetch_ip.v, showing how to contact http://ifconfig.co/json and parse the result +- net.http: fix post error with https on windows (#19334) +- net.ssl: implement SSLConn.peer_addr() (#19333) + +#### ORM +- orm: add `references` attribute to allow foreign key declarations on fields (#19349) +- orm: support different foreign key types, not just an integer id (#19337) +- orm: add support for V enum struct fields (#19374) +- orm: quote table and field name in `[references]` (#19387) + +#### Database drivers +- db.pg: allow postgres connection using service definitions (#19288) + +#### Native backend +- native: make native tests pass on windows; refactor PE file generation (#19140) +- native: parse dll files to resolve extern symbols (#19433) + +#### C backend +- Fix printing struct with thread field (#19320) +- Fix the logic around the definition of VNORETURN and VUNREACHABLE (less warnings on FreeBSD) (#19316) +- Add support for `-d trace_cgen_stmt`, document it in CONTRIBUTING.md +- Fix printing smartcast interface variable (fix #18886) (#19372) +- Fix interface with multiple embedded fields (#19377) +- Fix channel of interface (fix #19382) (#19383) +- Fix fixed array of option type default (#19397) +- Fix interface with option field (#19434) +- Fix promoting an alias typed value, to a sumtype of the alias's base type (fix #19407) (#19423) +- Remove the special plan9 support code, treat it instead as a posix system in cheaders.v (#19445) +- Fix printing slice of fn call string (#19450) +- Fix `type VType = &C.CType` (#19452) +- Fix array of fns index call with direct_array_access mode (#19460) + +#### Tools +- bench: a new bench/ directory for language benchmarks +- ci: test the pure V math versions without .c.v overrides on the CI too (#19292) +- github: add automatically info about voting to all new issues (#19351) +- tools: add -E flag to `v test-parser`, that will show the partial source that caused the parser to fail with `-no-builtin -check-syntax file.v` +- ci: bring back gitly +- github: improve the voting message for issues (#19448) +- vcreate: update templates, add `lib` (#19444) + +### Operating System support +- builtin: use `libgc-threaded` on FreeBSD, to get the threaded version of libgc (#19294) + +#### Examples +- examples: add more .obj files for 06_obj_viewer (#19406) + ## V 0.4.1 *3 September 2023* diff --git a/cmd/tools/changelog_helper.v b/cmd/tools/changelog_helper.v index 6f7ed946ac..2af3b72c7c 100644 --- a/cmd/tools/changelog_helper.v +++ b/cmd/tools/changelog_helper.v @@ -2,7 +2,7 @@ module main import os -const git_log_cmd = 'git log --pretty=format:"%s" --simplify-merges' +const git_log_cmd = 'git log -n 500 --pretty=format:"%s" --simplify-merges' enum Category { checker @@ -194,6 +194,7 @@ const category_map = { .comptime: '#### Comptime' .tools: '#### Tools' .compiler_internals: '#### Compiler internals' + .examples: '#### Examples' } fn (l Line) write_at_category(txt string) ?string { diff --git a/examples/sokol/06_obj_viewer/show_obj.v b/examples/sokol/06_obj_viewer/show_obj.v index 9e0c901b02..d561540a72 100644 --- a/examples/sokol/06_obj_viewer/show_obj.v +++ b/examples/sokol/06_obj_viewer/show_obj.v @@ -277,7 +277,8 @@ fn main() { obj_part: 0 } - app.file_name = 'v.obj' // default object is the v logo + // app.file_name = 'v.obj' // default object is the v logo + app.file_name = 'utahTeapot.obj' // default object is the v logo app.single_material_flag = false $if !android { diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index f302d77b9d..343014abbd 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -4804,7 +4804,8 @@ fn (mut c Checker) ensure_type_exists(typ ast.Type, pos token.Pos) bool { return false } sym := c.table.sym(typ) - if !c.is_builtin_mod && sym.kind == .struct_ && !sym.is_pub && sym.mod != c.mod { + if !c.is_builtin_mod && sym.kind == .struct_ && !sym.is_pub && sym.language == .v + && sym.mod != c.mod { c.error('struct `${sym.name}` was declared as private to module `${sym.mod}`, so it can not be used inside module `${c.mod}`', pos) return false