The 1500 commit monster has landed!
- language features:
- gerbil.pkg: gerbil package directives, recognized by the expander and package manager
- properly support read-only GERBIL_HOME
- GERBIL_PATH and ~/.gerbil for user environment
- support the SMP scheduler
- new versioning scheme with git describe
- tools:
- gxprof: the Gerbil proflier
- gxtags: emacs TAGS for Gerbil sources
- gxpkg: the Gerbil Package Manager
- build: new build script [david varela]
- prelude:
- gerbil/core:
- defstruct/defclass:
- accept printer and equality specification
- type macro is applicable
- unchecked accessor/mutators for dragon power up
- for-syntax, for-tempate import/export expanders
- definline macro
- defmethod defines @next-method macro
- match understands apply patterns
- defstruct/defclass:
- gerbil/gambit/threads: spawn zoo
- gerbil/core:
- expander:
- support internal declares
- parse gerbil.pkg for implicit package declarations and load path rebasing
- fix evaluation time for negative phase imports; eval templates at phi=0 import time.
- fix mark tracking in syntax (the macro)
- datum->syntax accepts optional parameter to borrow marks from syntax quotes
- compiler:
- compiled syntax marks; MacroMacro Liberation day.
- support debug options
- correctly track imports for side-effects
- optimize struct-instance-init! and unchecked accessors/mutators
- new options for gxc: -gsc-flag -gsc-option -genv -gsrc -include-gambit-sharp
- runtime:
- reduce weight of gx-gambc1, cond-expand out the now unused bootstrap eval
- absent-obj
- custom structure equality and printing
- load path consing
- replx
- implement class->list
- methods for builtin record types
- interpreter:
- system wide interactive init
- reload
- enter!
- stdlib:
- the stdlib is now built with debug environments and sources to allow debug introspection
- NEW packages and libraries:
- std/build-script: easy package build scripts.
- std/crypto
- std/crypto/hmac: HMAC support
- std/debug: debugging utilities.
- std/debug/heap: heap walking and statistics
- std/debug/memleak: memory leak monitoring
- std/debug/threads: thread stack dumping
- std/db
- std/db/postgres: pure Gerbil PostgreSQL driver
- std/misc
- std/misc/completion: asynchronous completion tokens
- std/misc/channel: buffered channels
- std/misc/list: list utilities [fare]
- std/misc/pqueue: heap-based priority queues
- std/misc/process: process utilities [fare]
- std/misc/rtd: safe runtime type descriptor accessors
- std/misc/repr: sourcable object representation [fare]
- std/misc/shared: equal-shared? for infinite-structure safe equality
- std/misc/string: string utilities [fare]
- std/misc/sync: synchronous data structures
- std/misc/threads: thread utilities
- std/net
- std/net/bio: binary i/o buffers.
- std/net/httpd: embedded HTTP/1.1 server.
- std/net/repl: network REPL
- std/net/sasl: SASL SCRAM authentication.
- std/net/socket: easy raw device socket api.
- std/net/websocket: websocket client.
- std/net/wamp: wamp client.
- std/os: programming with raw devices
- ... let there be dragons
- std/stxparam: syntax parameters.
- std/text
- std/text/utf8: fast utf8 encoding and decoding.
- std/text/csv: csv parser [fare]
- std/xml:
- std/xml/ssax: Oleg's SSAX parser
- std/xml/sxpath: Oleg's SXPath library
- REWRITTEN packages and libraries:
- std/actor: the RPC subsystem has been rewritten for performance and raw devices; streams support synchronization.
- std/coroutine: new implementation without using sync.
- std/event: the library internals have been rewritten; new wait and select primitives.
- std/db/mysql: the driver has been rewritten to use dediceted threads per connection.
- std/generic: package has been rewritten for fast cached type-based dispatch.
- features and fixes
- std/crypto: more consistent api, more digests and cipers
- std/db/conpool: timeouts, release, api improvements
- std/db/leveldb: iterators
- std/error: timeout errors
- std/getopt: bug fixes, help topic display
- std/make: deterministic order for depgraphs, renamed binaries, debug options
- std/misc/ports: more utilities
- std/net/request: request-close for explicitly closing the request socket
- std/text/json: json-symbolic-keys parameter
- std/srfi/19: several fixes
- std/sugar: let-hash, with-destroy, using macros
- languages:
- r7rs
- gxi --lang r7rs for repl
- raise-continuable and r7rs-compliant exception handling
- r7rs
- doc:
- stdlib.md: overview of standard library
- core-prelude: document :gerbil/gambit symbols
- tutorial:
- proxy: network programming in Gerbil
- httpd: web programming with the Gerbil httpd
- stdlib:
- std/db
- std/db/mysql: MySQL dbi interface with FFI driver [new]
- std/db/leveldb: LevelDB interface with FFI driver [new]
- std/db/conpool: connection pools for SQL databases [new]
- std/db/dbi: reset statements after exec and query evaluation
- std/db/sqlite: Fix SMP-safety on FFI (removes ffi_last_error)
- std/getopt: command line argument parsing library [new]
- std/misc/ports: port utilites (copy-port) [new]
- std/sugar: while and until macros
- std/iter: add iter-fini! to iteration protocol for stateful iterator cleanup
- std/make:
- track preludes in make-depgraph
- use build-specs for depgraph generation with make-depgraph/spec
- check library dependencies on build decisions
- std/actor: final structs for messages
- std/db
- r7rs:
- scheme/base: [gambiteer] implement exact-integer-sqrt
- prelude:
- gerbil/core
- add u8vector primitives to
- eval is there
- syntax/loc macro from Racket
- gerbil/gambit:
- gerbil/gambit/bytes: refactored synonyms for u8vector ops [new]
- gerbil/core
- expander:
- bind core features at root context, including system-type features
- strict refernces for positive phis
- compiler:
- update exe stubs to hook display-exception
- runtime:
- clean up confusing direct-* MOP functions
- doc:
- guide.md#databases: document the :std/db package [new]
- tutorial/kvstore.md: a key-value store server tutorial [new]
- lang/scheme: R7RS implementation
- doc/core-prelude: core prelude documentation
- prelude:
- core:
- more import and export expanders
- fix @-set! expansion for multislot
- gambit: add gc-report-set!
- core:
- compiler: fix compile-static-exe to honor gsc-options
- expander: fix core-expand-exports for nested expansions
- expander:
- %%ref, %%app, and %%begin-module indirections for custom expansion
- #lang reader support for custom language preludes
- allow arbitrary extensions for modules (not just .ss)
- fix resolution of displaced syntax-quotes
- std/parser:
- parsing and lexing package in stdlib
- std/parser/grammar prelude for declarative parser specification
- core prelude:
- inline struct-instance? and direct-struct-instance?
- remove catch, add read-line
- stdlib
- std/make: recompile static exes when the static module is stale
- [targit] std/crypto/libcrypto: fix compatibility issues with openssl-1.1.x
- tutorial: Custom Languages tutorial
Bug fix release:
- fix shell script shebangs to work on ubuntu with bash + set -eu
Bug fix release:
- compiler/optimize: fix bug where prelude ssxi loading short-circuited further deps
- compiler/driver: fix bug in static exe dependency collection where the prelude module deps where short-circuited
- std/make: honour verbosity in exe compilation
- compiler: optimizer improvements and static executables
- optimizer:
- track types for local bindings
- lift locally defined opt/case-lambdas
- attach inline rules to !lambdas for more complex call optimization transforms
- track prelude imports to optimize custom preludes deeply
- driver:
- support static compilation
- static: option for compiling library modules for static linkage
- compile-static-exe for statically linked executables
- default output directory for executables to current dir
- support static compilation
- gxc:
- -static option for static compilation
- -gsc-option and -gsc-option2 for adding arbitrary compilation options for gsc
- print usage when invoked with no files and fix error when invoked with only options
- optimizer:
- runtime:
- find-method now caches struct method resolutions to the rtd vtab
- prelude:
- extend core.ssxi to include more of the runtime and inline all simple procedures
- stdlib:
- build static linkage modules for all stdlib
- std/make supports static library compilation and executables
- actor/rpc fix latent arity bug caught by the optimizer
- build:
- [fare] use /bin/sh -eu for build scripts
- compiler: modularize and implement optimizer pass
- optimizations:
- lift opt lambdas and case-lambdas and optimize direct call dispatch
- recognize struct MOP definitions and inline direct struct operations
- cross module optimization with concurrent compilation and ssxi module generation
- ssxi prelude for writing type declarations for the optimizer
- gxc:
- add -O and -no-ssxi options for optimization
- add -cc-options and -ld-options for gsc compilation flags
- add -h option for printing usage
- optimizations:
- runtime:
- new MOP functions: class-subtype? next-method call-next-method
- stdlib
- std/text/zlib
- support transparent gzip/deflate decompression
- support gz compression
- support compression and decompression of input ports
- std/net/request
- accept gzip/deflate encoding with transparent content decompression
- std/iter
- accept when and unless filters in for and it's variants
- optimize iter transforms to use a direct iterator instead of a coroutine
- make coroutine and input-port iter-value idempotent between iter-next calls
- std/srfi/9
- generate record constructor that is recognized by the optimizer
- use interned symbols for module scoped records, as in defstruct
- std/misc/queue and std/test
- fix accessor bugs caught by the optimizer
- std/text/zlib
Bug fix release:
- fix issues with disabled compiler optimizations from gce memory [gambit#249]
- gerbil/runtime:
- MOP allows mixin structs in make-class-type; classes can now mixin structs
- gerbil-version and gerbil-system-version
- prelude:
- defclass allows mixing arbitrary types and defers to runtime for composition validation
- fix extend-class-type-info type id
- stdlib
- actor/rpc:
- stream support
- up [arbitrary] max message size to 1MB
- offload message writes from dispatch thread to dedicated writer thread
- db/lmdb: LMDB bindings and high level interface
- db/dbi: add explicit methods for transactions with cached statements
- update ffi code to use ___return instead of ___result[_voidstar]
- fix regression with thread-interrupt! raising exceptions in recent gambit
- actor/rpc:
- support compilation of dynamically linked executables
- Revamped build system
- by default, build.sh builds a stage1 gerbil for faster build times
- std/make now supports dependency graphs
- std/build-config for optionally build libraries with foreign dependencies
- std/build builds with depgraph and optional libraries
- std/xml is now optionally built to avoid hard dependency on libxml2
- Optionally built libraries with foreign dependencies
- std/text/yaml: YAML support with libyaml bindings
- std/text/zlib: zlib support for compression/decompression
- std/db/sqlite: sqlite3 database interface
- std/db/dbi: generic database interface
- bug fixes and small improvements
- std/web/rack: web application support with rack-style interface
- std/net/fastcgi: fastcgi support
- std/logger: basic logging support
- std/actor: more casual syntax for defproto
- prelude: struct-out export expander
- bug fixes and small improvements
- std/test unit testing and basic tests for stdlib
- std/iter iteration macros (for,for/collect,for/fold)
- bug fixes and small improvements
- Unification of object type hierarchy
- More specific errors from stdlib
- Generics
- first gerbil release tag; core gerbil with batteries and introductory documentation