中文排版标准

之前做一个repo时,提到了中英文混排时的规范问题。

编程语言语法的思考

不同编程语言有不同的语法,语法主要影响可读性与编写效率。大部分语言的语法都比较相近,但一些语法设计上的细微差异会对编程过程产生不同的体验(特指程序员的心情,不是指思考方式、算法实现等理论知识)。

本文会提及如下语言C++、rust、go、python、ruby、haskell、lisp,但其中rust、go仅仅学过语法,没有实践过,所以观点非常片面!所以观点非常片面!所以观点非常片面

efi、systemd-boot与grub及双系统问题

最近在工作站上装nixos遇到了引导问题。大概为我配置了grub,但是开机却不能引导,行为是直接启动了windows,简直就像是uefi没有查找到linux的efi一样(事实也是的)。

这个问题其实之前也有遇到过,但当时因为不明不白的给跳过了,所以没有详细去理解,甚至没有发现这个问题。因此在此记录。

haskell中fmap, liftM, mapM, traverse历史问题记录

问题

fmapliftM看起来做了相同的事,只是类型约束不同,实现上也不一样,但结果是一样,且后者的实现,可以归约到前者。那为什么使用了两种不同的命名,分别实现?同样的还存在于mapMtraverse等地方。

资料

so: traverse archive

so: fmap archive

wiki: amp archive

说明

简单来说就是历史问题,以前的Monad等并没有受Functor约束,在2010的Haskell中已经改正了,但因为历史因素没有删除这些多余的命名。在使用中,推荐使用约束最少的那一个,比如说fmap和liftM,使用fmap。虽然实现上会有点区别,但最后的结果应该是一致的。

nixos install

记录几个nixos安装时的问题。

  1. 关闭bios的secure boot,这是windows强制默认开启的,但这会导致U盘无法启动
  2. 关闭fastboot,这也是windows的,这会导致内核模块iwlwifi无法被加载,从而无法使 用无线网络

nix derivation

今天在想要不要把home-manager内的zsh plugins换成impurer的fetch时想到的问题。nix derivation是怎么计算hash的,为什么使用fetchFromGethub这类由stdenv定义的fetchur就没有问题,而原装的就不行呢?

简单来说就是看源代码。

调试器与软件启动过程

起因很简单,在弄emacs的调试器,然后想到的问题。本文主要思考了CC、haskell、python与ruby的调试器。在IDE中,在源代码窗口中打断点其实就相当于在对应上下文或调试器启动时,增加给编译器或解释器使用的中断信息,如C语言中的调试用宏,lldb/gdb/ghci中break相关命令的参数,ruby中的byebug等。