文章

卡住 / 摸鱼 / 用Python写C

卡住 / 摸鱼 / 用Python写C

距离上个检查点已经一周多了。遇到的挑战并不是像预期中的「不想动笔写」。相较之不知是更好还是更坏,实际上是「根本没想起来要写」。

大概还是应该以单位时间而不是事情告一段落作为动笔的时机。一方面固定间隔更容易记起来,另一方面,超出了时间间隔真的会记不住自己干了啥,所以不管干成啥样都必须得记下来了。

最近来到了比较需要发奋图强的一个时期。更密集地存上些检查点,吾日三省吾身。

给这个站重新写了个创建内容的脚本

之前的文章有提,上一个脚本也是从网上抄来的。

说到这里还是忍不住提一下,至今也不理解Jekyll为什么把创建内容的方式设计的这么麻烦。坚持更新作为阻碍一个内容站健壮成长的最大因素(也许没有)之一,难道不值得为其整个流程专门进行符合人体工学的设计吗。

没想到一个仅仅十行的脚本居然也会需要更新。我的内容会大量重复使用checkpoint这个名字(这些内容具体是什么参见本篇。在文件系统里面这不是什么问题,因为Jekyll要求文件名也以年月日打头。然而我采用的主题默认了链接路径仅包含名字,然后就踩踏了。

我的解决方案是在这些检查点内容的链接路径中加入年月日。我只希望检查点内容的链接路径是这种格式,所以要在创建脚本中判断创建的是不是检查点内容。判断依据也简单,只要看名字是不是checkpoint就行了。

实在不想摆弄shell脚本所以写了几行python。

「借助类型系统的使用顺序辅助的分布式协议的验证+实现解决方案」依旧没想出来

受不了了。就算想不出来也给它起个名字先吧。

逐字对译:Type System Based Ordering Assisted Verification & Implementation Solution for Distributed Protocols。

缩写:TSBOAVISDP。

我:reorder the following characters to make a valid word: TSBOAVISDP

GPT:The letters “TSBOAVISDP” can be rearranged to form the word “ADVISPOST”, although it’s not a common English word. Another attempt doesn’t seem to reveal any standard English words using all letters. Do you have any other clues?

它说是就是吧。

给Vispo又想了一些,还试着写了一些代码,很不理想。

跟ℒ又抱怨了一次。感觉终于有点让他理解了问题所在了。一个系统包含了一些顺序不是它可以有效利用typestate的充分条件,只是必要条件。这些顺序的转移判定本身不会出bug也是必要条件之一。

给他讲的时候把这些条件都写在typestate里面了。想了想可以把转移写得傻一点,然后还是在使用侧去做转移判定。这样就更加能说明这个点子的脱裤子放屁的程度了。

但也有可能是我想错了。但是等按照这样写好了就不用再怀疑了。

理应多花点时间的卡皮巴拉项目约等于没干

果然还是有些拖延症的毛病,而且症状也不见好转。希望最后别耽误事了。

好在周五开会的时候当场做(想)出了些成果,(表面上)看起来没有懒得那么过分。

靠着这些成果也让这个项目观感好上了一些。有点动手做的动力了。这个周末抓紧赶一赶吧。虽然周末已经过了不少的比重了。

时间都花在「多级C语言」上面了

上次想起这个点子的时候还在按照「拿python做C的模板语言」来描述。这次改成了multistaged C。

上次说到的那篇博客,就是因为主题好看导致我开始搭这个站的万恶之源,提出了一个观点:编译时内省(introspection)和代码生成是缺一不可的一体两面的关系。

这次我又回想起了这个观点,更深入地构想了一番在python中做编译时内省的效果。挺诱人的。最终把这个点子重新梳理成了multistaged C并又一次动起手来。

到目前为之做的工作都大致是上次写这个项目的时候的重复工作。不过接下来就会有很大区别了。和上次基本完全围绕代码生成展开,写了一个vector并规划了迭代器、正则匹配的自动机生成等等不同,这次规划的第一个里程碑是print。第二个也许是序列化/反序列化,但是感觉和第一个有点雷同,再想想。

这次的一个新的宏大愿景是,用这种技术编写大型C项目,其中没有一行真正的C代码,看似100% python,但是却是实打实的C项目。

干嘛的项目呢?写个操作系统似乎不错。osdev的页面已经挂起来了。唉,还是干点正事吧先。

本文由作者按照 CC BY 4.0 进行授权