“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
Swift 开源深度解读:从嵌入式到云端的全栈语言
Swift 是一门快速、安全、富有表现力的多平台开源编程语言,旨在覆盖从固件到云端服务的完整软件栈。
引言:Swift 的开源意义
Swift 自 2014 年发布以来,已经从一个 iOS/macOS 专属语言演变为一个真正的通用型系统编程语言。其开源自 2015 年,如今在 GitHub 上的 SwiftLang 组织下持续活跃。本文基于 swift.org 的官方内容,深度解析 Swift 在性能、表达力、安全性、互操作性和适应性五个维度上的核心设计哲学,以及它为何被认为是值得在所有软件层级(从嵌入式固件到互联网规模服务)中选择的语言。
一、Fast:原生性能与可预测内存管理
Swift 的核心性能优势在于它直接编译为原生代码,而非依赖虚拟机或 JIT 编译。这意味着代码从启动那一刻起就以机器指令速度运行。语言提供了可预测的内存管理 —— 默认使用引用计数(ARC),但在性能关键路径上允许开发者选择更底层的控制(如指针操作或 Span 类型)。
官方示例展示了 Swift 利用 SIMD(单指令多数据)指令加速 ASCII 检查的能力:
swift
// Vectorized check that a utf8 buffer is all ASCII
func isASCII(utf8: Span<SIMD16>) -> Bool {
// combine all the code units into a single entry
utf8.indices.reduce(into: SIMD16()) {
// fold each set of code units into the result
$0 |= utf8[$1]
}
// check that every entry is in the ASCII range
.max() < 0x80
}
这段代码将 16 字节的 UTF-8 序列一次性加载到 SIMD 寄存器中,通过位或运算合并,最后检查最大值是否小于 0x80(即所有字节的最高位均为 0,表示纯 ASCII)。这展示了 Swift 在高性能场景下的表达能力 —— 既保持了类 C 的效率,又提供了高级的抽象(如 reduce 和属性访问)。
背景知识:SIMD 并非新概念,但直到 Swift 提供了内置的 SIMD16<T> 类型和 Span(连续内存视图)抽象,普通开发者才能在语言层面便利地使用向量化指令,而无需手写汇编或调用 LLVM 内建函数。相比之下,C/C++ 通常依赖编译器自动向量化或外部库。
二、Expressive:渐进式上手的表达力
Swift 的设计哲学之一是 progressive disclosure(渐进式披露):新手可以快速学会基础语法并写出可读代码,而专家可以逐步利用更高级的语言特性(如泛型协议、不透明类型、宏)写出更简洁高效的代码。
官方示例展示了一个完整的命令行工具实现,仅用 15 行左右代码:
swift
import ArgumentParser
// Complete implementation of a command line tool
@main
struct Describe: ParsableCommand {
@Argument(help: "The values to describe.")
var values: [Double] = []
mutating func run() {
values.sort()
let total = values.reduce(0, +)
print("""
Smallest: \(values.first, default: "No value")
Total: \(total)
Mean: \(total / Double(values.count))
""")
}
}
这段代码利用了 Swift 的多个关键特性:
- 属性包装器(Property Wrapper):
@Argument自动解析命令行参数。 - 基于协议的门面模式:
ParsableCommand协议定义了命令的元数据和执行入口。 - 多行字符串插值:支持可选的
default值,避免了强制解包。 - First-class 函数:
values.reduce(0, +)简洁地完成了求和。
Swift 同时支持面向对象、函数式和泛型编程范式。这一特性使得团队内不同技能组合的开发者可以协作,不用被迫统一风格。
三、Safe:编译期内存与数据竞争安全
安全是 Swift 相对于 C/C++ 最显著的改进。语言的核心安全保证来自编译期强制检查,在用户运行任何代码之前就能捕获潜在错误。
1. 内存安全
Swift 的编译器会验证所有变量访问在其生命周期有效期内进行。这意味着:
- 不存在悬空指针(例如 use-after-free)
- 缓冲区溢出在编译期被禁止(除非通过
unsafeAPI 显式逃逸) - 所有的初始化必须明确执行
2. 数据竞争安全
Swift 6 及其后续版本强化了并发模型:
- 默认的发送性检查(Sendable)确保跨线程传递的数据是安全的
- actor 模型隔离了可变状态的并发访问
- 编译器能在编译期拒绝有数据竞争风险的代码
官方示例展示了如何利用 Swift 的类型安全直接调用 C 函数和底层数学库,而无需转换类型或手动管理内存:
swift
let transform = Affine2DTransformBuilder()
.translate([10.0, 20.0].span)
.rotate(30.0)
.build()
let v = [11.0, 22.0, 1.0]
// Call C functions safely with Swift types
let u = mat_vec_mul(transform, rowCount, colCount, v.span, allocator)
let uMagnitude = vec_mag(u.span)
深层理解:Swift 的安全保证并非完全的运行时沙箱,而是基于LLVM编译器的严格静态分析。例如,内存排除性(exclusive access)规则保证了同一时刻不超过一个写引用或一个读引用+最多一个写引用作用于同一内存位置,这能有效阻止竞态条件。这种设计使得 Swift 在不引入垃圾回收(GC)开销的情况下获得了接近 Rust 的安全保证。
四、Interoperable:逐步采纳的互操作性
Swift 的一大杀手锏是无需 FFI(外部函数接口)便能原生理解 C 和 C++ 类型。这一特性的意义在于:
- 对 C:所有标准 C 头文件中的类型、函数和宏可以被 Swift 直接导入,且遵循 Swift 内存安全规则。
- 对 C++:Swift 6 实现了对 C++ 的双向往来互操作,能直接使用
std::string、std::vector等标准库类型,以及调用类型的方法。
官方示例:
swift
import CxxStdlib
// Use types from C++, like std::string, directly
let beverages: [std.string] = ["apple juice", "grape juice", "green tea"]
let juices = beverages.filter { cppstring in
// and call methods directly on C++ types
cppstring.find(.init("juice")) != std.string.npos
}
在这个示例中:
std.string是 C++ 的std::string,但被当作 Swift 原生类型使用。beverages是 Swift 的数组类型,持有 C++ 字符串对象。.find(...)方法直接在 C++ 对象上调用,无需桥接层。
现实意义:这意味着许多传统上被认为是 C/C++ 垄断的领域(如游戏引擎、操作系统内核、嵌入式系统)可以逐步引入 Swift —— 你不需要重写现有代码,只需在一个 .cpp 文件旁边新建 .swift 文件即可开始混合编程。苹果公司明确表示,这项互操作性设计考虑了代码库规模庞大的现有工程(如 Fuchsia、LLVM 和部分 Windows 代码库)。
五、Adaptable:从单芯片微控制器到云服务
Swift 的适应能力体现在运行时环境和硬件限制的两个极端:
嵌入式场景
Firmware 开发者经常需要直接访问硬件寄存器。Swift 提供了 MMIO(Memory-Mapped I/O)支持,允许精确控制和零开销:
swift
// Configure UART by direct register manipulation using Swift MMIO.
// Enables RX and TX, and sets baud rate to 115,200.
// Compiles down to an optimal assembly sequence with no overhead.
usart1.brr.modify { rw in
rw.raw.brr_field = 16_000_000 / 115_200
}
usart1.cr1.modify { rw in
rw.ue = .Enabled
rw.re = .Enabled
rw.te = .Enabled
}
注意 .modify 语法 —— 这是一种类型安全的修改模式,禁止了读-改-写过程中可能出现的未定义行为。整个操作会在编译期优化为几条汇编指令(LOAD/MODIFY/STORE)。
服务器与云场景
在另一个极端,Swift 支持严格的并发模型和 actor 安全,能够处理高吞吐网络请求。例如 SwiftNIO 驱动的服务每秒钟可以处理数十万事件。Swift 的编译器支持交叉编译,可以从 Mac 上直接嵌出 Linux 可执行文件,云厂商(如 AWS、Vercel)也已原生支持 Swift 的部署环境。
内核层面
Swift 已于 2022 年——在 open source 的嵌入式操作系统 Fuchsia 的内核部分得到了使用,这证明了其可以用于最低级的内存操作和进程调度逻辑。
开源生态:参与贡献
Swift 的整个工具链 —— 编译器、标准库、核心库、包管理器、SourceKit-LSP 语言服务器——全部开源托管在 SwiftLang GitHub 组织 下。开发者可以通过四个核心渠道参与:
- Swift 编译器仓库 —— 涉及到语法、优化器和 IRGeneration。
- 标准库(swift-corelibs-foundation) —— 提供与 Apple 平台一致的基础 API。
- Swift 官方论坛(forums.swift.org) —— 重要的设计提案(Swift Evolution)讨论都发生在这里。
- SwiftNIO / Swift Collections / Swift Argument Parser 等项目 —— 属于独立的受支持开源库。
Swift 提供了清晰的贡献文档和代码规范,在公开邮件列表进行重大决策。
深度总结:Swift 的定位与前景
Swift 的语言设计并非走纯粹路线 —— 它不像 Rust 那样强制所有权规则,不像 Kotlin 那样偏重 JVM,也不像 Go 那样刻意简约。它的核心差异化路径是:
- 在手写所有细节(低级语言)和使用 GC 导致延迟不稳定(高级语言)之间找到一个安全又低延迟的平衡点。
- 提供比 C/C++ 更高的内存安全但保留对其生态的完整兼容。
现实中越来越多团队使用 Swift 开发后端服务(例如 CircleCI、无服务器计算框架 Hummingbird ),与此同时在 嵌入式 Rust/裸机 领域也有替代选择,但 Swift 的互操作性优势成为其独特的竞争力——它可以在同一代码库内与 C/C++ 无缝共存,使得大型重写项目得以平滑演进。
Swift 适合那些追求安全、性能、可读性三者兼得,并且不愿被锁在单一语言生态内的工程师。它的未来并非取代谁,而是成为一个真正能够端起整个软件栈(有时一个栈,有时多个分开的设备)的“普通语言”——像 JavaScript 在网络前端一样,Swift 在系统开发和移动端或许也会成为这样的默认选择。
原文链接: https://swift.org/