所有权、借用与变量的生命周期

在 Rust 中,所有权(ownership)、借用(borrowing)和生命周期(lifetime)是其内存安全和并发模型的核心概念。它们一起确保了在编译时捕获大部分内存错误,如空指针或悬挂指针。

我们可以通过代码示例和内存模型图来说明这些概念。

Read More

Rust错误处理

Rust的错误处理机制和其他语言有很大的不同。

在C++、C#、Java、Javascript、Python等语言中,通常使用throw抛出异常或者返回成功的值。外部调用的地方使用try/catch进行捕获,除了C++没有finally关键字外,C#、Python、Java、Javascript等语言都有基本一致的异常处理逻辑。像Java有三类异常:不可恢复的Error(如OutOfMemoryError、StackOverflowError)、受检异常(如IOException)、运行时异常(如NullPointerException)。特别是运行时异常由于隐式传递,运行在线上服务器经常出现令人头疼的问题。

Read More

Rust入门

近十年来,golang、Swift、Kotlin、Typescript等新兴编程语言异军突起。在系统编程领域也出现了Rust和Zig等语言。

栈上分配的内存在函数出栈后就直接被回收了,堆上的内存需要手动回收,而且由于堆上分配和释放内存需要与操作系统交互。所以一般来说,栈上分配回收速度会比较快,堆上分配回收速度会稍慢一些。但是栈上分配内存要求结构体对象等类型的大小是编译期就知道的,所以无法分配动态大小的内存;堆上分配就没有这个约束。

Read More

标记语言的历史

说起编程语言,大家都知道,C、C++、Java、Python、C#,对编程语言了解的深的,可能还能说出1957年就被发明的Fortran,Fortran语言仍是美国学术界使用的编程语言,至今仍在编程语言排行榜霸榜前十。

但说起标记语言,大家可能就知道一个HTML,在互联网上文章写得多的可能还知道Markdown,我这个网站的文章都是用Markdown写的。由于Markdown不支持内嵌外部代码,这几天找到了Spring也在用的Asciidoc准备作为开源库的文档标记语言。正好了解到标记语言的发展历史,就写篇文章聊聊。

Read More

【译】基于MarkupLM的web数据抽取

摘要

网站在当今数字时代已成为许多组织获取信息的关键来源。然而,从多个网站的网页中提取和组织半结构化数据存在挑战,尤其是在希望保持广泛适用性的同时实现高度自动化时。在追求自动化的过程中,自然而然的发展是将网页数据提取的方法从仅能处理单个网站扩展到通常在同一领域内处理多个网站。尽管这些网站共享相同的域,但数据的结构可能差异巨大。一个关键问题是在保持足够准确性的同时,这样的系统能够通用地涵盖大量网站。该论文检查了在多个瑞典保险公司网站上进行的自动化网络数据提取的效率。先前的工作表明,使用包含多个领域网页的已知英语数据集可以取得良好的结果。选择了最先进的模型MarkupLM,并使用监督学习使用两个预训练模型(一个瑞典模型和一个英语模型)在标记的汽车保险客户网络数据的训练集上进行零样本学习。结果显示,这样的模型可以通过利用预训练模型,在源语言为瑞典的情况下,以相对较小的数据集在领域范围内取得良好的准确性。

Read More