2fecad3279
Announcements: == Release 0.9.10 Major feature enhancements New Features R7RS Large and SRFI support We cover R7RS-large Red and Tangerine Edition. * scheme.ilist: Immutable list library * scheme.rlist: Random access lists * scheme.bytevector: R6RS-compatible bytevectors * scheme.text: Immutable texts * scheme.show: Combinator formatting * scheme.regex: Scheme Regular Expressions: Grapheme support is completed by @pclouds. * srfi-78: Lightweight testing (now integrated with gauche.test). * srfi-101: Purely functional random-access pairs and lists (scheme.rlist) * srfi-116: Immutable list library (scheme.ilist) * srfi-130: Cursor-based string library * srfi-135: Immutable texts (scheme.text) * srfi-159: Combinator formatting (scheme.show) * srfi-170: POSIX API * srfi-174: POSIX timespecs * srfi-175: ASCII character library * srfi-176: Version flag. Supported as built-in. (version-alist) * srfi-178: Bitvector library * srfi-180: JSON * srfi-181: Custom ports * srfi-185: Linear adjustable-length strings * srfi-189: Maybe and either: optional container types * srfi-192: Port positioning * srfi-193: Command line * srfi-195: Multiple-value boxes (Boxes). New modules * parser.peg: PEG parser combinator library. This module has been unofficially included for long time, but it finally became official. If you've been using it, check out the document, for API has been changed. Compatibility module is provided. * data.skew-list: Skew binary functional random-access list * data.priority-map: Priority map. * rfc.uuid: UUID generation and parsing. * text.external-editor: Running external editor. * text.pager: Display with pager. Improvements String indexing improvements In Gauche, string access using integer character index costs O(n) by default, because we store strings in multibyte format. Two improvements are incorporated to allow O(1) random string access. * String cursors (srfi-130). It is an object directly points to a specific character within a string, thus allowing O(1) access. It is supported natively, so all built-in string procedures that takes character index also accept string cursors. See String%20cursors, for the details. This is the work mostly done by @pclouds. * String indexing (scheme.text). You can precompute a string index, which is an auxiliary data attached to a string that allows O(1) integer character index access. You need O(n) to compute a string index, but once computed, character index access in that string becomes O(1). In R7RS-large, scheme.text library provides this feature (with a distinct type text). In Gauche, a text is simply a string with a string index computed. See String indexing for the details. Note: Gauche internally had string pointers to implement some string operations efficiently. Now string cursors can be used for that purpose, we dropped string pointers. If you have code that uses string pointers, although it was undocumented, you can keep using it by defining GAUCHE_STRING_POINTER environment variable. We'll completely drop it in the next release, though. Immutable pairs Scheme defines literal pairs to be immutable, but it is up to the implementation to check it. Gauche used to not check it, allowing mutating literal pairs. Now it is no longer allowed--it throws an error. Mutating literal pairs is never correct, and if you get the error, you've been doing it wrong. Immutable pairs can also be explicitly constructed using scheme.ilist module. In Gauche, immutable pairs and lists behaves exactly like normal pairs and lists, except that they can't be modified. See Mutable and immutable pairs, for the details. If your code depends on the previous behavior and can't change swiftly, set the environment variable GAUCHE_MUTABLE_LITERALS to restore the old behavior. Input line editing The editor feature is enhanced a lot, including online help. Type M-h h to get a quick cheet sheet. The line editor isn't turn on by default yet, but you can either turn on with the command-line option -fread-edit or the environment variable GAUCHE_READ_EDIT. Parameters are now built-in You no longer need to (use gauche.parameter) to use parameters as defined in R7RS. The module still exists and provides a few obscure features. Bitvector literal and incomplete string literals We now supports bitvector type in the core. Note that there's a syntax conflict with bitvector literals and incomplete strings; now the official way of incomplete string literal is to prefix a string with #**. The older syntax is still recognized as far as it's not ambiguous. See Incomplete%20strings. The C-level Port API is overhauled This only affects for C code using ScmPort. To support future extensions flexibly, we hide the internal implementation of ScmPort. It shouldn't affect code that accesses ScmPort via API, but if the code directly refers to the members of ScmPort, it should be rewritten to use API. One notable change is that port positions no longer need to be an integer offset. TLS support improvement * With default configuration, Gauche searches several known locations of ca-certificates, so it can work mostly out of the box. See rfc.tls for the details. * With default configuration, <mbed-tls> is used if it's available. <ax-tls> is always available but its cipher support is limited and can't connect to some https sites. * You can also configure to embed MbedTLS support into Gauche so that it will run on a system that doesn't have MbedTLS installed. (See INSTALL.adoc for the details.) Note that if you embed MbedTLS, the resulting binary is covered by MbedTLS Apache License 2.0 as well. Windows Installer version has MbedTLS embedded. Encoding conversion improvement Now we support conversion natively, between UTF (8, 16, 32) and ISO8859-n, as well as between Japanese encodings. We use iconv(3) only when we need to deal with other encodings. This is because iconv lacks a necessary API to support srfi-181 transcoded ports properly. If you just need to convert encodings, you can keep using gauche.charconv and it handles wide variety of encodings supported by iconv. If you use srfi-181, the conversion is limited between the natively supported encodings. We may enhance native support of conversions if there's need for it. Miscellaneous improvements * gauche.generator: Add giterate, giterate1. * gauche.lazy: Add literate. * format: Make ~f handle complex numbers as well, and added a bunch of new directives: ~t, , ~~, ~|, and ~$. * define-hybrid-syntax: The compiler macro feature. * current-trace-port: A parameter to keep trace output. Output of debug-print goes to this port, for example. The default is stderr. * gauche.record: Allow record types to inherit from non-record class, as long as the superclass doesn't add slots. Also allow to specify metaclasses. * gauche.unicode: Conversion procedures utf8->ucs4 etc. now takes replace strictness that replaces invalid unicode sequence with U+FFFD. utf8->string is also changed to use the replace character for invalid input sequence, instead of throwing an error. * gauche.unicode: string->utf16: Add add-bom? argument. * gauche.unicode: Add string->utf32, utf32->string. * identifier?: Now it responds #t to both symbols and wrapped identifiers. In ER-macro systems, identifiers can be a bare symbol as well. To check an object is an identifier but not a symbol, you can use wrapped-identifier? to check an object is a non-symbol identifier. * When gosh is run inside a build tree (with -frest option), make sure we link with libgauche.so in the build tree regardless of the setting of LD_LIBRARY_PATH. (PR#557) * apropos now takes a string as well as a symbol (PR#555) * Character set is now hashable with the default-hash. * Add .dir-locals.el file in the source tree. It sets up Emacs to add some Gauche-specific indentations. * If gosh is run in suid/sgid process, do not load .gaucherc file and do not load/save history files. * complete-sexp? is moved to the core (used to be in gauche.listener. * string->number: Added default-exactness optional argument to specify the exactness of the result when no exactness prefix is given in the input. * gauche-package generate can now generate template of Scheme-only package. * srfi-42: Added :collection qualifier to use a collection as a generator. * gauche.fcntl: Added sys-open, sys-statvfs, sys-fstatvfs. * sys-utime: Allow <time> object for timestamp. * sys-nice: Added nice() interface. * make-hash-table: If a comparator whose equalily predicate is eq?/eqv?, we use eq-hash/eqv-hash regardless of comparator's hash function. It is permitted by srfi-125, and it allows objects that doesn't have hash method can still be used with eq/eqv based hashtables (#708). * gauche.vport: Add bidirectional virtual port. Add open-output-accumulator. * gauche.process: Allow command pipeline in process port API (#717). Also :error keyword argument accepts :merge, to tell run-process that stderr should be merged into stdout. * gauche.process: Added process-wait/poll, process-shutdown. * gauche.threads: atomic-update!: Allow proc to return more values than the atom holds. It is useful if one wants to update atom state and compute something using before-update values. * gosh: -e option can accept multiple S-expressions. * gauche.dictionary: Add <stacked-map>. Bug fixes * Fix double-rounding bug when converting ratnum to flonum. Originall reported in Ruby, it is a common issue that first convert numerator and denominator to double and then divide. (blog entry). * math.mt-random: (Incompatible change) When the given seed is bignum, we use all bits now to initialize the RNG. The previous versions only used the lowest word, but that loses the entropy. Technically this causes RNG to produce different sequence if the seed is bignum. For typical usage, though, seed is within fixnum or at most as wide as a machine word and we think it's rare that the change becomes an issue. * Some macro-defining-macro issues are fixed, including #532 . * file.util: make-directory*: Fixed timing hazard. * www.css: construct-css: Fix :not pseudo class rendering (PR#645), added missing an+b syntax (PR#648). * gauche.process: High-level utilities didn't handle :encoding keyword argument (#651). * load-from-port: Fixed a bug that didn't reset literal reader context (#292). * apply detects if the argument list is circular and throws an error. * copy-list detects the circular list and throws an error. * scheme.list: lset=: Argument order to invoke the equality predicate was incorrect. * math.prime: native-factorize: Reject other than positive exact integers. Factorizing 1 returns (). * assume: Fix to return the value of the expression. * and-let*: Fix 20-year old bug - and-let* is allowed to take an empty body. * let-optionals*: There was a bug that inserts reference of undefined hygienically, causing an error when used in R7RS code that doesn't inherit gauche module. * rfc.json: construct-json: Allow non-aggregate toplevel value. It was prohibited in rfc4627, but allowed in rfc7159. * pprint: Fix circular structure printing in case when the cycle begins in the middle of a list (#713). == Release 0.9.9 Bug fix and enhancements * New features - More R7RS-large and SRFI support - Charset enhancements to Full Unicode range - Macro tracer - Checking use of undefined result in conditionals * Improvements * Bug fixes * Potential incompatibilities New features More R7RS-large and SRFI support * scheme.stream: Streams (formerly srfi-41). * scheme.ephemeron: Ephemeron (formerly srfi-124). * scheme.regex: Scheme Regular Expression (formerly srfi-125). Contributed from @pclouds. Grapheme support is still missing. * scheme.vector.u8 etc.: Homogeneous numeric vector libraries (srfi-160). * srfi-162: Comparators sublibrary. * srfi-173: Hooks. Charset enhancements to Full Unicode range * Predefined char-sets (srfi-14) are enhanced to the entire Unicode range, e.g. char-set:digit now includes all Unicode characters with general category Nd. If you want to limit the range to ASCII, there are corresponding char sets (e.g. char-set:ascii-digit) provided. * 'Umbrella' general category char-set: char-set:L includes characters from general categories that begin with L, etc. * In regexps and char-set literals, you can use \p{category} and \P{category}, where category is Unicode general category, e.g. Lu. * The \d, \w, \s in regexp and char-sets are still limited to ASCII range, for changing them would likely to break existing code. * POSIX notation [:alpha:] etc., also covers ASCII range only. To cover full Unicode, you can use [:ALPHA:] etc. Macro tracer * trace-macro: You can now trace macro expansion. Checking use of undefined result in conditionals * Return value of procedures that return "undefined result" shouldn't be used in portable code. However, Gauche usually returns #<undef> from such procedures, and it counts to true as a boolean test in conditionals. We found quite a few code that branches based on the result of undefined return value. Such code is fragile, for it may break with unintentional change of return values of such procedures. Gauche can now warn such cases when the environment variable GAUCHE_CHECK_UNDEFINED_TEST is set. See the blog entry and Undefined values. Improvements * Partial continuation support is overhauled w.r.t interaction with dynamic environment and full continuations. Contributed by @Hamayama. * gauche.uvector: Support uniform complex vectors (c32, c64 and c128). * gauche.test: New compile-only option to test-script, so that it can perform syntax check without executing the actual script (useful if the script is written without using main). * gauche.generator: Add negative step value support to grange. * regexp-replace etc.: It used to be an error when regexp matches zero-length string. Which wasn't wrong, but in practice it was annoyance. Now if regexp matches zero-length string we advance one character and repeat matching. This behavior is also adopted by Perl and Ruby. * gosh -h now emits help messages to stdout and exits with 0. * Experimental line editor: backward-word and forward-word added by @pclouds PR#524 Bug fixes * Keyword argument handling wasn't hygienic. * pprint: Prettyprint emits negative labels (#484) * Extend the limit of environment frame size (#487) * Scm_CharSetAdd could yield inconsistent result when you add an ASCII character to a large charset. Patch by @pclouds PR#500 * import: Only/rename import qualifiers didn't work with transitiev export (#472) * Some system calls shouldn't be restarted when interrupted. #504 * format: ~vr didn't work. #509 * sort!, stable-sort!: We implemented them as if they were linear-updating, that is, we didn't guarantee if the argument still pointed to the head of the sequence after the call. However, srfi-95 didn't explicitly mentions linear updating semantics, so we guaranteed that caller can call them purely for side-effects. Potential incompatibilities * Scm_RegExec now takes two more arguments specifying start and end of the range of input string. I overlooked this change and missed to add a proper transition macro. You can use #ifdef SCM_REGEXP_MULTI_LINE to switch the new interface vs the old one. * Toplevel define now inserts a dummy binding at compile-time (as a result of #549). It is consistent with the specification, but existing code that relied on undefined behavior might be affected. See the blog entry. * The (scheme base) library inadvertently exported Gauche's define instead of R7RS define; Gauche's define recognizes extended lambda arguments, while R7RS's not. This was a bug and fixed now, but if your R7RS code happens to use Gauche's extended argument notation, it'll break. * macroexpand: Now it strips syntactic information from the return values (with renaming macro-inserted identifiers, so that different identifiers with the same name won't be confused). This generally improves interactive use when you check how macros are expanded. If you're using the output of macroexpand programatically, this may break hygiene; you can pass an optional argument to preserve syntactic information. * parser.peg: This module is still unofficial, but in case you're using it: $do is now obsoleted. Use $let and $let*. $parameterize is added by @SaitoAtsushi. == Release 0.9.8 Bug fixes and enhancements * Major changes - The syntax of quasirename is changed - Keywords are symbols by default. - Some support of R7RS-Large Tangerine Edition. - Prettyprinting is now default on REPL. * Bug fixes * Other notable changes Major changes The syntax of quasirename is changed The template was implicitly quasiquoted before, but it turned out it interferes when quasiquote and quasirename were nested. Now the template needs to be explicitly quasiquoted. The old syntax is also supported for the backward compatibility. You can change the supported compatibility level by an environment variable GAUCHE_QUASIRENAME_MODE. See the manual entry of quasirename and the blog post for more details. Keywords are symbols by default. There can be some corner cases that causes backward compatibility. You can revert to the old behavior by setting an environment variable GAUCHE_KEYWORD_DISJOINT. See the "Keyword" section of the manual for how to adapt to the new way. Some support of R7RS-Large Tangerine Edition. We have scheme.mapping, scheme.mapping.hash, scheme.generator, scheme.division, scheme.bitwise, scheme.fixnum, scheme.flonum. See Gauche:R7RS-large for which libraries in R7RS-Large have been supported. Prettyprinting is now default on REPL. If it bothers you, set an environment variable GAUCHE_REPL_NO_PPRINT. Bug fixes * The identifiers _ and ... are bound to syntax, to be friendly to hygienic macros. * floor/ and ceiling/ returned incorrect values when remainder is zero. * During compilation, feature identifiers are considered according to the target platform, so that cross compilation work (#407). * A finite inexact number multiplied by an exact zero now yields an exact zero consistently. * Precompiled uniform vectors had lost infinities, NaNs and minus zeros. Now they are handled properly. * The record accessor accidentally leaked #<unbound> to the Scheme world. Other notable changes * GC version is bumped to 8.0.4, thanks to @qykth-git. * Unicode support is bumped to 12.1.0, thanks to @qykth-git (#471). * Numerous enhancements on Windows/MinGW version, thanks to @Hamayama. * Now gauche-package compile command has --keep-c-files and --no-line options, for easier troubleshooting with generated C files (#427). * gauche.cgen.cise: Enhanced support for C procedure declaration, C struct and union type definition, and function type notation. * Default hash function works on uniform vector (#440) * The gauche.interactive module now doesn't load ~/.gaucherc---that feature is splitted to gauche/interactive/ init.scm. Thus, when you start gosh it still reads ~/.gaucherc, but if you use gauche.interactive as an ordinary module, it doesn't load .gaucherc (#448). * gauche.array: New procedures array-negate-elements!, array-reciprocate-elements!. * disasm: Now it shows lifted closures as well. * When the number of arguments passed to apply is fixed at the compile time, the compiler now optimize apply away. For example, (apply f 'a '(b c)) now becomes exactly the same as (f 'a 'b 'c). If this optimization somehow causes a problem, pass -fnodissolve-apply option to gosh. * srfi-42: Uniform vectors are supported just like vectors. * Now we have predefined char-set for each of Unicode general category, e.g. char-set:Lu. * New flonum procedures: approx=?, flonum-min-normalized, fronum-min-denormalized. * gauche.vport: Virtual port constructors accept :name argument. == Release 0.9.7 Major C API/ABI overhaul * Changes of C API/ABI * New modules and procedures * Bug fixes and improvements * Incompatible changes in unofficial module Changes of C API/ABI This release includes several C API/ABI changes that breaks the backward compatibilities, in order to have clean API towards 1.0. Although we haven't officially defined C API/ABI, we kept the de facto backward compatible as much as possible. Some turned out to be design shortcomings. We don't want them to hinder future developments, so we decided to change them now. In most cases, all you need to do is to recompile the extensions. We checked existing extensions being compilable with the new version as much as possible. If you find an extension breaks, let us know. See API Changes in 0.9.7 for the details. We bumped ABI version from 0.9 to 0.97, so the extensions compiled up to 0.9.6 won't be linked with the new version of Gauche. If necessary, you can install 0.9.6 and 0.9.7 Gauche in parallel, and switch them using -v VERSION option. If you're not sure what extensions you've installed, check the directory ${prefix}/share/gauche-0.9/site/lib/.packages /. It contains gpd (Gauche Package Description) files of the extensions you've installed for 0.9.6 and before. New modules and procedures * srfi-154: First-class dynamic extents * gauche.connection: An interface that handles connection-based full-dupex communication channel. The <socket> (gauche.net) class implements it, as well as a couple of other classes. It allows to write a communication code (e.g. server request handlers) without knowing the underlying connection implementation. * text.edn: Parse and write Clojure's EDN representation. * compat.chibi-test: A small adapter module to run tests written for Chibi Scheme (some srfi reference implementations use it) within gauche.test. * text.html-lite: HTML5 elements are added. PR#363 * gauche.array: Export array-copy. * gauche.configure: Add more feature tests: cf-check-lib, cf-check-libs, cf-check-type, cf-check-types, cf-check-func, cf-check-funcs, cf-check-decl, cf-check-decls, cf-check-member, cf-check-members. Also added cf-init-gauche-extension and cf-output-default, which takes care of common task of Gauche extensions so that the configure script can now be very terse. * gauche-package make-tarball is updated to read package.scm. Used with gauche.configure, this eliminates the need of DIST script for the extensions. * file.util: Added call-with-temporary-file, call-with-temporary-directory. * assoc-adjoin, assoc-update-in: A couple of new assoc-list procedures. Bug fixes and improvements * rfc.tls: If CA bundle path is set, axTLS connection also validates server certificates (mbedTLS rejects connection when CA bundle path is not set). PR#362 * rfc.tls: On Windows, you can specify system as CA bundle path to use the system certificate store. PR#395 , PR#398 * rfc.tls: If Gauche is configured with mbed-tls but without axtls, the default tls class is set to <mbed-tls>. * Bumped to bdwgc 7.6.8. PR#373 * Experimentally turned on generic function dispatcher optimization for ref and object-apply by default. It could boost the performance of these generic function calls up to 5x. We keep monitoring the effect of optimization and will enhance it in future. * Now glob sorts the result by default (consistent of glob(3). To avoid sorting, or supply alternative sort procedure, use :sorter argument. * REPL's info uses the value of the PAGER environemnt variable for paging. Now you can put command-line arguments in it (not only the command name). PR#358 * REPL's info failed to work when Gauche is built without zlib support. * sxml.serializer: If the attribute value is the same as attribute name, we took it as a boolean attribute and just rendered with attribute name only. It interferes with an attribute with the value that happens to be the same as the name, so we changed it. This is backward-compatible change. PR#359 * sxml.ssax: Fix whitespace handling. PR#360 * We had a kludge to handle a setter of a slot accessor method, that causes confusion when you use the module that implements a base class then define slot accessor in the derived class. It is fixed. See the thread https://sourceforge.net/p/gauche/mailman/message/36363814/ for the details. * Now we handle utf-8 source file that has BOM at the beginning. * open-input-file, open-output-file, etc.: We now honor element-type keyword arguments (it was ignored before). It only makes difference on Windows. * scheme.set: Fix set<? etc. * util.digest: digest-hexify can now take u8vector as well. * A bug in hash-table-copy caused inconsistent hash table state. #400 Incompatible changes in unofficial module * parser.peg: Removed pre-defined character parsers (anychar, upper, lower, letter, alphanum, digit, hexdigit, newline, tab, space, spaces, and eof) and shorthands ($s, $c, and $y). Those names are easy to conflict (esp. 'newline') yet not so much useful, for it's quite easy to define. If existing code relies on these procedures, say (use parser.peg.deprecated).
47 lines
1.3 KiB
Makefile
47 lines
1.3 KiB
Makefile
# $NetBSD: Makefile,v 1.76 2021/07/24 14:50:42 yhardy Exp $
|
|
#
|
|
|
|
DISTNAME= Gauche-0.9.10
|
|
CATEGORIES= lang
|
|
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=gauche/}
|
|
EXTRACT_SUFX= .tgz
|
|
|
|
MAINTAINER= enami@NetBSD.org
|
|
HOMEPAGE= https://practical-scheme.net/gauche/
|
|
COMMENT= R7RS Scheme implementation aimed to be a handy tool for daily works
|
|
LICENSE= modified-bsd # see work/${DISTNAME}/COPYING
|
|
|
|
DEPENDS+= slib-[0-9]*:../../devel/slib
|
|
|
|
.include "options.mk"
|
|
|
|
MAKE_JOBS_SAFE= no
|
|
GNU_CONFIGURE= yes
|
|
GNU_CONFIGURE_STRICT= no # has several configure programs
|
|
CONFIGURE_ARGS+= --with-slib=${LOCALBASE}/share/slib
|
|
CONFIGURE_ARGS+= --enable-threads=pthreads
|
|
CONFIGURE_ARGS+= --with-iconv=${BUILDLINK_PREFIX.iconv}
|
|
CONFIGURE_ARGS+= --with-zlib=${BUILDLINK_PREFIX.zlib}
|
|
|
|
USE_LANGUAGES= c c99
|
|
USE_LIBTOOL= yes
|
|
USE_TOOLS+= gmake gzip makeinfo
|
|
TEST_TARGET= check
|
|
INFO_FILES= yes
|
|
TEXINFO_REQD= 5.0
|
|
|
|
# refer %install in ${WRKSRC}/Gauche.spec
|
|
INSTALL_TARGET= install-pkg install-doc
|
|
|
|
# Does relink internally
|
|
BUILDLINK_PASSTHRU_RPATHDIRS+= ${WRKSRC}
|
|
|
|
.include "../../mk/dlopen.buildlink3.mk"
|
|
.include "../../mk/pthread.buildlink3.mk"
|
|
|
|
post-install:
|
|
gzip -d ${DESTDIR}${PREFIX}/${PKGINFODIR}/gauche-ref*gz
|
|
|
|
.include "../../converters/libiconv/buildlink3.mk"
|
|
.include "../../devel/zlib/buildlink3.mk"
|
|
.include "../../mk/bsd.pkg.mk"
|