## ClojureFnl:将Clojure带到Fennel 这个项目始于2019年的`fennel-cljlib`,旨在Fennel Lisp环境中复现Clojure的特性。目标是通过实现核心Clojure函数、不可变性、测试工具,甚至`clojure.core.async`来增强Fennel类似Clojure的感觉。虽然是一个充满激情的项目,但由于性能限制和Fennel不同的函数式编程关联,它在很大程度上仍然是实验性的。 最近,开发转向了`ClojureFnl`,一个基于`fennel-cljlib`构建的Clojure到Fennel编译器。它目前可以编译大多数`.cljc`文件,但运行编译后的代码仍在进行中。一个主要障碍是不可变数据结构的初始实现,由于过度复制,证明速度非常慢。 为了解决这个问题,作者在Fennel中开发了新的、高性能的持久化数据结构:基于HAMT的哈希映射和集合、持久化向量以及红黑树。基准测试表明,这些比原生Lua表慢,但可用。该项目还包括持久化列表和队列的实现。有了这些基础元素,重点现在正在转向改进`ClojureFnl`编译器本身。
## macOS 隐私设置的假象:一个“魔法”演示
此演示揭示了macOS“隐私与安全性”设置中关于应用程序访问受保护文件夹(如“文档”)时存在误导性行为。作者创建了一个名为“Insent”的简单应用程序,以说明即使在“系统设置”中撤销访问权限后,应用程序如何能够获得并*保留*对文件夹的访问权限。
Insent有两个关键功能:“有许可打开”(需要访问文件夹的权限)和“从文件夹打开”(允许通过打开面板访问,暗示用户意图)。一旦通过“有许可打开”授予了初始许可,Insent 就会获得访问权限。即使在“隐私与安全性”设置中禁用了访问权限,访问权限仍然存在——似乎绕过了设置中显示的限制。
这个问题源于macOS处理沙盒的方式。通过用户意图授予的访问权限(例如通过打开面板)会绕过沙盒,而“隐私与安全性”设置并未反映此更改。完全撤销访问权限的唯一方法是使用终端命令 (`tccutil reset`),然后重新启动。
这凸显了一个潜在的安全问题:应用程序可能比“系统设置”中指示的拥有更广泛的访问权限,并且可以通过仔细的时间安排和用户交互来利用。
你可以在这里找到Insent:[insent11](https://insent11)