From c02bd9a54d1ac8f6cffe3fe96efb5d94eb3774c1 Mon Sep 17 00:00:00 2001 From: jinser Date: Fri, 5 Sep 2025 08:10:08 +0000 Subject: [PATCH] =?UTF-8?q?main/206=5F1.md:os=E6=A8=A1=E5=9D=97=E6=96=B0?= =?UTF-8?q?=E5=A2=9Esleep=E6=96=B9=E6=B3=95=EF=BC=8C=E5=8D=95=E4=BD=8D?= =?UTF-8?q?=E7=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- devel/200_1.md | 18 +++++++++++++++++- goldfish/liii/os.scm | 5 +++++ pkgs/goldfish.nix | 2 +- src/goldfish.hpp | 21 ++++++++++++++++++++- xmake.lua | 2 +- 5 files changed, 44 insertions(+), 4 deletions(-) diff --git a/devel/200_1.md b/devel/200_1.md index d8641f95..1446a73d 100644 --- a/devel/200_1.md +++ b/devel/200_1.md @@ -1,5 +1,7 @@ # 200_1 +## 2025/07/21 Goldfish Scheme v17.11.18 + ## 2025/08/05 Goldfish Scheme v17.11.19 - **REPL 相关功能增强** @@ -25,4 +27,18 @@ - 删除旧的基于 GNU Readline 的本地 REPL,统一交互入口。 - 优化 REPL 页面 UI 和交互体验。 -## 2025/07/21 Goldfish Scheme v17.11.18 +## 2025/07/21 Goldfish Scheme v17.11.20 + +- **标准库新功能和增强** + - 现在可以使用 *srfi-158* 标准中的生成器(Generators)和累加器(Accumulators) 来处理惰性序列和流式数据。 + - `(liii datetime)` 库变得更加实用,新增了获取星期几(weekday)、计算两个日期之间天数(days-between)以及日期类型转换(to-date)等功能。 + +- **开发者工具改进** + - 初步实现了 lint 工具,现在可以自动检查代码中的括号是否匹配,有助于在运行前发现简单的语法错误。 + - 测试失败时,断言(check)现在会显示具体的行号和调用堆栈,使得定位和修复测试失败的原因变得更加容易。 + - REPL 输出优化:删除了执行结果前的冗余提示消息,便于插件实现。 + - 启动脚本优化:优化了 bin/code 开发环境启动脚本,更好地支持 Windows 系统,并改进了配置管理。 + +- 更少的神秘 Bug:函数的行为更加明确和可预测。 +- 更好的文档:开发者更容易查阅和学习如何使用这些函数。 + diff --git a/goldfish/liii/os.scm b/goldfish/liii/os.scm index 00810460..a063c93a 100644 --- a/goldfish/liii/os.scm +++ b/goldfish/liii/os.scm @@ -132,6 +132,11 @@ (define (getpid) (g_getpid)) + (define (sleep seconds) + (if (not (number? seconds)) ; 检查是否是数字,单位秒 + (error 'type-error "(sleep seconds): seconds must be a number") + (g_sleep seconds))) + ) ; end of begin ) ; end of define-library diff --git a/pkgs/goldfish.nix b/pkgs/goldfish.nix index aa08bc9b..070704d5 100644 --- a/pkgs/goldfish.nix +++ b/pkgs/goldfish.nix @@ -14,7 +14,7 @@ stdenv.mkDerivation { pname = "goldfish"; - version = "17.11.19"; + version = "17.11.20"; src = ./..; diff --git a/src/goldfish.hpp b/src/goldfish.hpp index 366d8b6d..ed444942 100644 --- a/src/goldfish.hpp +++ b/src/goldfish.hpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -55,7 +56,7 @@ #include #endif -#define GOLDFISH_VERSION "17.11.19" +#define GOLDFISH_VERSION "17.11.20" #define GOLDFISH_PATH_MAXN TB_PATH_MAXN @@ -522,6 +523,23 @@ glue_getpid (s7_scheme* sc) { glue_define (sc, name, desc, f_getpid, 0, 0); } +static s7_pointer +f_sleep(s7_scheme* sc, s7_pointer args) { + s7_double seconds = s7_real(s7_car(args)); + + // 使用 std::this_thread::sleep_for 实现跨平台睡眠 + std::this_thread::sleep_for(std::chrono::duration(seconds)); + + return s7_nil(sc); +} + +inline void +glue_sleep(s7_scheme* sc) { + const char* name = "g_sleep"; + const char* desc = "(g_sleep seconds) => nil, sleep for the specified number of seconds"; + glue_define(sc, name, desc, f_sleep, 1, 0); +} + inline void glue_liii_os (s7_scheme* sc) { glue_os_arch (sc); @@ -540,6 +558,7 @@ glue_liii_os (s7_scheme* sc) { glue_listdir (sc); glue_getlogin (sc); glue_getpid (sc); + glue_sleep(sc); } static s7_pointer diff --git a/xmake.lua b/xmake.lua index dd6a3e9a..c74e1832 100644 --- a/xmake.lua +++ b/xmake.lua @@ -1,4 +1,4 @@ -set_version ("17.11.19") +set_version ("17.11.20") -- mode set_allowedmodes("releasedbg", "release", "debug", "profile") -- Gitee