2018年6月19日
摘要: 闲话 昨天培神在群里抱怨说自定义allocator遇到了奇怪的问题,然后选择了pmr,我表示很理解。allocator这个东西,出生时就伴随着设计错误和无用的抽象,C++03-14糊了这么久,甚至还加了新feature来兼容旧翔和糊新翔,结果C++17最终还是另立门派搞了个pmr。 简单说,虽然allocator的concept说了很多东西,也有一些周边的concept比如allocator ... 阅读全文
posted @ 2018-06-19 11:31 PointerSMQ 阅读(1711) 评论(1) 推荐(2) 编辑
  2018年4月18日
摘要: clang和MSVC的最新实现已经提供了试验性的协程实现,想要试用的话,clang需要开启-fcoroutins-ts -stdlib=libc++两个开关,而MSVC需要开启/await开关。 我们从一个简单的generator来看编译器做了什么: #include #include namespace stdexp = std::experimental;stdexp::generator... 阅读全文
posted @ 2018-04-18 21:17 PointerSMQ 阅读(753) 评论(0) 推荐(0) 编辑
  2018年4月12日
摘要: 上一篇说了coroutine的本质是什么,就是resumable function,那么一个函数有了suspend和resume功能之后,会打开什么样的新世界大门呢?随便举几个例子。 函数每次被唤醒,就丢出一个值,然后暂停——这是generator 函数启动一个IO操作,注册IO操作完成时唤醒自己,然后暂停——这是async-await 函数开启一个管道,暂停,另一个函数往管道... 阅读全文
posted @ 2018-04-12 17:34 PointerSMQ 阅读(562) 评论(2) 推荐(2) 编辑
  2018年4月10日
摘要: 什么是coroutine 什么是coroutine?接触过的脑子里肯定会蹦出来很多词:async-await,generator,channel,yield,高并发,甚至goroutine。其实,这些都是coroutine的外部表象,coroutine的本质是什么?上古时期的计算机科学家们早就给出了概念,coroutine就是可以中断并恢复执行的subroutine,什么是subroutin... 阅读全文
posted @ 2018-04-10 17:38 PointerSMQ 阅读(1079) 评论(2) 推荐(0) 编辑
  2018年4月5日
摘要: 更正:图里面的shared_core在实现里面一般叫ref_count_base,是一个多态的东西 阅读全文
posted @ 2018-04-05 13:04 PointerSMQ 阅读(657) 评论(0) 推荐(0) 编辑
  2017年9月23日
摘要: 这个东西主要是用来在编译期把正则表达式字符串字面量处理成正则表达式语法树(表达式模板),然后运行期可以直接使用这棵语法树来匹配文字了,避免了运行期编译正则表达式的性能负担(这里真的是critical的地方吗?),并且类型安全,语法有错的话根本通不过编译。 因为是实验性的,只支持三个基本元素:连接,或,克林闭包,不支持括号,我也不是很想继续写下去(已经写下去了,支持90%的ECMA Script正... 阅读全文
posted @ 2017-09-23 22:57 PointerSMQ 阅读(312) 评论(0) 推荐(2) 编辑
  2017年9月14日
摘要: Allocator(概念)是对访问、寻址、分配、释放、构造和析构策略的封装。是一个满足特定要求的类。标准库中需要分配释放存储空间的容器都需要一个Allocator,除了std::array。 必选成员 Allocator 需要满足的条件有很多,但是大部分都是可选的,只有几个必须存在的成员。 valu 阅读全文
posted @ 2017-09-14 19:47 PointerSMQ 阅读(1731) 评论(0) 推荐(0) 编辑
  2017年7月22日
摘要: bind这个东西争议很多,用起来很迷,而且不利于编译优化,很多人都推荐用lambda而非bind。简单说,bind就是通过库抽象实现了lambda里需要写进语言标准的东西,变量捕获,参数绑定,延迟求值等。但是以此带来的缺陷就是,虽然bind生成的可调用对象的结构是编译期确定的,但是它的值,尤其是被调用的函数,全部是在运行期指定的,并且可调用对象也只是一个普通的类,因此很难进行优化。除此之外,标准库... 阅读全文
posted @ 2017-07-22 12:47 PointerSMQ 阅读(1324) 评论(0) 推荐(0) 编辑
  2017年5月6日
摘要: 前段时间写我的安全整数类checked,顺便就通读了标准中关于整数运算的部分,还发现了不少坑,以及自己没有了解的细节,这里就总结一下。要注意的是,C和C++在这部分的逻辑不相同 第一步,单操作数的类型提升(integral promotion) 对于C++中的所有字符类型,char,signed c 阅读全文
posted @ 2017-05-06 16:38 PointerSMQ 阅读(387) 评论(0) 推荐(0) 编辑
  2017年1月26日
摘要: TinyCMips是我最近在写的一个编译器,就像标题所说,是一个C语言子集到Mips子集的编译器,开这个坑的目的大概是这样的 就是为了写一个完整的编译器 准备大三编译原理课拿来复用 大二他们上计组课的可以拿来将C代码编译到课程用的Mips CPU 满足个人兴趣 充实简历 之所以选择C语言并且是子集,首先是因为C标准十分庞大,其次是因为这个编译器是尝试给大二他们用... 阅读全文
posted @ 2017-01-26 22:23 PointerSMQ 阅读(590) 评论(0) 推荐(0) 编辑