-
-
Notifications
You must be signed in to change notification settings - Fork 81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Sporadic errors in srfi-207 tests #900
Comments
#900 Couldn't nail it yet, will investigate, but this suppresses the error for thte time being.
Nah, 02687aa suppressed the symptom in my local machine but still fails in github actions. Speed or load may be a factor? |
|
It is very unsettling, but it went away. We can't reproduce it anymore, so close this for now. |
It started appearing again. Reopening. |
原因までは分かっていませんが、以下のログが取れたので共有しておきます。 OS : Windows 10 (version 22H2) (64bit) mintty上で実行しました。正常に終了するときもあります。 Gauche は 2023-7-10 のもので少し古いです。
|
同じ箇所ですね。アーキテクチャにかかわらず発生するので、ロジックのバグだと思います。 |
少ししぼり込みました。こちらの環境では、以下のソースでほぼ再現します。 ただ、何回目で発生するかはランダムです。 また、テスト自体は成功しており、そのまま続きのテストを実行していると、 <再現用ソース>
<実行結果>
|
もう少し調べて、gauche.vport のみになりました。 Gauche 0.9.9 でも再現するので、昔からかも。 <再現用ソース>
<実行結果>
|
おお、最後のやつは私の手元でも再現できました。これで捗ります。多謝! |
10d5be5 で出るエラーメッセージが変わりますが、エラーの直接原因は同じです。 あと、ファイナライザが関係している可能性があります。上記バグ再現コードで、ループ内で |
OK, we caught it. It's a finalization ordering issue. When a virtual buffered port is made, a structure We use unordered mode of the bdwgc's finalizer. That means it is not guaranteed that a heap object pointed from an object being finalized is retained. When a port's finalizer is invoked, it is possible that the object pointed by its Finalizers are always a hairy stuff. It should be considered a last resort. All we can do is that vport would check if bport_rec structure is alerady collected, and if so, we just don't do anything. The check can be done using bdwgc's dissapearing link feature, but it's better to have an abstract API instead of directly calling bdwgc's API. |
As the issue #900 revealed, allocating extra data for a port complicates finalization. Since file ports are very frequently used, and we want to release fd upon finalization, we diectly save fd in the port structure. For this, an idata field is added to ScmPortBuffer.
Changelog: 2024-01-25 Shiro Kawai <shiro@acm.org> * Release 0.9.14 2024-01-23 Shiro Kawai <shiro@acm.org> * ext/charconv/jconv.c (jconv_open): If input and output encoding are the same but not supported natively, use pass-through transcoder instead of delegating it to iconv. Some verion of iconv doesn't seem to like it. https://github.com/shirok/Gauche/issues/979 * src/number.c (double_precision): Fix ratnum->flonum failure when when either denominator or numerator is 2^(64n-1). https://github.com/shirok/Gauche/issues/981 2024-01-22 Shiro Kawai <shiro@acm.org> * src/libnum.scm (real-ln): Fix precision loss of taking log on a large bignum. https://github.com/shirok/Gauche/issues/980 2024-01-21 Shiro Kawai <shiro@acm.org> * lib/data/priority-map.scm: Allow any comparator as key-comparator; we switch hashtable and treemap internally. Then dict->priority-map can take the given dictionary's key-comparator. 2024-01-20 Shiro Kawai <shiro@acm.org> * lib/data/priority-map.scm (dictionary->priority-map), (alist->priority-map): Added. * lib/text/multicolumn.scm (display-multicolumn): Add indent keyword arg. 2024-01-19 Shiro Kawai <shiro@acm.org> * src/gauche-package.in ("info"): Add 'gauche-package info' command. 2024-01-16 Shiro Kawai <shiro@acm.org> * lib/data/random.scm: Switch the handling of current random source. Now the procedures consistently captures the value of the current random source at the time of creation of generators. This is technically an incompatible change. https://github.com/shirok/Gauche/issues/977 2024-01-15 Shiro Kawai <shiro@acm.org> * lib/srfi/194.scm, lib/srfi/194/*.scm: Completing srfi-194 support. 2024-01-12 Shiro Kawai <shiro@acm.org> * src/compile-5.scm (pass5/$DYNENV): Fixed a bug that when KEY or VALUE of with-continuation-mark is a procedure call, its result becomes the result of with-continuation-mark. * lib/data/random.scm (reals-between$): The range calculation was broken. 2024-01-09 Shiro Kawai <shiro@acm.org> * src/libfmt.scm (format-internal), src/libmacro.scm: Experimentally introduce formatter cache. The compiler determines "potentially cacheable" call of `format`, and the runtime takes advantage of it if possible. The drawback is that the compiler macro now inserts reference to `format-internal`. It's embedded in the precompiled code and We can't change its API across versions. 2024-01-08 Shiro Kawai <shiro@acm.org> * src/libfmt.scm (formatter-parse): Support conditional directive (tilde left-bracket). 2023-12-30 Shiro Kawai <shiro@acm.org> * src/error.c (Scm_MessageConditionPrint): Extend the error message truncation limit so that unexpected exception can give more info. 2023-12-29 Shiro Kawai <shiro@acm.org> * ext/tls/tls-mbed.c (mbed_write): If the data is big, single mbedtls_ssl_write may return with partial write, so we need to retry to send the rest of the data. 2023-12-28 Shiro Kawai <shiro@acm.org> * 0.9.14_pre1. Preparing another release to make TLS addition available. 2023-12-17 Shiro Kawai <shiro@acm.org> * libsrc/file/util.scm (build-path): Allow 'cwd and 'cld as base-path argument, for current workding directory and current loading directory, respectively. We've seen enough of this pattern, especially the latter, so it's worth having it. 2023-12-10 Shiro Kawai <shiro@acm.org> * ext/charconv: Support utf8bom encoding, which drops the optional BOM at the beginning of utf8 stream. We simply implement utf8bom->utf8 internal routine, and use autosynthesis of other conversions. We don't support utf8bom as an output encoding, at least for now (see the discussion in the issue). https://github.com/shirok/Gauche/issues/966 * src/librx.scm (%regexp-replace): Avoid rebinding current-output-port during replacing, for the substitution procedure may output and it's confusing that it is mixed into the result. https://github.com/shirok/Gauche/issues/967 2023-12-06 Shiro Kawai <shiro@acm.org> * src/string.c (string_putc): Make 'write' escape control characters in strings so that it's easier if hard-to-see characters are there, e.g. Zero-width no-break space. 2023-12-03 Shiro Kawai <shiro@acm.org> * src/libthr.scm (run-once): Added. (<mutex>, <condition-variable>, <thread-local>): Export these. Class names are not in SRFI-19, but now that threads are in the core, other parts of core may refer to them. (Notably, precomp now needs them). 2023-11-29 Shiro Kawai <shiro@acm.org> * src/gencomp: Removed. This is an ancient script, superseded by precomp long ago. 2023-11-25 Shiro Kawai <shiro@acm.org> * src/system.c (Scm_ToTimeSpec): More general interface that takes the base time (t0) when relative time is given. Passing NULL to t0 uses the current time. Scm_GetTimeSpec() is defined on top of it. We thought to drop it, but this API may have been used from other extensions, so we may keep it. 2023-11-24 Shiro Kawai <shiro@acm.org> * src/builtin-sym.scm: Rearranged predefined symbols. It's been for long time since we made builtin-syms.h private, so no external code should depend on the order of them anymore. * src/system.c (Scm_GetTimeSpec): Allow negative real number for relative time specification. For the timeout argument, we don't need that, but for general time operation it is useful. Also support relative time specification with time-duration time. 2023-11-21 Shiro Kawai <shiro@acm.org> * lib/control/pmap.scm (run-map): Terminate threads when timeout reaches with fully-concurrent-mapper. https://github.com/shirok/Gauche/issues/964 * src/libsys.scm (absolute-time): Added. Handy to canonicalize 'timeout' argument. 2023-11-20 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/unit.scm (<cgen-dummy-unit>): Initialize cgen-current-unit with a dummy instance which issues error message saying <cgen-unit> isn't set up properly. It is better than 'object of class #<class <boolean>> doesn't have such slot'. 2023-11-19 Shiro Kawai <shiro@acm.org> * src/libmod.scm (module-exports?, module-binds?, module-binding-ref): Introduced new names in place of global-variable-visible?, global-variable-bound? and global-variable-ref. See https://github.com/shirok/Gauche/issues/963 2023-11-18 Shiro Kawai <shiro@acm.org> * src/libmod.scm (global-variable-visible?): Added. https://github.com/shirok/Gauche/issues/936 * ext/tls/tls.scm (tls-connect, tls-bind): Make proto argument optional. DTLS is not very usable now, so there's little point to allow users to specify udp here. * ext/tls: Add tls-poll 2023-11-17 Shiro Kawai <shiro@acm.org> * ext/tls: Support get self/peer address, option to not verify certificate. 2023-11-15 Shiro Kawai <shiro@acm.org> * doc/: Support epub generation from @qykth-git https://github.com/shirok/Gauche/pull/959 2023-11-14 Shiro Kawai <shiro@acm.org> * ext/tls: Support TLS server connection. 2023-11-10 Shiro Kawai <shiro@acm.org> * ext/tls: Remove AxTLS support. * src/module.c (Scm__InitModule): Remove obsoleted code to create built-in srfi modules. Now it is done in auto-generated libsrfi.scm so they're no longer needed, but had been harmless until we switch srfi-N to srfi.N naming convention. * lib/slib.scm (slib:features): Exclude srfi-0 from slib:features to prevent slib initializer to load all available srfis, especially srfi.29. It is mentioned in the comment immediately above, but I seem to have reverted the change when I updated slib.scm based on a newer template. https://github.com/shirok/Gauche/issues/960 2023-11-03 Shiro Kawai <shiro@acm.org> * libsrc/file/util.scm (remove-directory*): Add :if-does-not-exit argument 2023-10-27 Shiro Kawai <shiro@acm.org> * src/system.c (Scm__WinFastLockLock): Fast lock implementation for Windows (by @Hamayama, https://github.com/shirok/Gauche/pull/955) 2023-10-26 Shiro Kawai <shiro@acm.org> * src/bignum.c (bignum_mul_si): Optimize special case when bignum muliplied by y=2^n (y is fixnum). 2023-10-24 Shiro Kawai <shiro@acm.org> * lib/r7rs-setup.scm (open-binary-*-file): Even though Gauche doesn't distinguish textual and binary ports, opening file as binary may have an observable difference on Windows ('binary' mode). 2023-10-22 Shiro Kawai <shiro@acm.org> * src/core.c (Scm_ObjToExitCode): Consolidate exit code translation to be shared between 'exit', 'sys-exit', and 'emergency-exit'. https://github.com/shirok/Gauche/issues/947 * src/libeval.scm (exit), lib/r7rs-setup.scm (emergency-exit), src/libsys.scm (sys-exit): Allow to take #f as code, which is mapped to exit code 1. 2023-10-21 Shiro Kawai <shiro@acm.org> * lib/srfi/74.scm: Fix blob-*-set! procedures. * lib/check-script, lib/tools/check-script: Move check-script to tools subdirectory. 2023-10-15 Shiro Kawai <shiro@acm.org> * Drop eucjp, sjis and none internal CES support. We use utf8 exclusively from now on. 2023-10-14 Shiro Kawai <shiro@acm.org> * Various files: Remove code with GAUCHE_API_VERSION < 98 2023-10-11 Shiro Kawai <shiro@acm.org> * Release 0.9.13 2023-10-07 Shiro Kawai <shiro@acm.org> * Rename gauche-default-encoding -> default-file-encoding 2023-10-05 Shiro Kawai <shiro@acm.org> * src/char.c (Scm_DefaultEncodingName, gauche-default-encoding), src/libio.scm (open-input-file, open-output-file), ext/charconv/convaux.scm (%open-input-file/conv), (%open-output-file/conv): Add support fo gauche-default-encoding, the encoding to be used when no :encoding option is given when performing I/O. https://github.com/shirok/Gauche/issues/944 2023-10-04 Shiro Kawai <shiro@acm.org> * src/core.c (init_cond_features): Define feature identifier 'full-unicode' only when Gauche is compiled with utf8 encoding. 2023-10-03 Shiro Kawai <shiro@acm.org> * src/gauche/priv/writerP.h (SCM_WRITTEN_ELLIPSIS): Revert using Unicode ellipsis to three dots for truncated output. Windows terminals may not be able to handle Unicode ellipsis (U+2026) depending on the OS default codepage, and it triggers an error. 2023-10-01 Shiro Kawai <shiro@acm.org> * lib/rfc/json.scm (print-instance): If :json-name slot definition option is #t, use slot's name as the key. 2023-09-26 Shiro Kawai <shiro@acm.org> * libsrc/text/console.scm, lib/text/console/windows.scm: Allow console to cache screen size. query-screen-size may return cached results, unless the optional clear-cache argument is true. reset-terminal clears the cache so that next query-screen-size takes the actual screen size. * libsrc/text/line-edit.scm: Consider screen size to show completion candidates. The screen size may be cached, but updetad by refresh-display. 2023-09-24 Shiro Kawai <shiro@acm.org> * src/libexc.scm, src/libthr.scm: Expose thread exception API from gauche.threads module to match the document. It was defined in gauche module before, but that doesn't make sense. * src/liblazy.scm (make-promise), lib/r7rs-setup.scm: Move R7RS make-promise into scheme.lazy, and make built-in make-promise compatible to SRFI-226. This is technically an incompatible change, but we've only documented make-promise under scheme.lazy, so no code should be affected. 2023-09-22 Shiro Kawai <shiro@acm.org> * lib/srfi/226/parameter.scm (parameterize-srfi-226): If you use srfi.226, 'parameterize' is strictly limited to the srfi-226 compatible parmeters. 2023-09-20 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/literal.scm (literal-value=?): Optimized. * src/port.c: Reduce overhead of string port creation. A significant one is to omit registering finalizers, for they're not needed for string ports. Also a couple of micro-optimizations. 2023-09-19 Shiro Kawai <shiro@acm.org> * src/parameter.c: Fix semantics of thread parameter. To conform SRFI-226, mutation of dyncamically bound thread parameter shoudln't be visible from other threads. Thus we need a fresh thread local for every dynamic scope. On the other hand, legacy parameters only requires thread locals for the global scope. * src/threadlocal.c: Allow thread locals to be GC-ed and reused. Each thread local storage keeps 'generation' along its value. The generation is incremented when a thread local is GC-ed. The next thread local which happens to use the same slot has a different generation, so it can detect the slot is uninitialized, even its value is not SCM_UNBOUND. 2023-09-14 Shiro Kawai <shiro@acm.org> * src/proc.c (proc_print): Allow a procedure to have a custom printer. Scheme abstracts some kind of special constructs as proceudres, e.g. parameters and continuations. It is nice if we have a specialized printer to display info specific to such construct, rather than the generic procedure printer which can only show procedure-info. 2023-09-13 Shiro Kawai <shiro@acm.org> * src/write.c (write_object_fallback): If base class has print() function pointer and derived class doesn't have write-object method, we use base class's print() func instead of the default printer. 2023-09-12 Shiro Kawai <shiro@acm.org> * src/parameter.c, src/libparam.scm (make-legacy-parameter): Added. See https://github.com/shirok/Gauche/issues/935 2023-09-10 Shiro Kawai <shiro@acm.org> * libsrc/gauche/process.scm (do-process): Add :exit-code option to :on-abnormal-exit keyword arg https://github.com/shirok/Gauche/issues/928 2023-09-09 Shiro Kawai <shiro@acm.org> * libomega.scm: Add additional report for unbound variable error - list modules that exports the name. It may help the user to import necessary module. 2023-09-08 Shiro Kawai <shiro@acm.org> * libexc.scm, libomega.scm: Rename report-mixin-condition to report-additional-condition, so that non-mixin condition can also have customized error report. 2023-09-07 Shiro Kawai <shiro@acm.org> * src/error.c (Scm_MakeUnboundVariableError): Let evaluator throw <unbound-variable> error for unbound variable. 2023-09-06 Shiro Kawai <shiro@acm.org> * lib/tools/docprep: Renamed from preprocess-info. The plan is to make it handle common doc preparation tasks. 2023-08-31 Shiro Kawai <shiro@acm.org> * lib/tools/get-cacert: Moved from ext/tls/tls/get-cacert.scm, for it's a runnable tool. * tools/preprocess-info: Support '@c DEPRECATED' to mark deprecated APIs. 2023-08-29 Shiro Kawai <shiro@acm.org> * src/port.c, src/gauche/priv/portP.h: Fix the issue that port finalizer causes access to already collected object. It was the cause of https://github.com/shirok/Gauche/issues/900 Note that a custom port's flusher and closer are no longer called from the port finalizer if the custom structure is already collected. If the custom port requires guaranteed cleanup, it should attach its own finalizer to the custom port's heap allocated object. In general, port's finalizer should be regarded as a fail-safe mechanism, and explicit closing is recommended. 2023-08-27 Shiro Kawai <shiro@acm.org> * ext/gauche/bitvector.scm (bitvector-pad, bitvector-pad-right): Fix to handle the case length argument is smaller than the length of the given bitvector. For the consistency with string-pad, the bitvector should be truncated. https://github.com/shirok/Gauche/issues/922 2023-08-26 Shiro Kawai <shiro@acm.org> * lib/rfc/hmac.scm: Revise API to suit for typical usage. 2023-08-25 Shiro Kawai <shiro@acm.org> * lib/rfc/base64.scm, lib/rfc/quoted-printable.scm: Revise API. The encoder now can take both string and u8vector, and renamed to *-encode-message to reflect the generic nature. The decoder now takes target class, and renamed to *-decode-string-to. The latter is consistent with message digest framework. The existing APIs are kept for the backward compatibility. * src/libmacro.scm (typecase, etypecase): Added. * lib/rfc/digest.scm: Allow digest-string-to to take predefined encoding targets, e.g. base64 or hex. * lib/rfc/base64.scm: Implement Base32, Base32hex and Base16 as specified in RFC4648. 2023-08-24 Shiro Kawai <shiro@acm.org> * lib/rfc/hmac.scm, lib/util/digest.scm: Add API to return digest result as <u8vector>. * src/libio.scm (%write-walk-rec): Avoid recursing into write-object when obj is a <uvector>. This doesn't change the result, but saves time. 2023-08-22 Shiro Kawai <shiro@acm.org> * lib/rfc/json.scm (<json-mixin>): A convenient mapping from Gauche instance to JSON. * lib/rfc/base64.scm (base64-encode): Added omit-padding keyword arg. Some protocol asks to do so, e.g. JWS (rfc7515). * src/Makefile.in (clean-to-regenerate): Add a new target just to clean Gauche-generated files. Useful to regenerate them, but no need to start from reconfigure. 2023-08-17 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/precomp.scm: Use packed debug info in the precompiled C code. This reduces compiled *.o files about 10-20%. 2023-08-11 Shiro Kawai <shiro@acm.org> * doc/modutil.texi: Start documenting text.info. It is not particulary featureful, but having been used for quite a while and may be worth documenting. 2023-08-09 Shiro Kawai <shiro@acm.org> * src/memo.c (Scm_MemoTablePutv): Workaround for table extension failure. https://github.com/shirok/Gauche/issues/914 2023-08-07 Shiro Kawai <shiro@acm.org> * lib/control/scheduler.scm (scheduler-reschedule!): Allow to change only time or duration argument, leaving the other intact. 2023-08-04 Shiro Kawai <shiro@acm.org> * src/compile-1.scm (pass1/extended-lambda-body): Expand :optional handling hygienically. 2023-08-01 Shiro Kawai <shiro@acm.org> * lib/rfc/cookie.scm (construct-cookie-string): Catch up to RFC6265. We no longer need Version attribute, and both Expires and Max-Age are honored unconditionally. https://github.com/shirok/Gauche/issues/911 2023-07-23 Shiro Kawai <shiro@acm.org> * src/libio.scm, src/string.c, lib/gauche/interactive.scm: Add string-length slot to <write-controls>, which can limit the display length of strings. https://github.com/shirok/Gauche/issues/908 * src/libstr.scm (string-ellipsis), lib/gauche/pputil.scm, etc.: EXPERIMENTAL: If native CES is utf-8, use Unicode ellipsis (U+2026) instead of three periods when the output is truncated. We hope it makes easier to distinguish whether the output is actually truncated, or there is indeed an ellipsis in the data. 2023-07-20 Shiro Kawai <shiro@acm.org> * src/port.c, src/portapi.c: Remove port terminal mode; it was a wrong abstraction, for multiple ports can be connected to a terminal. The actual issue https://github.com/shirok/Gauche/issues/877 has been addressed with termios. 2023-07-19 Shiro Kawai <shiro@acm.org> * libsrc/text/console.scm (call-with-console), src/portapi.c: Fix port terminal mode handling. 2023-07-16 Shiro Kawai <shiro@acm.org> * src/portapi.c: (Scm_Putc, Scm_Puts, Scm_Putz): Honor port terminal mode. * ext/termios/termios.scm: Switch port terminal mode along the actial terminal state changes. 2023-07-15 Shiro Kawai <shiro@acm.org> * src/port.c (Scm_GetPortTerminalMode, Scm_SetPortTerminalMode): Added. This is to address managing output while editable REPL is active. https://github.com/shirok/Gauche/issues/877 * tools/make-export-list: Added. 2023-07-14 Shiro Kawai <shiro@acm.org> * src/libnum.scm (logset+clear): Added. 2023-07-06 Shiro Kawai <shiro@acm.org> * src/hash.c, src/libdict.scm (%current-recursive-hash), src/module.c, src/libomega.scm (object-hash): Make %current-recursive-hash a proper parameter. https://github.com/shirok/Gauche/issues/879 NB: This commit drops Scm_CurrentRecursiveHash(). It has only been used from libdict.scm. Technically this is incompatible change, but we bet nobody else depend on this. 2023-07-04 Shiro Kawai <shiro@acm.org> * lib/rfc/uuid.scm (parse-uuid): Add if-invalid keyword argument to return #f for invalid uuid format, rather than raising an error. 2023-07-03 Shiro Kawai <shiro@acm.org> * doc/extract.scm, lib/tools/preprocess-info: Rename extract script and make it avaialble as a tool script. 2023-06-20 Shiro Kawai <shiro@acm.org> * lib/srfi/216.scm, src/srfis.scm: Support SRFI-216, SICP prerequisites. 2023-06-12 Shiro Kawai <shiro@acm.org> * src/libvec.scm, ext/uvector/uvector.scm: Move string <-> uvector conversion routines to core, to avoid dependency issues. 2023-06-11 Shiro Kawai <shiro@acm.org> * src/genstub, lib/tools/genstub: Move genstub to tools subdir. * lib/gauche/parseopt.scm: Allow omitting whitespace between single-letter option and its argument. https://github.com/shirok/Gauche/issues/904 2023-06-09 Shiro Kawai <shiro@acm.org> * src/precomp, lib/tools/precomp: Start moving standard scripts to tools/ namespace, e.g. one will say 'gosh tools/precomp ...' instead of 'gosh precomp ...'. https://github.com/shirok/Gauche/issues/891 2023-06-07 Shiro Kawai <shiro@acm.org> * src/precomp, lib/gauche/cgen/precomp.scm: Add --omit-debug-source-info option to drop debug-source-info from the generated compiled-code literals. This can be used for: (1) The generated C file gets too big, or (2) user wants to hide the source info for application distribution. * src/Makefile.in: Use --omit-debug-source-info to generate compile.c for now. Adding source info makes compile.c too big to compile on memory-tight machines. Note: We may be able to revert this once we split compile.c. * ext/uvector/Makefile.in: Ditto for gauche--uvector.c 2023-06-06 Shiro Kawai <shiro@acm.org> * src/precomp, lib/gauche/cgen/precomp.scm: Rename omit-source-info keyword arg to omit-line-directives. We'll add option to omit debug source info in the output, so the previous name is too confusing. Although this flag is in the output of 'usage' of precomp command, it has never been implemented as a command-line option; the flag can be turned on via an environment variable, which is not documented. So we blatantly change the name without caring the backard compatibility. * src/code.c (Scm_CompiledCodeFinishBuilder): Revive NOSOURCE compiler flag (it's been ineffective after some big compiler rewrite). For now, we handle source-info just the same and discard them at the last moment of the code generation. We may as well ignore source-info in earlier stage, but we expect using this option is relatively rare so it may not worth doing so. Let's see. 2023-06-05 Shiro Kawai <shiro@acm.org> * lib/gauche/procedure.scm: Renamed to procutil.scm for the consistency. 2023-06-04 Shiro Kawai <shiro@acm.org> * gc/: bumped bdwgc 8.2.4 2023-06-02 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/precomp.scm (serializable-debug-info): Attach debug info to the precompiled codes. * src/vm.c (Scm_VMTakeSnapshot): Added. Since VMDump calls high-level output routine that may call back to Scheme code, the dump routine itself may change VM state during dumping. To prevent that, we take snapshot of VM before dumping. 2023-05-29 Shiro Kawai <shiro@acm.org> * lib/gauche/numerical.scm, lib/gauche/logical.scm, lib/gauche/signal.scm: Renamed to numutil.scm, logutil.scm and sigutil.scm, respectively, for the consistency of autoloaded files. 2023-05-23 Shiro Kawai <shiro@acm.org> * src/thread.c (Scm_ThreadTerminate): Support SCM_THREAD_TERMINATE_SCHEDULE flag. * src/libthr.scm (thread-schedule-terminate!): Added. * lib/r7rs-setup.scm, src/libexc.scm, src/liblazy.scm: Move raise-continuable and make-promise to the core, for they are exported from srfi.226 as well. 2023-05-22 Shiro Kawai <shiro@acm.org> * lib/rfc/base64.scm (base64-decode): Add :strict keyword argument. 2023-05-20 Shiro Kawai <shiro@acm.org> * lib/gauche/mop/typed-slot.scm: Added experimentally. 2023-05-19 Shiro Kawai <shiro@acm.org> * libsrc/gauche/sequence.scm (inverse-permuter, unpermute): Added. The names can be better. Let's see. 2023-05-16 Shiro Kawai <shiro@acm.org> * src/libio.scm (port-case-fold): Drop port-case-fold-set! (previously undocumented) and replace (setter port-case-fold), for the API consistency. A few references to the old name in the source tree are updated. NB: lib/gauche/cgen/precomp.scm is used to compile 0.9.13, so it needs to work on both old and new gosh. For now, we use an ugly kludge for transition. Also put port-case-fold in gauche.internal. case-fold flag has global effect and accidentally changing it can cause a wreak havoc. There are already scope-delimited way to change the mode (#!fold-case directive, or include-ci form). * 0.9.13_pre4, because of the above change. 2023-05-09 Shiro Kawai <shiro@acm.org> * ext/package-templates/configure-compat: Remove compatibility hack. Let's assume new modules are developed for 0.9.10 and later. 2023-05-08 Shiro Kawai <shiro@acm.org> * src/main.c, src/libeval.scm (%invoke-other-version): Extend -v option so that -v:VERSION tries to run VERSION, but if it can't find one, falls back to the current version. * lib/gauche/fileutil.scm, src/libsys.scm: Move glob to libsys.scm. Before, '%invoke-other-version' triggered autoload of fileutil, but that caused some issue when the user use gosh -vVERSION from the uninstalled source tree. 2023-05-01 Shiro Kawai <shiro@acm.org> * src/libnum.scm: Dropped hidden real-only versions of elementary functions, e.g. %sin, replacing with SRFI-94 real-sin etc. They were never documented. Now we document real-* version. * lib/compat/real-elementary-functions: Compatibility module to provide the old names such as %sin etc. 2023-04-17 Shiro Kawai <shiro@acm.org> * src/lazy.c (Scm_VMForce): Fix a race condition; there was a hazard when one thread reads promise's state and goes to evaluate thunk, while another thread changes them simultaneously. 2023-04-14 Shiro Kawai <shiro@acm.org> * ext/gauche/unicode.scm (string-east-asian-width, string-take-width) (string-drop-width): Added. 2023-04-13 Shiro Kawai <shiro@acm.org> * src/class.c: Changed my mind. Say :immutable instead of :init-once, for the option is exacly for immutable slots. Besides, init-once is weird, for 'initialization' occurs once regardless of slot's immutablility. (Set-once would probably have been closer.) 2023-04-12 Shiro Kawai <shiro@acm.org> * src/class.c: Support :init-once slot option. This limits slot-set! to a slot that's previously unbound. If the slot already has a value, an error is signaled. This effectively works as an immutable slot. Note that the slot initialization calls the internal setter, so we need to allow the first set!. * ext/threads, src/thread.c, src/mutex.c, src/libthr.scm, src/gauche/thread.h: Move ext/threads into core. Cf. https://github.com/shirok/Gauche/issues/893 2023-04-09 Shiro Kawai <shiro@acm.org> * lib/rfc/base64.scm (base64-encode-bytevector), (base64-decode-bytevector): Added. They depend on gauche.vport, and their tests are done separately in ext/vport. 2023-04-05 Shiro Kawai <shiro@acm.org> * src/compile-i.scm, src/vminsn.scm, src/vector.c: Allow uvector-ref to be inlined. UVEC-REF can now handle generic uvector. 2023-04-04 Shiro Kawai <shiro@acm.org> * lib/math/simplex.scm: Allow any sequence to be b an c vectors; we copy them internally anyway. 2023-03-27 Shiro Kawai <shiro@acm.org> * 0.9.13_pre3 2023-03-25 Shiro Kawai <shiro@acm.org> * lib/rfc/base64.scm: Allow :digits keyword argument to specify alternative digits. * src/vector.c (Scm_ReadUVector): Preliminary support of SRFI-207 string-notated bytevectors. 2023-03-20 Shiro Kawai <shiro@acm.org> * lib/math/simplex.scm: Added. There are lots of room of optimization, though it's working. * ext/uvector/matrix.scm (array-vector-mul, vector-array-mul): Add (u)vector and array multiplication, for they appear frequently. We may make array-mul to accept vector arguments, but it can be done later. 2023-03-15 Shiro Kawai <shiro@acm.org> * src/lazy.c (Scm_VMForce): Allowing multiple threads to force a promise simultaneously, as SRFI-226 semantics. We only guarantee that the force value is always the same - the first delivered result takes precedence. * src/compile-1.scm (delay): Support mv-delivering delay. 2023-03-11 Shiro Kawai <shiro@acm.org> * src/lazy.c (Scm_MakePromise, Scm_VMForce): Run delayed thunk in the parameterization of the time the promise is created. This is for SRFI-226, but divergence from R7RS. Note that this change breaks the current implementation of SRFI-155 in a subtle way. Once SRFI-226 is adopted, however, SRFI-155 semantics is supported natively. For now, we just suppress the test that relies on the broken implementation. 2023-03-10 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/stub.scm (if, when): Warn when these obsoleted stub toplevel forms are used. These are never officially documented and we switched to .if/.when for years ago, but just in case we keep them a bit more. 2023-03-09 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/cise.scm (.error): Add CiSE macro to generate #error cpp directive. See libsys.scm for the use case. * src/compile-0.scm (define-simple-struct): Define macros and cise-exprs that expands into slot offset. This allows the CiSE code to use slot offset without relying on literal numbers. (See LVAR_* macros in compile.scm for the use case). 2023-03-07 Shiro Kawai <shiro@acm.org> * src/libsys.scm (seconds+): Added (srfi-226) 2023-03-01 Shiro Kawai <shiro@acm.org> * lib/srfi/235.scm: Start adding. 2023-02-28 Shiro Kawai <shiro@acm.org> * src/libproc.scm (constantly): Allow to return multiple values, adopting SRFI-235. * lib/gauche/procedure.scm (flip, swap): Added a couple of SRFI-235 procedures. 2023-02-27 Shiro Kawai <shiro@acm.org> * src/libparam.scm (temporarily): 'with' -> 'temporarily', according to srfi-226 revision. 2023-02-25 Shiro Kawai <shiro@acm.org> * lib/control/plumbing.scm (plumbing): Add generic utility. Simplify make-pump etc. just to take oports (without options). If the user wants to specify options, they can use 'plumbing'. 2023-02-23 Shiro Kawai <shiro@acm.org> * lib/math/const.scm: Add greek identifiers (π). UTF-8 has become ubiquitous and we don't need to hesitate using them. 2023-02-20 Shiro Kawai <shiro@acm.org> * lib/control/plumbing.scm: Allow optional names to inlets/outlets so that ports can be extracted from a plumbing by name. NB: API of add-outlet-output-port! has changed. We'll likely to change convenience utilities to accept names as well. 2023-02-19 Shiro Kawai <shiro@acm.org> * lib/srfi/239.scm: Add srfi-239 (documented). 2023-02-18 Shiro Kawai <shiro@acm.org> * src/libsys.scm (time-comparator): Added. Although <time> can be compared with default-comparator, a separate comparator is handy to be used to compose more complicated comparators (cf. srfi.228). We also want date-comparator, but <date> is defined in srfi.19, and we don't want to add bindings not defined in the srfi to the srfi module. We'll think where it should go. 2023-02-16 Shiro Kawai <shiro@acm.org> * src/Makefile.in (BUILD_GOSH_VERSION): Give -v option to BUILD_GOSH so that precompilation of core is guaranteed to be done with the specified version of Gauche. Without this, sometimes the changes in the prerelease version caused build problems. 2023-02-10 Shiro Kawai <shiro@acm.org> * src/libeval.scm (load): Change return value - on successful loading, return the actual filename loaded. It is useful, for 'load' tries a few things to find the actual file (look for search paths, adding file suffixes, etc.) so the actual file path may not be tha same as the 'file' argument. This is technically an incompatible change: Before, 'load' returns #t on success, and it is documented. We think returning pathname is better, and the code that treats the return value as a generalized boolean still works. 2023-02-09 Shiro Kawai <shiro@acm.org> * src/portapi.c (Scm_Flush): Fix bug that stdout is locked by the primoridal thread in REPL (or any thread that first calls flush). https://github.com/shirok/Gauche/issues/876 2023-02-07 Shiro Kawai <shiro@acm.org> * src/srfis.scm (srfi-244): Supported (it's already in the core). 2023-02-01 Shiro Kawai <shiro@acm.org> * src/precomp, lib/gauche/cgen/precomp.scm: Allow to suppress #line directives with environment variable GAUCHE_PRECOMP_OMIT_SOURCE_INFO. Sometimes the error position in *.scm is unreliable for troubleshooting. * ext/file/event.scm: Start adding file event API; inotify for the starter. We'll provide high-level API that hides difference of subsystems. 2023-01-29 Shiro Kawai <shiro@acm.org> * src/geninsn: Add feature to load/save insn to opcode map. See https://github.com/shirok/Gauche/issues/869 2023-01-26 Shiro Kawai <shiro@acm.org> * src/libfmt.scm (make-format-plural): Support ~P. 2023-01-24 Shiro Kawai <shiro@acm.org> * src/libmacro.scm (define-class, define-generic, define-method): Turn them into a macro rather than compiler-builtin, finally. This, however, has a little side-effect; they expand to define forms, so they can now appear in the declaration context, not necessarily at the top-level. We don't officially support non-toplevel use of these forms yet, for these forms have global effect and we're not sure how they should interact with lexical scope. * src/libobj.scm (define-method): Bind the method closure to a module-local hidden toplevel variable, so that test-module can find the method body and scan for undefined variable references. Note: This forces define-method to be on toplevel. Although it hasn't been explicitly documented, it's been assumed that they're toplevel forms as the name suggests. The code that has been used define-method in non-toplevel raises an error after this change; they should be rewritten to make define-method toplevel. Technically it can appear in the internal definition context, but we're not sure about its semantics. 2023-01-23 Shiro Kawai <shiro@acm.org> * src/number.c (Scm_SinPi): Make sure (= (real-sinpi 0.25) (real-cospi 0.25)). 2023-01-22 Shiro Kawai <shiro@acm.org> * lib/data/ulid.scm (make-ulid-generator): Use internal random source when random-source argument is omitted. Using default-random-source causes ULID conflict for multiple runs if the user didn't randomize it beforehand. https://github.com/shirok/Gauche/issues/873 2023-01-20 Shiro Kawai <shiro@acm.org> * src/compile-1.scm (pass1/body-rec): Make duplicate internal definitions an error. https://github.com/shirok/Gauche/issues/872 2023-01-19 Shiro Kawai <shiro@acm.org> * libsrc/data/ring-buffer.scm (ring-buffer-room): API Added. 2023-01-18 Shiro Kawai <shiro@acm.org> * lib/contro/plumbing.scm: Move tapping port from gauche.vport. 2023-01-15 Shiro Kawai <shiro@acm.org> * ext/vport/vport.scm (open-tapping-port): Experimentally added. We might make a separate module for it, so do not count on this. 2023-01-08 Shiro Kawai <shiro@acm.org> * src/libnum.scm (negative-zero?): Rename undocumented '-zero?' to 'negative-zero?' and make it official. Replaced internal use of '-zero?' to 'negative-zero?'. 2023-01-07 Shiro Kawai <shiro@acm.org> * src/libnum.scm: Change %expt -> real-expt etc. The real-only versions (%expt, %sin, etc.) are undocumented but used internally when the domain and range are real. SRFI-94 already defines real-only names, so we name them accordingly and make them official. NB: If an external program uses unofficial names, they would raise an error. If that causes a serious problem, we'll provide compatibility layer. * src/libsys.scm (sys-strsignal): Added. 2023-01-04 Shiro Kawai <shiro@acm.org> * lib/srfi/210.scm: Added SRFI-210. * src/libmacro.scm (set!-values): Allow improper list in the var list for the consistency. 2023-01-02 Shiro Kawai <shiro@acm.org> * lib/gauche/fmtutil.scm: Support ~@r roman numeral formatter. 2022-12-29 Shiro Kawai <shiro@acm.org> * src/libmacro.scm (rotate!): Added. CL's rotatef. 2022-12-25 Shiro Kawai <shiro@acm.org> * src/port.c, src/vm.c: Switch current-*-port and SCM_CUR* to parameters; R7RS specifies them to be so, and we want new parameterization scheme to work on these values too. NB: This requires recompilation of extension modules, for the code that refers to SCM_CUROUT etc. is compiled to refer to the VM slots directly, which no longer exist. This change may also affect performance; need to take benchmark. 2022-12-24 Shiro Kawai <shiro@acm.org> * src/compile-i.scm (dynamic-wind): Optimized version of inlined dynamic-wind incorrectly omitted POP-HANDLERS. It's rare that this optimization is triggered (after thunk must be a constant lambda, which is not common), and probably that's why this hasn't been revealed. Existing code precompiled with 0.9.12 and before may contain erroneous code (though it's very unlikely). 2022-12-22 Shiro Kawai <shiro@acm.org> * lib/srfi/172.scm, lib/srfi/172/functional.scm: Added. 2022-12-21 Shiro Kawai <shiro@acm.org> * libsrc/text/line-edit.scm (insert-closing-paren): Change paren highlight. Now it highlighs opening paren for a short period of time when closing paren is inserted. 2022-12-11 Shiro Kawai <shiro@acm.org> * lib/srfi-*.scm, lib/srfi/*.scm: Make srfi/*.scm main implementation files https://github.com/shirok/Gauche/issues/680 * src/core.c (Scm_SimpleMain): Fix exit status alined with script execution. https://github.com/shirok/Gauche/issues/861 2022-12-10 Shiro Kawai <shiro@acm.org> * src/libfmt.scm (formatter-lex): Support ~ + newline * lib/srfi-228.scm, src/srfis.scm: Add srfi-228. 2022-12-08 Shiro Kawai <shiro@acm.org> * src/libfmt.scm: Add ~&. * src/libio.scm (fresh-line): As a side-effect from port column counting, we can now easily have CL's fresh-line. 2022-12-06 Shiro Kawai <shiro@acm.org> * src/libio.scm (port-link!, port-unlink!): Added. * src/port.c: Reset output column count when linked input port reads '\n', so that ~:W indent correctly during interactive REPL. 2022-12-05 Shiro Kawai <shiro@acm.org> * src/gauche/priv/portP.h, src/port.c: Add port linking. Stdin and stdout is linked by default; reading from stdin causes flushing stdout. 2022-12-04 Shiro Kawai <shiro@acm.org> * src/libio.scm (port-column): Expose this to Scheme (but only for gauche.internal module, for now) * src/libfmt.scm (make-format-pprint): Support ~:w (pretty print) and ~@w. 2022-12-01 Shiro Kawai <shiro@acm.org> * src/write.c (Scm_Vprintf): Add provisional support of %W (pprint). We still need to figure out how to set indent. 2022-11-30 Shiro Kawai <shiro@acm.org> * src/write.c, src/io.scm: Add indent slot to <write-controls> * lib/gauche/pprint.scm: Add indentation according to the indent value of the controls. 2022-11-24 Shiro Kawai <shiro@acm.org> * src/vm.c: Ensure dynamic handlers are invoked on a proper dynamic environment. This is important to ensure 'with' and delimited continuations work together. The entry of dynamic handler chain is changed. They should be treated opaque outside of vm.c. 2022-11-23 Shiro Kawai <shiro@acm.org> * libsrc/gauche/parameter.scm: Export parameterize as an alias of parameterize/dynwind, so that the legacy code gets backward-compatible parameterize. New code shouldn't use this module. * src/libparam.scm (parameterize/dynwind): Provide backward-compatible parameterize under this name. 2022-11-22 Shiro Kawai <shiro@acm.org> * src/libmacro.scm (independently), src/srfis.scm (srfi-236): As srfi-236 is finalized, support this officially. It's general enough to be built-in. 2022-11-20 Shiro Kawai <shiro@acm.org> * lib/scheme/comparator.scm: Incorporate srfi-162 as sell. * lib/compat/chibi-test.scm (chibi-test): Support test-equal. 2022-11-18 Shiro Kawai <shiro@acm.org> * src/parameter.c, src/libparam.scm (current-parameterization), (parameterization?, call-with-parameterization): Added. 2022-11-15 Shiro Kawai <shiro@acm.org> * lib/gauche/test/include.scm (test-include-r7): Added. Make it easier to include r7rs test script in Gauche tests. 2022-11-13 Shiro Kawai <shiro@acm.org> * lib/srfi-236.scm: Added. 2022-11-12 Shiro Kawai <shiro@acm.org> * src/parameter.c: Change how parameter procedure keeps parameter object. Now we emply the same way as continuation procedure; that is, SCM_PROCEDURE_INFO holds a unique uninterned symbol, and the extractino procedure can use SCM_SUBR_DATA. NB: With this change, parameter? returns #t for primitive parameter procedures as well. It should be. * src/libparam.scm (%parameterize): Start using dynamic env to keep ordinary parameters. 2022-11-10 Shiro Kawai <shiro@acm.org> * lib/gauche/time.scm (time-these/report, report-time-results): Allow measure/report using not only cpu times, but also real, user or sys. 2022-11-04 Shiro Kawai <shiro@acm.org> * src/compaux.c, src/libmacbase.scm: Remove syntactic closure support. They haven't been used at all. * src/vm.c, src/class.c, src/libproc.scm (make-continuation-prompt-tag, default-continuation-prompt-tag): Add continuation prompt tag. 2022-11-02 Shiro Kawai <shiro@acm.org> * src/vm.c: Store exception handler in DENV. 2022-10-29 Shiro Kawai <shiro@acm.org> * src/vm.c: VM inherits denv from calling thread. * src/list.c (Scm_AlistCopy): Implement in C. 2022-10-28 Shiro Kawai <shiro@acm.org> * src/compile-*.scm: Support with-continuation-mark. 2022-10-27 Shiro Kawai <shiro@acm.org> * src/compile.scm ($DYNENV): New IForm node for supporting continuation marks. 2022-10-20 Shiro Kawai <shiro@acm.org> * src/parameter.c, ext/threads/threads.scm (make-thread-local): Add srfi-226 thread-local APIs. 2022-10-19 Shiro Kawai <shiro@acm.org> * src/gauche/priv/vmP.h (ScmEscapePoint), src/vm.c (Scm_VMDefaultExceptionHandler, Scm_VMReraise), src/libexc.scm (%reraise): Address the issue that escapePoint in the floating chain loses pointer to the continuation frames. https://github.com/shirok/Gauche/issues/852 We fell back to safe-but-slow option: Continuation chains are saved as soon as default exception handler is invoked, so that all active EPs point to contFrames on heap. 2022-10-03 Shiro Kawai <shiro@acm.org> * src/libmacro.scm (quasirename): Attach source info of the quasirename constructed lists. 2022-10-02 Shiro Kawai <shiro@acm.org> * src/read.c (process_sharp_comma): Attach source info to the output of sharp-comma constructor, if it yields a pair. Notably, this results source info attached to string interpolations. 2022-10-01 Shiro Kawai <shiro@acm.org> * macro.c (compile_rule1, realize_template_rec): Carry over source info of macro template and macro input. * libeva.scm (%show-stack-trace): Show all macro expansion history along the source info. 2022-09-27 Shiro Kawai <shiro@acm.org> * src/list.c (Scm_MakeImmutablePair): C API INCOMPATIBLE CHANGE: Now it takes the third argument, attrs, being parallel to Scm_MakeExtendedPair, for the consistency. We expect the API isn't used by external libraries, for the immutable pairs are recent addition. * Bug fix on debug source info of quoted literals. https://github.com/shirok/Gauche/issues/847 2022-09-25 Shiro Kawai <shiro@acm.org> * lib/gauche/vm/debugger.scm (debug-print-conditionally) (debug-funcall-conditionally), src/read.c (read_internal): Add "#??=" and "#??," debug helper syntax, to print info only when condition is met. 2022-09-21 Shiro Kawai <shiro@acm.org> * lib/gauche/redefutil.scm (class-redefinition): Fix redefining a class with redefined metaclass https://github.com/shirok/Gauche/issues/845 * src/libobj.scm (write-object <class>): Show 'redefined' for class objects with custom metaclass. 2022-09-18 Shiro Kawai <shiro@acm.org> * lib/data/range.scm (bitvector/bool-range, bitvector/int-range): Added bitvector to range constructors. Also revised <flat-range> definition to allow raw-indexer customization and optimization. 2022-09-14 Shiro Kawai <shiro@acm.org> * tools/tls/Makefile.in: Use mbedtls 3.2.1 for mbedtls-internal * src/portapi.c (Scm_Getz): Bug fix: We've treated bufport_filler returning 0 as EOF, but that's not always the case---if the requested size is 0, e.g. via (read-bytevector 0), returning 0 is a valid return value without meaning EOF. * ext/tls/tls-mbed.c: Show string error message for mbedtls errors, along the error code. 2022-08-26 Shiro Kawai <shiro@acm.org> * src/vm.c (Scm_VMApply0, etc.): Experimentally turn on subr trampoline; if a subr is tail-called from another subr, and the number of argument matches, then we skip the usual argument folding & procedure dispatching sequence. 2022-08-14 Shiro Kawai <shiro@acm.org> * lib/srfi-222.scm: Added. 2022-08-12 Shiro Kawai <shiro@acm.org> * libsrc/text/line-edit.scm (completion-command): Allow completion with hyphenated prefxies, e.g. 'w-i-f' -> 'with-input-from-'. 2022-08-11 Shiro Kawai <shiro@acm.org> * lib/text/segmented-match.scm (text.segmented-match): Added. 2022-08-09 Shiro Kawai <shiro@acm.org> * doc/modutil.texi: Start adding text.multicolumn doc * lib/text/multicolumn.scm (layout-multicolumn): Make multicolumn formatting two-step process for flexibility; layout-multicolumn returns a list of text for each line, and display-multicolumn uses it to print out the formatted text. 2022-08-06 Shiro Kawai <shiro@acm.org> * src/libexc.scm, src/srfis.scm: Export missing identifiers from srfi-35. 2022-08-04 Shiro Kawai <shiro@acm.org> * src/libvec.scm (bitvector-any-value?, bitvector-every-value?): Allow start/end optional args. 2022-08-03 Shiro Kawai <shiro@acm.org> * src/vector.scm (bitvector-any-value?, bitvector-every-value?): Rename bitvector-any? and bitvector-every? and let them take the bit value to search. This eliminates the need of bitvector-none?, and also make it symmetric (we can test 'having at least 1 zero). 2022-07-30 Shiro Kawai <shiro@acm.org> * lib/srfi-209.scm: Added, passes the tests (tests depend on gauche.bitvector, so it is tested in ext/gauche). 2022-07-29 Shiro Kawai <shiro@acm.org> * lib/scheme/regex.scm (scheme.regex): Export missing regex? https://github.com/shirok/Gauche/pull/836 2022-07-28 Shiro Kawai <shiro@acm.org> * src/vm.c (POP_CONT): Avoid copying C continuation data into machine stack. The data argument of Ccont proc now points direclty to the continuation's data field. This should be ok, for subrs aren't supposed to modify these fields. NB: There may be an issue if void* and ScmObj are different in size, though its very unlikely in modern platforms. 2022-07-14 Shiro Kawai <shiro@acm.org> * ext/srfi/srfi-178.scm, ext/gauche/bitvector.scm, lib/srfi-178.scm: Move bitvector lib as gauche.bitvector, for we'll add some more bitvector utilities. srfi-178 just reexport srfi procedures. 2022-07-12 Shiro Kawai <shiro@acm.org> * src/libvec.scm (bitvector-any?, bitvector-every?, bitvector-none?): These are not in srfi-178 but handy to have. 2022-07-06 Shiro Kawai <shiro@acm.org> * doc/corelib.texi (format): Description of ~nR was missing. * lib/gauche/cgen/stub.scm (define-cclass): Fix cise issue in define-cclass https://github.com/shirok/Gauche/issues/832 2022-07-04 Shiro Kawai <shiro@acm.org> * ext/mt-random: Make mersenne twister RNG thread-safe by default. 2022-07-03 Shiro Kawai <shiro@acm.org> * lib/data/ulid.scm (ulid): Drop record type name from export list. It doesn't follow Gauche's class naming convention. We may reintroduce it as <ulid> in future, but let's see. 2022-06-30 Shiro Kawai <shiro@acm.org> * lib/gauche/interactive.scm (describe <generic>): Show each method's source location if available. * src/libobj.scm (%expand-define-method), src/class.c (method_initialize): Set source location info to the list in <method>'info, so that it can be retrieved by source-info. 2022-06-28 Shiro Kawai <shiro@acm.org> * src/libmacro.scm (assume-type): support optional msg objs ... arguments for the custom error message. (assume): Use custom error message if provided. * src/libtype.scm, src/number.c: Native type support for <intptr_t> and <uintptr_t>. 2022-06-27 Shiro Kawai <shiro@acm.org> * src/libalpha.scm (make-case-lambda): Make procedure-info of case-lambda more readable. It is for human reader, and having #(#<closure ...> ...) is not helpful. Now it is (<name> #(<formals> ...)). 2022-06-25 Shiro Kawai <shiro@acm.org> * Release 0.9.12 2022-06-21 Shiro Kawai <shiro@acm.org> * src/number.c (read_number): Support srfi-169, underscores in numbers. Technically this introduces incompatibility: - Tokens such as 1_2_3 is now read as a number 123, instead of a symbol. - Underscores in prefexed numeric literals must obey srfi-169 instead of simply being ignored. #x_dead_beef_ was ok before, but no longer. 2022-06-19 Shiro Kawai <shiro@acm.org> * ext/uvector/uvlib.scm.tmpl (@vector-segment): Check arg to avoid infinite loop. https://github.com/shirok/Gauche/issues/828 2022-06-06 Shiro Kawai <shiro@acm.org> * lib/srfi-232.scm: Add srfi-232 Flexible curried procedures. 2022-06-05 Shiro Kawai <shiro@acm.org> * src/compile-4.scm (pass4/scan): Fix incorrect free-variable propagation in $clambda node. https://github.com/shirok/Gauche/issues/826 2022-06-04 Shiro Kawai <shiro@acm.org> * src/liblist.scm (num-pairs): Added. 2022-05-30 Shiro Kawai <shiro@acm.org> * test/net.scm: Recover gauche.net test 2022-05-29 Shiro Kawai <shiro@acm.org> * src/list.c (Scm_LastPair): Detect circular list. It is not required in the spec (last and last-pair), but doing so is cheap and it's something nice to have. 2022-05-28 Shiro Kawai <shiro@acm.org> * src/libvec.scm (make-s8vector etc.), ext/uvector/uvlib.scm.tmpl: Move constructors to the core. 2022-05-21 Shiro Kawai <shiro@acm.org> * lib/gauche/connection.scm, lib/gauche/netutil.scm: Moved connection protocol implementation to gauche.net. Keep gauche.connection just for the backward compatibility. 2022-05-20 Shiro Kawai <shiro@acm.org> * ext/net, src/libnet.scm, src/net.c, src/netaddr.c, src/netdb.c: Move ext/net into core. Sometimes it's handy for the extension modules to be able to call net-related C functions. 2022-05-16 Shiro Kawai <shiro@acm.org> * ext/tls/tls.ac: Do not compile axtls by default. Preparing to drop axtls support in future releases. 2022-05-10 Shiro Kawai <shiro@acm.org> * src/signal.c (Scm_SigWait): Avoid using signal number 0 for sigismember/sigdelset. This causes failure on OSX Monterey. 2022-04-21 Shiro Kawai <shiro@acm.org> * ext/srfi/srfi-19.scm: Define object-compare for <date>. 2022-04-20 Shiro Kawai <shiro@acm.org> * lib/util/temporal-relation.scm: Added. 2022-04-18 Shiro Kawai <shiro@acm.org> * configure.ac: 0.9.12_pre1 2022-04-17 Shiro Kawai <shiro@acm.org> * src/liblist.scm (list-ref): Better error message. (See comments in https://github.com/shirok/Gauche/issues/814) 2022-04-16 Shiro Kawai <shiro@acm.org> * src/libmacro.scm (push-unique!): Added, finally. CL's pushnew. I've been resisting the temptation to add this, for most of the times it doesn't bother me much to write out the logic explicitly. However, I hit the cases where this makes code much cleaner enough times. 2022-04-07 Shiro Kawai <shiro@acm.org> * src/main.c (main): Noticed *program-name* and *argv* aren't defined when gosh invoked as REPL. Although they are of little use in REPL, leaving them undefined may cause some inconvenience. We just define "" as *program-name* and () as *argv*. 2022-04-06 Shiro Kawai <shiro@acm.org> * ext/tls/tls.c: Fix fd leak in <ax-tls> https://github.com/shirok/Gauche/issues/817 2022-03-21 Shiro Kawai <shiro@acm.org> * lib/control/thread-pool.scm (wait-all): Fix race condition ( https://github.com/shirok/Gauche/issues/812 ) 2022-03-16 Shiro Kawai <shiro@acm.org> * src/system.c (Scm_StrfTime): MinGW's strftime() returns a multibyte string in system's language settings, so its handling is tricky. We introduced a compatibility layer. * src/libsys.scm (sys-setlocale): Allow #f for locale argument (corresponding to passing NULL in C API). It can be used to obtain the current locale. 2022-03-10 Shiro Kawai <shiro@acm.org> * src/write.c, src/libfmt.scm: If string is truncated within double quotes, add '"...' (instead of ' ..."' as before). The normal truncation is ' ...' (a whitespace before dots), so it gives a clue that the string is truncated. We also support the same format in Scm_Printf(). 2022-03-09 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/precomp.scm: Revert commit #f5577697cf - this appears no longer needed to inline procedures within the same compilation unit during precompilation. 2022-03-06 Shiro Kawai <shiro@acm.org> * src/write.c (vprintf_pass2): Fix truncation of %S and %A - it looked like we were in the middle of the change and then forgot to pick it up. 2022-03-05 Shiro Kawai <shiro@acm.org> * src/libfmt.scm (chop-and-out): Make 'truncation' format directive recognize an open double quote and close it properly even if the content is truncated. This will prevent font colorlizer (e.g. Emacs Scheme mode) from being messed up by unclosed double quotes caused by truncation. 2022-02-26 Shiro Kawai <shiro@acm.org> * src/compile-2.scm (pass2/$LET): Lift component closures of locally defined case-lambda into the same level of environment. Expecting the later stage of case-lambda optimization to become easier. Note that this changes ordinary let frame to letrec frame (since the newly introduced variable is referred to by the case-lambda construction in the same environment). We expect such conversion would occur rarely (if local case-lambda is introduced by internal defines, the frame is already letrec*.) 2022-02-21 Shiro Kawai <shiro@acm.org> * src/libalpha.scm (case-lambda-decompose): Rename from case-lambda-info (too vague). Use new %case-lambda-info so that it can have definite info, instead of relying procedure-info slot. This procedure hasn't been public, so name change shouldn't affect existing code. We may come up a better name later. 2022-02-20 Shiro Kawai <shiro@acm.org> * src/compile-1.scm, src/libalpha.scm: Global case-lambda inliner. Now case-lambda procedure can be define-inline'd, and if the call site knows the number of arguments, it preselects the apprpricate branch and direclty inlines it. 2022-02-15 Shiro Kawai <shiro@acm.org> * src/libalpha.scm (make-case-lambda): No longer look at 'formals' argument; the info can be extracted from closures. 2022-02-14 Shiro Kawai <shiro@acm.org> * src/number.c (Scm_NumCmp): Make sure '=' transitivity is kept in exact v inexact comparison. https://github.com/shirok/Gauche/issues/805 2022-02-12 Shiro Kawai <shiro@acm.org> * text/line-edit.scm: Add whitespace after the completed word if the completion returns a single definite result. It is indicated by the lister callback returning a string, rather than a list. Note that we need to distinguish the case when there's only one candidate but further search is possible (e.g. completing a directory name when searching the actula file). 2022-02-11 Shiro Kawai <shiro@acm.org> * data/ulid.scm: Added. Port from https://github.com/shirok/scheme-ulid 2022-02-10 Shiro Kawai <shiro@acm.org> * gc: Bumped bdwgc 8.0.6 2022-02-09 Shiro Kawai <shiro@acm.org> * lib/gauche/libutil.scm (library-fold): Rewrote on top of glob-fold. This allows extended glob pattern such as {} and **. * lib/gauche/fileutil.scm (glob-fold): Add prefix keyword arg. 2022-02-02 Shiro Kawai <shiro@acm.org> * src/read.c (Scm_CharWordConstituent), src/libio.scm (char-word-consituent?): Expose these for they are generally useful to write something that deal with Scheme names. 2022-01-30 Shiro Kawai <shiro@acm.org> * libsrc/text/gap-buffer.scm (gap-buffer-contains, gap-buffer-looking-at?): Added. * src/libstr.scm (opt-substring): Rename %maybe-substring opt-substring and officially support it in #<module gauche>. It is generally useful. 2022-01-23 Shiro Kawai <shiro@acm.org> * libsrc/text/line-edit.scm: Some improvement of completion. Now if there're multiple candidate and TAB is typed twice, the candidate list is displayed. * lib/text/multicolumn.scm: Added 2022-01-21 Shiro Kawai <shiro@acm.org> * lib/srfi-227.scm: Added srfi-227. 2022-01-18 Shiro Kawai <shiro@acm.org> * lib/gauche/editable-reader.scm: Implement a rudimental symbol completion. We'll experiment for a while to see what's best in REPL. 2022-01-16 Shiro Kawai <shiro@acm.org> * libsrc/text/line-edit.scm: Add a hook for completion. * libsrc/text/gap-buffer: Drop gap-buffer-gap-start and gap-buffer-gap-end. They reveals internals unnecessarily. They weren't documented, and have only been used for testing. (gap-buffer-pos-at-end?): Added. 2022-01-13 Shiro Kawai <shiro@acm.org> * src/compile-1.scm (case-lambda): Change case-lambda handling. Instead of expanding to the call for make-case-lambda in pass1, we create $CLAMBDA node and carry it up to pass5. This will allow more optimizations. 2022-01-05 Shiro Kawai <shiro@acm.org> * src/mmap.c (Scm_SysMmapWX): Separate writable pages and executable page if PaX MPROTEXT is active. 2022-01-04 Shiro Kawai <shiro@acm.org> * src/list-ext-objects.sh: Allow to take extra directories to scan object files to archive. * src/Makefile.in, tools/tls/Makefile.in: If --with-tls=mbedtls-internal, scan tools/tls to archive mbed object files in the static library. Cf. https://github.com/shirok/Gauche/issues/802 2021-12-28 Shiro Kawai <shiro@acm.org> * Release 0.9.11-p1: A "patch" release fixing mbedtls-internal issue. * ext/tls/tls.ac: Fix build defect when internal mbedtls is used https://github.com/shirok/Gauche/issues/799 2021-12-23 Shiro Kawai <shiro@acm.org> * Release 0.9.11 2021-12-16 Shiro Kawai <shiro@acm.org> * src/libsys.scm (sys-mmap, <memory-region>): Improve mmap API. size argument needs to be mandatory (there's no reasonable default). Expose fields of <memory-region> for introspection. 2021-12-14 Shiro Kawai <shiro@acm.org> * ext/tls/tls-mbed.c: Support MbedTLS 3.0. This is a partial support: we need tls-bind to allow TLS-enabled server. But at least this one works as a client. 2021-12-03 Shiro Kawai <shiro@acm.org> * src/libio.scm (%write-walk-rec): Handle circular reference through boxes. https://github.com/shirok/Gauche/issues/787 2021-12-01 Shiro Kawai <shiro@acm.org> * check-build-version, configure.ac, Makefile.in: Before generating files by BUILD_GOSH, check if it is the latest release. With this, the user who accidentally try to compile from the repo using older Gauche will be told so upfront, instead of getting an misterious error in the middle of building. The required BUILD_GOSH version is kept in configure.ac, right below the AC_INIT line. Don't forget to update when you make a new release. 2021-11-23 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/precomp.scm (handle-define-inline): Fix that define-inline'ed procedures weren't expanded within the same compilation unit. We need to let the compiling enviornment know about the inlined procedures. 2021-11-22 Shiro Kawai <shiro@acm.org> * src/libmacro.scm (cond-expand): EXPERIMENTALLY add 'package' clause to test package existence and its version. A special package name 'gauche' can be used to check running Gauche version. Let's see how it goes. 2021-11-15 Shiro Kawai <shiro@acm.org> * src/gauche.h (ScmProcedure), src/proc.c (Scm__CopyProcedure): Use the reserved slot of ScmProcedure as tags-alist. We can keep srfi-229 procedure tag there, and more in future. INCOMPATIBLE CHANGE: We make Scm_CopyProcedure private, moved to priv/procP.h and renamed to Scm__CopyProcedure. Use code shouldn't need to use it, for procedures are immutable entity and copying shouldn't make difference. It is only used internally to do certain bookkeeping. * lib/srfi-229.scm: Added. 2021-11-11 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/stub.scm (make-array-getter-setter): Support treating u8int_t array in cstruct as <u8vector>. Eventually we'll extend it to other uniform vectors, and this is the first step. (define-cproc): Allow '_ in the arguments to indicate unused args. * lib/gauche/cgen/cise.scm: (define-cenum): Added. This has been in Gauche-gl for a while. 2021-11-10 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/cise.scm: Allow '_' as an unused argument in define-cfn, so that we don't need a dummy cast expression to suppress 'unused argument' warnings. We also need the similar stuff for define-cproc and define-cmethod, but the handling of arguments differ a lot. So, maybe later. 2021-11-07 Shiro Kawai <shiro@acm.org> * lib/gauche/cgen/stub.scm: Rename define-type to declare-stub-type. Make it clear that it is merely a hint to the stub generator, only effective during a single stub file processing. (define-cclass): Let it handle declare-stub-type, even if it needs custom c-predicate name or unboxer name. (define-cstruct): Incorporated define-cstruct, an easier stub interface for C struct. 2021-11-05 Shiro Kawai <shiro@acm.org> * src/libtype.scm (ScmNativeType): Let it keep C type name as well. The long-term plan is to integrate stub types to the built-in type system, though we'll still keep some info outside of the built-in types (e.g. C notation of boxer/unboxer won't be used except stub generators, so no need to carry it around in the <native-type>). * lib/gauche/cgen/type.scm: Keep reference to the actual Scheme type in the stub type. Changed API of make-cgen-type. 2021-10-27 Shiro Kawai <shiro@acm.org> * lib/rfc/http.scm: Use new tls-connect interface that lets TLS module opens the socket. This allows proper use of mbedTLS. * ext/*/Makefile.in: Adjust GENERATED and CONFIG_GENERATED macros to the src/*. The 'distcclean' target removes CONFIG_GENERATED (e.g. Makefile), and 'maintainer-clean' removes GENERATED as well. Before this change, a build after distclean caused an error while building ext/gauche, for unicode-attr.scm is removed by distclean but not regenerated since src/char_attr.c exists. Also, renamed GENERATED -> PREGENERATED to avoid confusion. * lib/rfc/http (start-connection): When no TLS module is available, raise an error saying so, rather than letting rfc.tls module throw an obscure error. Cf. https://github.com/shirok/Gauche/issues/784 NB: rfc.tls is loaded by cond-expand gauche.net.tls, so we don't bother to make it autoload. 2021-10-24 Shiro Kawai <shiro@acm.org> * ext/digest/sha2.c (SHA1_End): Fix strict aliasing violation. The original code yields incorrect binary with gcc 11.2 when compiled with -O2. 2021-10-03 Shiro Kawai <shiro@acm.org> * src/gauche/priv/bignumP.h: Make bignum.h private. It was never intended for public use. Technically this is compatiblity-breaking, but if the user code directly uses bignum API, there's something wrong. 2021-09-28 Shiro Kawai <shiro@acm.org> * lib/data/random.scm (random-data-random-source): A parameter to keep the current random source. Previous random-state thingy was awkward and not compatible to srfi-194. * ext/mt-random: Add mt-random-get-seed 2021-09-07 Shiro Kawai <shiro@acm.org> * src/gauche/vm/debugger.scm, src/read.c: Experimentally implemented per-thread debug logging. #?@=expr records evaluation of expr like #?=, but the output goes to per-thread file, with timestamp. This prevents logs to be mixed up. * ext/threads/threads.scm (latch-clear!): Added. …
Sporadically,
srfi-207-test.scm
fails with the following error:It is perplexing for there seems no randomness involved around the tests. It looks like
#t
is given as the port argument ofwrite
. Couldn't find a path that can cause such a situation.The text was updated successfully, but these errors were encountered: