Crunch 是一个由 Felix Winkelmann 创建的新项目,旨在为静态类型的 Scheme 子集提供一个高效的编译器。该编译器基于 R7RS(小)标准,运行在 CHICKEN Scheme 系统之上,生成可移植的 C99 代码,可以在任何拥有良好 C 编译器的平台上编译和执行。
为什么需要另一个 Scheme 实现?
尽管已经存在大量的 Scheme 解释器和编译器,但大多数 Scheme 系统需要复杂的运行时系统,依赖众多库,或者性能较慢。Crunch 的目标是提供一个小型、便携的编译器,生成接近自然的 C 代码,具有最小的依赖和运行时系统,专注于生成高效代码,即使牺牲了一些 Scheme 的高级特性。
主要特点
- 高效编译:Crunch 生成的代码性能高,适用于编写游戏、虚拟机、性能敏感的库等。
- 嵌入式系统支持:Crunch 适合用于编写裸机代码、设备驱动程序和操作系统内核。
- 类型推断:使用类型推断,避免了大部分类型注解,使代码保持简洁。
- 模块化:支持 CHICKEN 的模块系统和宏,可以无缝集成到现有的 CHICKEN 项目中。
- 优化:提供了多种优化技术,如单态化、内联、循环优化等,确保生成的 C 代码紧凑且高效。
使用方式
- 嵌入:在 CHICKEN Scheme 程序中嵌入静态类型代码片段。
- 独立程序:将 Scheme 代码编译为独立的 C 程序。
- 包装编译代码:生成 Scheme 包装器,以便在 CHICKEN 中使用编译后的 C 代码。
- 库模式:作为库函数使用,将 Scheme 代码动态转换为原生代码。
限制
Crunch 有一些显著的限制,例如不支持多值返回、一级续体、尾递归优化等。但这些限制并不妨碍大量典型的 Scheme 代码的编译。
未来计划
Crunch 仍处于 alpha 阶段,有许多改进空间。未来的计划包括支持多值返回、更好的可选参数支持、更多的 POSIX 系统调用和库函数支持等。
评论:
- 网友 davexunit:很高兴看到更多探索静态编译 Scheme 的项目。Crunch 与 PreScheme 的最大区别之一是手动内存管理与引用计数的不同。
- 网友 nudpiedo:如果我理解正确,Crunch 可以让 Scheme 在 ESP32 等微控制器上运行,对吧?它的体积小巧,也非常适合编译为 TypeScript/Deno/WASM,同时保留 s-expr 的强大功能和运行时可能性。
小编评语:
Crunch 项目的出现填补了高性能、轻量级 Scheme 编译器的空白,为嵌入式系统和性能敏感的应用提供了新的选择。尽管目前还有一些限制,但其强大的优化能力和模块化设计使其具有很大的潜力。期待未来的改进和发展,Crunch 有望成为 Scheme 生态系统中的一个重要工具。
Valhalla – Java 的史诗重构
https://inside.java/2024/12/16/devoxxbelgium-valhalla/
图片
Java 语言架构师 Brian Goetz 在 Devoxx 2024 大会上详细介绍了 Project Valhalla 的最新进展。这一项目旨在弥合 Java 类型系统中类和基本类型的裂痕,通过引入值类(value classes)实现这一目标。值类的特点是“编码像类一样,工作像 int 一样”,并且提供扁平且密集的内存布局。
Project Valhalla 已经进行了 10 年,现在进入了最后阶段
除了值类,该项目还引入了无空限制类型(null-restricted types)、增强的确定赋值分析(beefed up definite assignment analysis)和严格的初始化(strict initialization)。这些改进将使 Java 的类型系统更加一致和高效。
为什么值类如此重要?
值类的引入将极大地简化 Java 开发者的代码编写和维护工作。传统的对象封装方式会导致大量的内存开销和性能损失,而值类则可以在保持面向对象编程优势的同时,提供类似基本类型的性能。这对于高性能计算和大规模应用尤为重要。
未来展望
随着 Project Valhalla 的推进,Java 社区可以期待一个更加现代化和高效的编程环境。这些改进不仅将提升现有应用的性能,还将为未来的创新奠定坚实的基础。
评论:
- 网友 thunderbong:项目 Valhalla 的进展令人兴奋,特别是值类的引入,这将彻底改变 Java 的类型系统,期待早日见到正式发布!
- 网友 coder_john:值类的引入确实是一个重大突破,但我也希望 Java 能够继续保持向后兼容性,毕竟很多企业还在使用较老的版本。
小编评语:
Project Valhalla 的进展无疑为 Java 生态系统带来了新的活力。值类的引入将使 Java 在性能和内存管理方面更加出色,值得所有 Java 开发者关注。
Xiaomi Home Integration for Home Assistant
https://github.com/XiaoMi/ha_xiaomi_home
图片
小米官方发布了 Xiaomi Home Integration,这是一个支持 Home Assistant 的集成组件,允许用户在 Home Assistant 中使用小米 IoT 智能设备。此集成组件要求 Home Assistant 版本为 Core ≥ 2024.11.0,操作系统版本 ≥ 13.0。
安装方法
- 终端安装:
打开终端,进入 Home Assistant 配置目录:cd config
克隆仓库:git clone https://github.com/XiaoMi/ha_xiaomi_home.git
进入目录:cd ha_xiaomi_home
安装:./install.sh /config
更新到特定版本(例如 v1.0.0):git checkout v1.0.0,然后重新运行安装脚本:./install.sh /config
- HACS 安装:
进入 HACS 设置,选择“溢出菜单”中的“自定义仓库”。
输入仓库地址:https://github.com/XiaoMi/ha_xiaomi_home.git,类别选择“Integration”,然后点击“添加”。
支持设备
小米 Home Integration 支持大多数小米智能家居设备,但不支持蓝牙设备、红外设备和虚拟设备。它支持多账户登录,并允许不同账户的设备添加到同一区域。
控制方式
- 云控制:通过小米云服务实现。
- 本地控制:需要小米中央网关(固件版本 3.4.0_0000 以上)或内置中央网关的小米设备(软件版本 0.8.0 以上)。如果使用的是其他地区的设备,建议启用小米 LAN 控制功能,但需要注意该功能可能引起异常。
评论:
- 网友 WaitWaitWha:我认为这不是真正的 Home Assistant 集成,因为它仍然依赖小米云服务。真正的集成应该是所有活动都在 Home Assistant 内部完成。
- 网友 Someone1234:小米增加对 Home Assistant 的支持,前提是可靠的话,确实提升了他们的产品竞争力。
- 网友 gpi:希望未来能有更多本地支持,减少对小米云的依赖。
- 网友 nevi-me:终于等到了小米的 Home Assistant 集成,我家里有几盏小米灯泡,一直没能集成到 Home Assistant,现在终于可以尝试了。
- 网友 seanvelasco:低档的中国手机品牌,如小米和华为,会在系统应用中显示广告。希望智能家居设备不会走上这条路。
- 网友 pammf:我只会在需要混合不同厂商设备或厂商应用有局限时使用 Home Assistant。否则,我会直接使用厂商提供的应用。
Multilspy: 构建适用于所有语言服务器的通用 LSP 客户端
https://github.com/microsoft/multilspy
Multilspy 是一个由微软开发的库,旨在简化创建语言服务器客户端的过程,以便查询和获取各种静态分析结果。该项目是作为 NeurIPS 2023 论文 "Monitor-Guided Decoding of Code LMs with Static Analysis of Repository Context" 的一部分开发的。论文介绍了 Monitor-Guided Decoding (MGD),这是一种使用静态分析指导代码生成的方法,确保生成的代码符合各种正确性属性,如符号名称的准确性、方法调用的顺序等。
主要特点
- 跨平台:支持多种编程语言,包括 Java、Rust、C# 和 Python。
- 简化使用:自动处理平台特定的服务器二进制文件下载、设置/拆除语言服务器、JSON-RPC 通信、维护和传递手调优的服务器和语言特定配置参数。
- 简单 API:用户可以通过简单的 API 执行各种静态分析请求,如查找函数定义、引用、类型完成、悬停信息等。
使用示例
安装 multilspy 后,可以通过以下代码示例来使用它:
from multilspy import SyncLanguageServer
from multilspy.multilspy_config import MultilspyConfig
from multilspy.multilspy_logger import MultilspyLogger
config = MultilspyConfig.from_dict({"code_language": "java"})
logger = MultilspyLogger()
lsp = SyncLanguageServer.create(config, logger, "/abs/path/to/project/root/")
with lsp.start_server():
result = lsp.request_definition("relative/path/to/code_file.java", 163, 4)
result2 = lsp.request_completions(...)
result3 = lsp.request_references(...)
result4 = lsp.request_document_symbols(...)
result5 = lsp.request_hover(...)
评论:
- 网友 lukax:有趣的是,他们使用了 Jedi Language Server 作为 Python 的语言服务器,而不是微软自己的 Pylance(Pylance 仅限于 Microsoft 产品的官方构建中使用)。
- 网友 LakshyAAAgrawal:我是 Monitor-Guided Decoding 的作者,这是一个确保 LLM 生成代码时能够获得与人类编码者相同的反馈(如自动完成、函数签名、函数参数数量、代码库中可用的各种 API 名称等)的技术。然而,构建这样的技术需要一种语言无关的方式来接口各种语言特定的静态分析和索引功能。Language Server Protocol (LSP) 正好适合这个需求!
- 网友 antmarti:作为语言服务器的主要维护者,我们依赖社区贡献来支持其他编辑器(如 NeoVim、Atom、Rider 等)。这些信息分散且容易过时,手动步骤也很多。希望 multilspy 能够提供一个集中管理不同语言服务器配置的仓库,这对社区来说将是一个巨大的帮助。
- 网友 PLenz:作为一个语言服务器实现者,我非常愿意为 multilspy 添加我的配置,这将有助于提高整个生态系统的互操作性和稳定性。
Veo 2: 先进的视频生成模型
https://deepmind.google/technologies/veo/veo-2/
图片
Veo 2 是 DeepMind 推出的最新视频生成模型,能够在保持高分辨率(最高可达 4K)的同时生成逼真的视频内容。该模型不仅能够忠实执行简单的指令,还能模拟复杂的物理现象和多种视觉风格,提供广泛的相机控制选项,从而创造出多样化的拍摄角度和运动效果。
主要特点
- 增强的现实感和保真度:Veo 2 在细节、真实感和减少伪影方面显著优于其他 AI 视频生成模型。
- 高级运动能力:通过理解物理原理和精确执行详细指令,Veo 2 能够高度准确地表示运动。
- 更多的相机控制选项:能够精确解释指令,创建各种镜头风格、角度和运动组合。
- 卓越的表现:在人类评估中,Veo 2 在整体偏好和准确跟随指令方面表现出色。
示例视频
- 低角度跟踪镜头:一辆橄榄绿的肌肉车在城市灯光下漂移,轮胎烟雾和光晕效果营造出强烈的视觉冲击力。
- 冰上芭蕾:一位穿着白色长裙的滑冰者在云层中优雅地滑行,背景是梦幻般的色彩和柔和的云朵。
- 海滩上的狗:一只可爱的达克斯猎犬戴着游泳护目镜跳入清澈的泳池,水下的动态画面充满活力。
评论:
- 网友 simonw:我尝试了预览功能,生成的视频非常有趣。特别是“一只鹈鹕骑自行车沿海岸小路行驶”的场景,四个版本中有两个完美实现了这一场景。
- 网友 sigmar:Veo 2 在用户偏好测试中以 2:1 的比例击败了 Sora Turbo,虽然两者在自然运动和物理模拟方面仍有相似的局限性,但 Veo 2 略胜一筹。
- 网友 lukol:上次 Google 发布 Gemini 时,OpenAI 很快推出了 Sora 预览版。这次 Veo 2 看起来比 Sora 更进一步,感觉像是一个反击。
- 网友 fernly:尽管这些视频看起来很酷,但目前还无法用于制作连贯的电影或广告,因为保持复杂场景中的连续性仍然是一个挑战。
小编评语:
Veo 2 的推出标志着视频生成技术的重大进步。虽然在处理复杂场景时仍有一些局限,但其在细节和真实感方面的表现令人印象深刻。随着技术的不断改进,未来生成的视频可能会更加逼真,甚至难以与真实视频区分。这对于视频创作者来说无疑是一个巨大的福音,但也带来了伦理和安全方面的挑战。希望科技公司在推进技术的同时,能够充分考虑这些潜在的风险。
In Search of a Faster SQLite
https://avi.im/blag/2024/faster-sqlite/
研究人员在《Serverless Runtime / Database Co-Design With Asynchronous I/O》论文中探讨了如何通过异步 I/O 和存储分离来显著提升 SQLite 的性能,特别是在多租户无服务器环境中的表现。SQLite 本身已经非常快速,但在大规模应用中仍存在一些瓶颈,尤其是在并发性和多租户场景下。
主要发现
- 异步 I/O 的优势:通过使用 io_uring,应用程序可以在 I/O 请求提交后继续执行其他任务,从而提高了并发性和资源利用率。
- 存储分离:将查询引擎和存储引擎解耦,进一步减少了延迟。
- Limbo 项目:研究人员使用 Rust 重写了 SQLite,称为 Limbo,实现了高达 100 倍的尾部延迟减少。
实验结果
实验模拟了一个多租户无服务器运行时环境,每个租户拥有自己的嵌入式数据库。结果显示,Limbo 在 p999 尾部延迟上表现尤为出色,比传统 SQLite 提高了 100 倍。然而,在 p90 和 p99 上,性能提升并不明显。
评论:
- 网友 efitz:这篇文章讨论了无服务器计算(如 AWS Lambda)中中央数据库的局限性。我在 6-7 年前遇到过类似的问题,通过将数据加载到 SQLite 数据库并存储在 S3 中,成功解决了这一问题。这种方法不仅速度快,而且避免了重复工作。
- 网友 scheme271:SQLite 的一大优点是其广泛的测试套件。问题是,Limbo 是否也有类似的测试套件?特别是如果它使用了像 io_uring 这样快速但难以编写且容易出错的功能。
- 网友 samwillis:这是一篇很棒的文章。之前有人尝试为 PostgreSQL 带来异步 I/O,但后来停滞了。最近的提案是允许交换存储管理器,而无需分叉代码库。这使得许多 PostgreSQL 组织都能受益。
小编评语:
SQLite 作为轻量级数据库的代表,已经在众多应用场景中证明了自己的价值。然而,随着无服务器计算的兴起,传统的同步 I/O 成为了性能瓶颈。Limbo 项目通过引入异步 I/O 和存储分离,为这一问题提供了一个全新的解决方案。虽然在某些情况下性能提升有限,但在极端负载下的表现令人印象深刻。未来,我们可以期待更多类似的优化技术,进一步推动数据库技术的发展。
新技术大幅降低大语言模型内存成本
https://venturebeat.com/ai/new-llm-optimization-technique-slashes-memory-costs-up-to-75/
图片
日本初创公司 Sakana AI 开发了一种名为“universal transformer memory”的新技术,能够显著降低大语言模型(LLMs)的内存使用成本。这项技术利用神经网络优化 LLMs,使其能够保留重要信息并丢弃冗余细节,从而在保持性能的同时减少内存占用。
技术原理
- Transformer 模型的响应依赖于其“context window”,即模型接收的用户输入内容。优化 context window 的内容可以显著提升模型性能,这一领域被称为“prompt engineering”。然而,较长的 prompt 会导致更高的计算成本和较慢的性能。
- Sakana AI 的 NAMMs(neural attention memory models) 通过决定是否“记住”或“忘记”每个 token 来优化 prompt,从而减少不必要的 token 数量,提高速度并降低成本。
实验结果
研究人员在 Meta Llama 3-8B 模型上测试了 NAMMs,结果显示,使用 NAMMs 后,模型在自然语言和编码任务上的性能有所提升,同时节省了高达 75% 的缓存内存。此外,NAMMs 还能在不同模态的任务中保持优势,例如计算机视觉和强化学习。
任务依赖行为
- NAMMs 能够根据任务自动调整行为。例如,在编码任务中,模型会丢弃不影响代码执行的注释和空白字符;而在自然语言任务中,则会丢弃不影响序列意义的语法冗余部分。
评论:
- 网友 vlovich123:这项技术与微软的 HeadKV 论文相比如何?后者声称可以减少 98% 的内存占用,同时保持 97% 的性能。
- 网友 odyssey7:经过几年的算法和硬件优化,未来是否会出现不再需要大量核电站来满足 AI 数据中心电力需求的情况?
- 网友 solarkraft:令人难以置信的是,现在的语言模型可以在我的中高端笔记本电脑上流畅运行,这在几年前是不可想象的。
- 网友 iandanforth:这表明大型模型已经知道哪些信息是有用的,哪些是无用的,非常有趣。
- 网友 lawlessone:这就像是 prompt 的垃圾回收器,非常实用。