卡住 / 摸鱼 / 用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的页面已经挂起来了。唉,还是干点正事吧先。