Arachne:用于系统应用的表达性切面语言
1. 引言
在现实世界中,应用程序通常由多个不同的关注点组成。系统级C应用也不例外,安全、网络、缓存和预取等问题往往分散在整个程序代码中。在服务器环境中,这些问题需要在运行时进行隔离和处理,因为服务器的停机时间必须尽可能短。
例如,安全漏洞(如双重释放错误和缓冲区溢出)可能在服务器部署后才被发现;硬件资源可能不足,需要使用更合适的网络协议或在Web缓存中引入预取策略。以Squid Web缓存为例,这些问题分散在大量代码中,而且为了避免性能损失,不能停止该应用程序。
面向方面编程(AOP)理论上可以对这些横切关注点进行模块化处理。然而,这些关注点具有三个特点,使得基本的切面技术难以应用:
- 这些关注点在执行点之间存在复杂的关系,例如网络协议通常用执行点序列来表达,而非单个执行点。
- 需要在应用程序运行时“即时”处理这些关注点,因此需要动态切面编织器。
- 由于性能考虑,这些关注点在设计时缺乏模块化,使用面向方面(AO)技术应尽量减少对效率的影响。
目前,现有的C语言切面系统都不适合对这些关注点进行模块化处理。本文介绍了Arachne系统,它的核心是一种新的表达性切面语言,提供了序列构造,可对函数调用事件和全局变量的本地别名访问进行量化。
2. 动机
传统C应用涉及多个横切关注点,在切面语言的表达能力和编织器的约束方面都具有挑战性。下面讨论C应用中的四个关注点:
2.1 双重释放错误
Unix系统引入了 brk 系统调用,允许程序动态调整堆的大小。后来,标准C库提供了
超级会员免费看
订阅专栏 解锁全文
930

被折叠的 条评论
为什么被折叠?



