Repository navigation
Releases
J2K / Jcmp 1.2.29.0
J2K / Jcmp 1.2.29.0
A self-hosting compiler for the J2K language that writes Linux ARM64 executables directly.
1.2.29.0: loops over i % c run in rounds of c turns (the loop benchmark 267 -> 139 ms, faster than clang -O2).
1.2.28.0: constants of locals written once, folding of (x+c1)-c2, main uses more registers (tile-map scan 2.2 -> 1.7 times clang -O2).
1.2.27.0: the optimiser keeps what it knows across an if (tile-map scan 2.4 -> 2.1 times gcc -O2).
1.2.26.0: loops over a few constants (for dy in 0..3) are unrolled completely (tile-map scan 127 -> 86 ms); new game-like benchmarks.
1.2.25.0: small structs in registers (vec2/vec3 code faster), bigger inlining, bigger assembler label table.
1.2.24.0: 32-bit int locals in registers, NEON for 32-bit reductions (int arrays 5 times faster).
1.2.23.0 (breaking): int is 32 bits, i64 is 64 bits; python3 tools/int2i64.py converts a program; see docs/MIGRATION.md.
1.2.22.0: fixes a speed regression of 1.2.19-1.2.21 (arrays 609 -> 124 ms), peephole copies, bench gate.
1.2.21.0: wrapping counter for i % c (loop 759 -> 270 ms), call arity in the lifter (game 64 -> 56 ms).
1.2.20.0: fix: Channel of a struct crashed on a closed empty channel (1.2.19.0 regression); strength reduction of frame-cell element addresses.
1.2.19.0: struct locals in registers (vec3 faster than gcc -O2), channel receive zero fix.
1.2.18.0: heap-array matmul as fast as gcc -O2, lifter scratch register fix.
1.2.17.0: variable-stride strength reduction and wider array-check hoisting (groundwork, no measured speed change).
1.2.16.0: array checks hoisted out of counted loops (heap-array matmul 2.5 times faster).
1.2.15.0: unroll-and-jam for global and heap arrays (matmul -25 %), float copy folding (mandel -11 %), new learning book.
1.2.14.0 (pre-release, in development): vector fmla and a 4 x 8 register-blocked matrix kernel in <neuron> (14 GFLOPS on one thread, about 31 with four, the same as a C program with the same NEON kernel), vectorised loops over heap arrays and matrix indices, fixes for String fields in { }, sort_by<String> and String^, and many new documents (a tutorial of 154 lessons, a beginner series, ten guides, a cheat sheet). The speed gate of 1.3.0 is not passed yet: see the CHANGELOG for what is not claimed.
1.2.13.0: loops over arrays are shorter again (the null check and the load of the header of an array move before the loop, constants too: sums of arrays run about 1.8 times faster, a float update about 1.35 times, the outputs are the same), a function of your program that has the name of a newer library function (pad, fmt) is yours again, the library <ui> 0.2.0 with a modern look and a sliding pill tab bar, the libraries <font> (real text, Thai too) and <softcanvas>, and a tutorial of 89 lessons.
1.2.12.0: shorter loops over arrays (the null checks of local arrays are gone, copies and float constants are folded, dead writes are not written), the library <ui> (buttons, switches, sliders for apps), the layout functions fmt, tohex, pad for jout, a cookbook of 15 runnable programs and three more tutorial lessons. Still not as fast as C: see bench/vs_c.
1.2.11.0: jout, jin, jerr (the new names of cout, cin, cerr; jcmp migrate moves a program to them), the library <npu> (a layer on the NPU of the phone), faster pushes and small arrays.
1.2.10.0: loops over arrays use 10-25 % fewer instructions (floats go straight into floating-point registers, register-offset loads and stores, repeated null checks and header loads are dropped). It is not yet as fast as C: see bench/vs_c and the plan in docs/design/25-language-roadmap.md.
1.2.8.0: jcmp fmt (the formatter: white space only, never the meaning; -c checks, -p prints), the language roadmap and the first comparison with C and C++ in the docs.
1.2.7.0: a float variable lives in a floating-point register and float arrays are read and written with one instruction (about 25% faster loops of floats), the library neurongpu (the matrix product on the GPU), retrieve (search in your own texts), mlp (train a small network in a few lines), vulkan 0.3.0 (compute from SPIR-V), simd 0.10.0.
1.2.6.0: i8x16 and a.dot(b) (the int8 dot product, SDOT: quantised AI models run 2-3 times faster), arguments beyond the eighth are checked and converted, the libraries neuron 0.7.0 (a GPT that trains on the phone), gguf/llama (run GGUF models), websocket, the Gateway of discord, and a tutorial of 82 lessons (down to bits, a tiny CPU and ARM64 machine words).
1.2.5.0: the libraries web (HTTP client), telegram and discord (bots), neuron 0.2.0 with a matrix product 5-7 times faster, the first benchmark against C (bench/) and the plan to make loops fast.
1.2.4.0: a root like an OS (JARIC_ROOT: /etc, /home, /u for the programs made by jcmp), Sys::chdir, the library qr (reads QR codes), Env no longer crashes in a shared library (-l).
1.2.3.0: interfaces (itf / impl), #import <native> makes the program dynamic by itself (no -dyn), virtual methods fixed on ARM32, new libraries (canvas2d, glcanvas, glapp, tasks, OpenGL ES textures and instancing).
1.2.2.0: jcmp -novec (no NEON code), messages that name jc lib install, nine new game-engine libraries.
1.2.1.0: default arguments (int add(int a, int b = 10)), text with values inside ("x = {x}"), functions that return a value in raw #!library files.
1.2.0.0: inheritance (struct Dog : Animal, virtual / override), native GPU from J2K (-dyn, OpenGL ES 3.1, Vulkan), jcmp -j N (many cores) and -progress, Fs::read.*, a fix for bool fields of structs.
1.1.0.0: shared libraries (jcmp file.jk -l -o lib.so and export functions that C, Java (JNI) and Python can call), a bigger Regex (groups, |, {n,m}, lazy quantifiers, find_all / replace / split), and a fix for return of a String taken from an array.
1.0.0.0: the first stable release (see CHANGELOG.md). Programs built with jcmp may be sold and distributed freely, every update of jcmp 1.x is free, and a 1.x.x.x release keeps your programs working.
0.9.206: a bug fixed (a double in a register after a caught throw), LICENSE 1.2 (programs built with jcmp may be sold freely), the tutorial has 48 lessons.
0.9.205: a little more speed on ARM32 (immediates, shifts, multiplication by a power of two).
0.9.204: a much faster ARM32 target (registers for the most used doubles and numbers: nbody 14x to 3.5x of the ARM64 time, sha256 19x to 11x).
0.9.203: #require cpu "crc32" checks the CPU when the program starts; read knows more keys and has key_timeout, password, decimal; the tutorial has 44 lessons.
0.9.202: reg<int x19> c (a variable in a register), Cache::prefetch, Cpu::speculation_barrier, #require cpu "crc32" with Cpu::crc32 / crc32c, the read module for the keyboard, and a longer tutorial (36 lessons).
0.9.201: cout prints a bool as true / false and a pointer as 0x...; cerr; faster integer division on ARM32.
0.9.200: wide arithmetic in Bit (carry, 128-bit product, divide with remainder, saturating add) and Flags::c in register blocks.
0.9.199: #expect instructions <= N keeps the code of a function short (the compiler stops when it grows).
0.9.198: Cpu::inst instructions on ARM32, a faster ARM32 (10 to 25%).
0.9.197: jcmp -show NAME (the code of a function), NEON loops on ARM32, docs/LIMITS.md and docs/API.md.
0.9.196: the CPU level on ARM32 (atomics, barriers, Cpu::, register blocks, naked functions, raw words) and a faster ARM32.
0.9.195: loops of float with literals are vectorized (widths 6x -> 1x of clang); the examples of the documents are compiled by the tests.
0.9.194: the compiler runs as an ARM32 program and compiles itself there (the same result, byte for byte).
0.9.193: ARM32: SIMD vectors, #multithread loops (214 of 230 tests run the same as on ARM64).
0.9.192: ARM32: defer, expr? with a text or array content, unsigned to double (205 of 230 tests run the same as on ARM64).
0.9.191: ARM32: sleep, the clock and processes work (system calls adapted to the 32-bit structures); expr? made from the syntax tree.
0.9.190: ARM32: jcmp -target arm32 writes 32-bit ARM programs (most of the tests run the same as on ARM64); the syntax tree makes 95% of the code.
0.9.189: the syntax tree builds more functions (methods on a text, String[] parameters, assert / exit as library functions); no change for programs.
0.9.188: the cache is on by default (~/.j2k/cache, J2K_CACHE= to turn it off); jcmp -jh FILE / -api NAME write the interface of a file or of a library.
0.9.187: the compiler brings the standard library, math, cpu and net; simd, quat, complex, stats, canvas, screen are downloaded with jget -li install NAME.
0.9.186: Sys: the system by names with checks; the library has no system call numbers; syscall(...) in a program warns, #allow syscall.
0.9.185: the cache is easy (J2K_CACHE, -nocache, -clean); pointer arithmetic from the syntax tree.
0.9.184: TLS also speaks AES-128-GCM (more servers are reached).
0.9.183: https from the library: TLS 1.3 with the check of the certificate chain, written in J2K (X25519, ChaCha20-Poly1305, RSA, ECDSA, X.509, DNS); Crypto.
0.9.182: Net::http.download (files to disk with a progress bar); jget moved to its own project, which downloads files, not only pages.
0.9.181: the library is the folder Library installed with the compiler (not inside it any more); Dns and Http in the library; jget -h http://... needs no curl.
0.9.180: jget -h URL fetches data from the web (lik...
J2K / Jcmp 1.2.28.0
J2K / Jcmp 1.2.28.0
A self-hosting compiler for the J2K language that writes Linux ARM64 executables directly.
1.2.28.0: constants of locals written once, folding of (x+c1)-c2, main uses more registers (tile-map scan 2.2 -> 1.7 times clang -O2).
1.2.27.0: the optimiser keeps what it knows across an if (tile-map scan 2.4 -> 2.1 times gcc -O2).
1.2.26.0: loops over a few constants (for dy in 0..3) are unrolled completely (tile-map scan 127 -> 86 ms); new game-like benchmarks.
1.2.25.0: small structs in registers (vec2/vec3 code faster), bigger inlining, bigger assembler label table.
1.2.24.0: 32-bit int locals in registers, NEON for 32-bit reductions (int arrays 5 times faster).
1.2.23.0 (breaking): int is 32 bits, i64 is 64 bits; python3 tools/int2i64.py converts a program; see docs/MIGRATION.md.
1.2.22.0: fixes a speed regression of 1.2.19-1.2.21 (arrays 609 -> 124 ms), peephole copies, bench gate.
1.2.21.0: wrapping counter for i % c (loop 759 -> 270 ms), call arity in the lifter (game 64 -> 56 ms).
1.2.20.0: fix: Channel of a struct crashed on a closed empty channel (1.2.19.0 regression); strength reduction of frame-cell element addresses.
1.2.19.0: struct locals in registers (vec3 faster than gcc -O2), channel receive zero fix.
1.2.18.0: heap-array matmul as fast as gcc -O2, lifter scratch register fix.
1.2.17.0: variable-stride strength reduction and wider array-check hoisting (groundwork, no measured speed change).
1.2.16.0: array checks hoisted out of counted loops (heap-array matmul 2.5 times faster).
1.2.15.0: unroll-and-jam for global and heap arrays (matmul -25 %), float copy folding (mandel -11 %), new learning book.
1.2.14.0 (pre-release, in development): vector fmla and a 4 x 8 register-blocked matrix kernel in <neuron> (14 GFLOPS on one thread, about 31 with four, the same as a C program with the same NEON kernel), vectorised loops over heap arrays and matrix indices, fixes for String fields in { }, sort_by<String> and String^, and many new documents (a tutorial of 154 lessons, a beginner series, ten guides, a cheat sheet). The speed gate of 1.3.0 is not passed yet: see the CHANGELOG for what is not claimed.
1.2.13.0: loops over arrays are shorter again (the null check and the load of the header of an array move before the loop, constants too: sums of arrays run about 1.8 times faster, a float update about 1.35 times, the outputs are the same), a function of your program that has the name of a newer library function (pad, fmt) is yours again, the library <ui> 0.2.0 with a modern look and a sliding pill tab bar, the libraries <font> (real text, Thai too) and <softcanvas>, and a tutorial of 89 lessons.
1.2.12.0: shorter loops over arrays (the null checks of local arrays are gone, copies and float constants are folded, dead writes are not written), the library <ui> (buttons, switches, sliders for apps), the layout functions fmt, tohex, pad for jout, a cookbook of 15 runnable programs and three more tutorial lessons. Still not as fast as C: see bench/vs_c.
1.2.11.0: jout, jin, jerr (the new names of cout, cin, cerr; jcmp migrate moves a program to them), the library <npu> (a layer on the NPU of the phone), faster pushes and small arrays.
1.2.10.0: loops over arrays use 10-25 % fewer instructions (floats go straight into floating-point registers, register-offset loads and stores, repeated null checks and header loads are dropped). It is not yet as fast as C: see bench/vs_c and the plan in docs/design/25-language-roadmap.md.
1.2.8.0: jcmp fmt (the formatter: white space only, never the meaning; -c checks, -p prints), the language roadmap and the first comparison with C and C++ in the docs.
1.2.7.0: a float variable lives in a floating-point register and float arrays are read and written with one instruction (about 25% faster loops of floats), the library neurongpu (the matrix product on the GPU), retrieve (search in your own texts), mlp (train a small network in a few lines), vulkan 0.3.0 (compute from SPIR-V), simd 0.10.0.
1.2.6.0: i8x16 and a.dot(b) (the int8 dot product, SDOT: quantised AI models run 2-3 times faster), arguments beyond the eighth are checked and converted, the libraries neuron 0.7.0 (a GPT that trains on the phone), gguf/llama (run GGUF models), websocket, the Gateway of discord, and a tutorial of 82 lessons (down to bits, a tiny CPU and ARM64 machine words).
1.2.5.0: the libraries web (HTTP client), telegram and discord (bots), neuron 0.2.0 with a matrix product 5-7 times faster, the first benchmark against C (bench/) and the plan to make loops fast.
1.2.4.0: a root like an OS (JARIC_ROOT: /etc, /home, /u for the programs made by jcmp), Sys::chdir, the library qr (reads QR codes), Env no longer crashes in a shared library (-l).
1.2.3.0: interfaces (itf / impl), #import <native> makes the program dynamic by itself (no -dyn), virtual methods fixed on ARM32, new libraries (canvas2d, glcanvas, glapp, tasks, OpenGL ES textures and instancing).
1.2.2.0: jcmp -novec (no NEON code), messages that name jc lib install, nine new game-engine libraries.
1.2.1.0: default arguments (int add(int a, int b = 10)), text with values inside ("x = {x}"), functions that return a value in raw #!library files.
1.2.0.0: inheritance (struct Dog : Animal, virtual / override), native GPU from J2K (-dyn, OpenGL ES 3.1, Vulkan), jcmp -j N (many cores) and -progress, Fs::read.*, a fix for bool fields of structs.
1.1.0.0: shared libraries (jcmp file.jk -l -o lib.so and export functions that C, Java (JNI) and Python can call), a bigger Regex (groups, |, {n,m}, lazy quantifiers, find_all / replace / split), and a fix for return of a String taken from an array.
1.0.0.0: the first stable release (see CHANGELOG.md). Programs built with jcmp may be sold and distributed freely, every update of jcmp 1.x is free, and a 1.x.x.x release keeps your programs working.
0.9.206: a bug fixed (a double in a register after a caught throw), LICENSE 1.2 (programs built with jcmp may be sold freely), the tutorial has 48 lessons.
0.9.205: a little more speed on ARM32 (immediates, shifts, multiplication by a power of two).
0.9.204: a much faster ARM32 target (registers for the most used doubles and numbers: nbody 14x to 3.5x of the ARM64 time, sha256 19x to 11x).
0.9.203: #require cpu "crc32" checks the CPU when the program starts; read knows more keys and has key_timeout, password, decimal; the tutorial has 44 lessons.
0.9.202: reg<int x19> c (a variable in a register), Cache::prefetch, Cpu::speculation_barrier, #require cpu "crc32" with Cpu::crc32 / crc32c, the read module for the keyboard, and a longer tutorial (36 lessons).
0.9.201: cout prints a bool as true / false and a pointer as 0x...; cerr; faster integer division on ARM32.
0.9.200: wide arithmetic in Bit (carry, 128-bit product, divide with remainder, saturating add) and Flags::c in register blocks.
0.9.199: #expect instructions <= N keeps the code of a function short (the compiler stops when it grows).
0.9.198: Cpu::inst instructions on ARM32, a faster ARM32 (10 to 25%).
0.9.197: jcmp -show NAME (the code of a function), NEON loops on ARM32, docs/LIMITS.md and docs/API.md.
0.9.196: the CPU level on ARM32 (atomics, barriers, Cpu::, register blocks, naked functions, raw words) and a faster ARM32.
0.9.195: loops of float with literals are vectorized (widths 6x -> 1x of clang); the examples of the documents are compiled by the tests.
0.9.194: the compiler runs as an ARM32 program and compiles itself there (the same result, byte for byte).
0.9.193: ARM32: SIMD vectors, #multithread loops (214 of 230 tests run the same as on ARM64).
0.9.192: ARM32: defer, expr? with a text or array content, unsigned to double (205 of 230 tests run the same as on ARM64).
0.9.191: ARM32: sleep, the clock and processes work (system calls adapted to the 32-bit structures); expr? made from the syntax tree.
0.9.190: ARM32: jcmp -target arm32 writes 32-bit ARM programs (most of the tests run the same as on ARM64); the syntax tree makes 95% of the code.
0.9.189: the syntax tree builds more functions (methods on a text, String[] parameters, assert / exit as library functions); no change for programs.
0.9.188: the cache is on by default (~/.j2k/cache, J2K_CACHE= to turn it off); jcmp -jh FILE / -api NAME write the interface of a file or of a library.
0.9.187: the compiler brings the standard library, math, cpu and net; simd, quat, complex, stats, canvas, screen are downloaded with jget -li install NAME.
0.9.186: Sys: the system by names with checks; the library has no system call numbers; syscall(...) in a program warns, #allow syscall.
0.9.185: the cache is easy (J2K_CACHE, -nocache, -clean); pointer arithmetic from the syntax tree.
0.9.184: TLS also speaks AES-128-GCM (more servers are reached).
0.9.183: https from the library: TLS 1.3 with the check of the certificate chain, written in J2K (X25519, ChaCha20-Poly1305, RSA, ECDSA, X.509, DNS); Crypto.
0.9.182: Net::http.download (files to disk with a progress bar); jget moved to its own project, which downloads files, not only pages.
0.9.181: the library is the folder Library installed with the compiler (not inside it any more); Dns and Http in the library; jget -h http://... needs no curl.
0.9.180: jget -h URL fetches data from the web (like curl / wget), jget -li install NAME for libraries; the libraries inside the compiler need no install.
0.9.179: ...
J2K / Jcmp 1.2.27.0
J2K / Jcmp 1.2.27.0
A self-hosting compiler for the J2K language that writes Linux ARM64 executables directly.
1.2.27.0: the optimiser keeps what it knows across an if (tile-map scan 2.4 -> 2.1 times gcc -O2).
1.2.26.0: loops over a few constants (for dy in 0..3) are unrolled completely (tile-map scan 127 -> 86 ms); new game-like benchmarks.
1.2.25.0: small structs in registers (vec2/vec3 code faster), bigger inlining, bigger assembler label table.
1.2.24.0: 32-bit int locals in registers, NEON for 32-bit reductions (int arrays 5 times faster).
1.2.23.0 (breaking): int is 32 bits, i64 is 64 bits; python3 tools/int2i64.py converts a program; see docs/MIGRATION.md.
1.2.22.0: fixes a speed regression of 1.2.19-1.2.21 (arrays 609 -> 124 ms), peephole copies, bench gate.
1.2.21.0: wrapping counter for i % c (loop 759 -> 270 ms), call arity in the lifter (game 64 -> 56 ms).
1.2.20.0: fix: Channel of a struct crashed on a closed empty channel (1.2.19.0 regression); strength reduction of frame-cell element addresses.
1.2.19.0: struct locals in registers (vec3 faster than gcc -O2), channel receive zero fix.
1.2.18.0: heap-array matmul as fast as gcc -O2, lifter scratch register fix.
1.2.17.0: variable-stride strength reduction and wider array-check hoisting (groundwork, no measured speed change).
1.2.16.0: array checks hoisted out of counted loops (heap-array matmul 2.5 times faster).
1.2.15.0: unroll-and-jam for global and heap arrays (matmul -25 %), float copy folding (mandel -11 %), new learning book.
1.2.14.0 (pre-release, in development): vector fmla and a 4 x 8 register-blocked matrix kernel in <neuron> (14 GFLOPS on one thread, about 31 with four, the same as a C program with the same NEON kernel), vectorised loops over heap arrays and matrix indices, fixes for String fields in { }, sort_by<String> and String^, and many new documents (a tutorial of 154 lessons, a beginner series, ten guides, a cheat sheet). The speed gate of 1.3.0 is not passed yet: see the CHANGELOG for what is not claimed.
1.2.13.0: loops over arrays are shorter again (the null check and the load of the header of an array move before the loop, constants too: sums of arrays run about 1.8 times faster, a float update about 1.35 times, the outputs are the same), a function of your program that has the name of a newer library function (pad, fmt) is yours again, the library <ui> 0.2.0 with a modern look and a sliding pill tab bar, the libraries <font> (real text, Thai too) and <softcanvas>, and a tutorial of 89 lessons.
1.2.12.0: shorter loops over arrays (the null checks of local arrays are gone, copies and float constants are folded, dead writes are not written), the library <ui> (buttons, switches, sliders for apps), the layout functions fmt, tohex, pad for jout, a cookbook of 15 runnable programs and three more tutorial lessons. Still not as fast as C: see bench/vs_c.
1.2.11.0: jout, jin, jerr (the new names of cout, cin, cerr; jcmp migrate moves a program to them), the library <npu> (a layer on the NPU of the phone), faster pushes and small arrays.
1.2.10.0: loops over arrays use 10-25 % fewer instructions (floats go straight into floating-point registers, register-offset loads and stores, repeated null checks and header loads are dropped). It is not yet as fast as C: see bench/vs_c and the plan in docs/design/25-language-roadmap.md.
1.2.8.0: jcmp fmt (the formatter: white space only, never the meaning; -c checks, -p prints), the language roadmap and the first comparison with C and C++ in the docs.
1.2.7.0: a float variable lives in a floating-point register and float arrays are read and written with one instruction (about 25% faster loops of floats), the library neurongpu (the matrix product on the GPU), retrieve (search in your own texts), mlp (train a small network in a few lines), vulkan 0.3.0 (compute from SPIR-V), simd 0.10.0.
1.2.6.0: i8x16 and a.dot(b) (the int8 dot product, SDOT: quantised AI models run 2-3 times faster), arguments beyond the eighth are checked and converted, the libraries neuron 0.7.0 (a GPT that trains on the phone), gguf/llama (run GGUF models), websocket, the Gateway of discord, and a tutorial of 82 lessons (down to bits, a tiny CPU and ARM64 machine words).
1.2.5.0: the libraries web (HTTP client), telegram and discord (bots), neuron 0.2.0 with a matrix product 5-7 times faster, the first benchmark against C (bench/) and the plan to make loops fast.
1.2.4.0: a root like an OS (JARIC_ROOT: /etc, /home, /u for the programs made by jcmp), Sys::chdir, the library qr (reads QR codes), Env no longer crashes in a shared library (-l).
1.2.3.0: interfaces (itf / impl), #import <native> makes the program dynamic by itself (no -dyn), virtual methods fixed on ARM32, new libraries (canvas2d, glcanvas, glapp, tasks, OpenGL ES textures and instancing).
1.2.2.0: jcmp -novec (no NEON code), messages that name jc lib install, nine new game-engine libraries.
1.2.1.0: default arguments (int add(int a, int b = 10)), text with values inside ("x = {x}"), functions that return a value in raw #!library files.
1.2.0.0: inheritance (struct Dog : Animal, virtual / override), native GPU from J2K (-dyn, OpenGL ES 3.1, Vulkan), jcmp -j N (many cores) and -progress, Fs::read.*, a fix for bool fields of structs.
1.1.0.0: shared libraries (jcmp file.jk -l -o lib.so and export functions that C, Java (JNI) and Python can call), a bigger Regex (groups, |, {n,m}, lazy quantifiers, find_all / replace / split), and a fix for return of a String taken from an array.
1.0.0.0: the first stable release (see CHANGELOG.md). Programs built with jcmp may be sold and distributed freely, every update of jcmp 1.x is free, and a 1.x.x.x release keeps your programs working.
0.9.206: a bug fixed (a double in a register after a caught throw), LICENSE 1.2 (programs built with jcmp may be sold freely), the tutorial has 48 lessons.
0.9.205: a little more speed on ARM32 (immediates, shifts, multiplication by a power of two).
0.9.204: a much faster ARM32 target (registers for the most used doubles and numbers: nbody 14x to 3.5x of the ARM64 time, sha256 19x to 11x).
0.9.203: #require cpu "crc32" checks the CPU when the program starts; read knows more keys and has key_timeout, password, decimal; the tutorial has 44 lessons.
0.9.202: reg<int x19> c (a variable in a register), Cache::prefetch, Cpu::speculation_barrier, #require cpu "crc32" with Cpu::crc32 / crc32c, the read module for the keyboard, and a longer tutorial (36 lessons).
0.9.201: cout prints a bool as true / false and a pointer as 0x...; cerr; faster integer division on ARM32.
0.9.200: wide arithmetic in Bit (carry, 128-bit product, divide with remainder, saturating add) and Flags::c in register blocks.
0.9.199: #expect instructions <= N keeps the code of a function short (the compiler stops when it grows).
0.9.198: Cpu::inst instructions on ARM32, a faster ARM32 (10 to 25%).
0.9.197: jcmp -show NAME (the code of a function), NEON loops on ARM32, docs/LIMITS.md and docs/API.md.
0.9.196: the CPU level on ARM32 (atomics, barriers, Cpu::, register blocks, naked functions, raw words) and a faster ARM32.
0.9.195: loops of float with literals are vectorized (widths 6x -> 1x of clang); the examples of the documents are compiled by the tests.
0.9.194: the compiler runs as an ARM32 program and compiles itself there (the same result, byte for byte).
0.9.193: ARM32: SIMD vectors, #multithread loops (214 of 230 tests run the same as on ARM64).
0.9.192: ARM32: defer, expr? with a text or array content, unsigned to double (205 of 230 tests run the same as on ARM64).
0.9.191: ARM32: sleep, the clock and processes work (system calls adapted to the 32-bit structures); expr? made from the syntax tree.
0.9.190: ARM32: jcmp -target arm32 writes 32-bit ARM programs (most of the tests run the same as on ARM64); the syntax tree makes 95% of the code.
0.9.189: the syntax tree builds more functions (methods on a text, String[] parameters, assert / exit as library functions); no change for programs.
0.9.188: the cache is on by default (~/.j2k/cache, J2K_CACHE= to turn it off); jcmp -jh FILE / -api NAME write the interface of a file or of a library.
0.9.187: the compiler brings the standard library, math, cpu and net; simd, quat, complex, stats, canvas, screen are downloaded with jget -li install NAME.
0.9.186: Sys: the system by names with checks; the library has no system call numbers; syscall(...) in a program warns, #allow syscall.
0.9.185: the cache is easy (J2K_CACHE, -nocache, -clean); pointer arithmetic from the syntax tree.
0.9.184: TLS also speaks AES-128-GCM (more servers are reached).
0.9.183: https from the library: TLS 1.3 with the check of the certificate chain, written in J2K (X25519, ChaCha20-Poly1305, RSA, ECDSA, X.509, DNS); Crypto.
0.9.182: Net::http.download (files to disk with a progress bar); jget moved to its own project, which downloads files, not only pages.
0.9.181: the library is the folder Library installed with the compiler (not inside it any more); Dns and Http in the library; jget -h http://... needs no curl.
0.9.180: jget -h URL fetches data from the web (like curl / wget), jget -li install NAME for libraries; the libraries inside the compiler need no install.
0.9.179: the compiler is about twice as fast (three slow places found with a profiler); the programs it makes are unchanged.
0.9.178: jget version...
Jcmp 1.2.26.0
Added (speed, games): for loops over a few constants (for dy in 0..3) are unrolled completely (tile-map scan 127 -> 86 ms); new game-like benchmarks particles, tilemap, soa.
Fixed: none.
Jcmp 1.2.25.0
Added (speed, games): the words of small structs (vec2, vec3) live in registers; callees up to 30 instructions are inlined (game benchmark 58 -> 50 ms).
Fixed: the assembler failed on big programs (label table 32768 -> 131072); an inlined callee that takes a function address kept the old name.
Jcmp 1.2.24.0
Added (speed): scalar int locals live in registers; 32-bit reductions use four NEON lanes; vector loops keep pointer and counter in registers (int arrays about 5 times faster, loop 735 -> 271 ms).
Fixed: none.
Jcmp 1.2.23.0
Changed (breaking): int is now a 32-bit integer (i32 is another name of it) and i64 is the 64-bit integer; int + int wraps at 32 bits. python3 tools/int2i64.py converts a program that needs 64 bits (docs/MIGRATION.md).
Added: i64 as a type name, t609. Fixed: Span and Span were different instances.
Jcmp 1.2.22.0
Fixed: speed regression of 1.2.19-1.2.21 (arrays benchmark 609 -> 124 ms: the vectoriser gave up on a double kept in a stack cell); debug switch of the wrapping counter had a shared bit.
Added: peephole rules for x16 copies and the counter add/cmp, tools/bench/gate.sh.
Jcmp 1.2.21.0
Added: wrapping counter for i % c in counted loops (loop benchmark 759 -> 270 ms); calls read only the argument registers of the callee (game benchmark 64 -> 56 ms).
Fixed: none.
Jcmp 1.2.20.0
Fixed: Channel of a struct crashed on receive from a closed empty channel (regression of 1.2.19.0).
Added: strength reduction of element addresses kept in frame cells; game benchmark.