代码阅读工具
阅读陌生代码库是工程师日常工作的重要组成部分。面对动辄数十万行的源码,仅靠编辑器内置的跳转和搜索往往难以快速建立全局认知。围绕「理解代码」这一需求,开源社区沉淀出两类工具:一类以 Doxygen 为代表,侧重从源码与注释中抽取并生成文档;另一类以 Sourcetrail 为代表,侧重提供交互式的源码浏览器,帮助人在图形界面中追踪符号与调用关系。本文对这两款工具做一次梳理。
阅读陌生代码库是工程师日常工作的重要组成部分。面对动辄数十万行的源码,仅靠编辑器内置的跳转和搜索往往难以快速建立全局认知。围绕「理解代码」这一需求,开源社区沉淀出两类工具:一类以 Doxygen 为代表,侧重从源码与注释中抽取并生成文档;另一类以 Sourcetrail 为代表,侧重提供交互式的源码浏览器,帮助人在图形界面中追踪符号与调用关系。本文对这两款工具做一次梳理。
这篇文章 JavaScript Promise,async/await 是对 async/await 最详细的介绍,而且 文章开源:
回调地狱:
loadScript('1.js', function(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('2.js', function(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('3.js', function(error, script) {
if (error) {
handleError(error);
} else {
// ...加载完所有脚本后继续 (*)
}
});
}
});
}
});嵌套调用的"金字塔"随着每个异步行为会向右增长。很快它就失控了。
Python 在 3.5 版本中引入了协程相关的语法糖 async 和 await,在 Python 3.7 版本中又提供了 asyncio.run() 来运行一个协程。因此建议大家学习协程时直接使用 Python 3.7 及以上版本。
Python 官方提供了各版本的 asyncio 文档,详见协程与任务官方文档。
Boost.Asio 是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的 C++ 库。
Asio,即「异步 IO」(Asynchronous Input/Output),本是一个独立的 C++ 网络程序库,似乎并不为人所知,后来因为被 Boost 相中,才声名鹊起。
Promise/Future 是一种经典的异步抽象,正因为它提供了一套「标准化」的概念,因而衍生出许多可能性。这就如同工业史上的集装箱、软件界的 Docker——凭借「标准化」这一关键属性,不同组件可以简单地自由组合,从而大幅提升整体效率。