调试器与软件启动过程

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

haskell caf

haskell中,会对特定的form进行缓存。从而产生出了一些使用无穷列表等方案的技巧,用于缓存运行结果。避免重复计算。最典型的例子就是斐波那契数。

foldl,foldr,foldl’

fold是合并列表等重要的操作,其中主要有foldr和foldl,也即从右向左和从左向右。一般来说,后者会优于前者。但在haskell中,并不是这样。

nix计算目录sha值访方法

nixpkgs有一个fetchFromGitHub的方法,里面需要计算sha值,但是但是是但是文档里没有说这个值是怎么算出来的,不同于一般的文件是很容易计算的,这里是一个目录啊,文档上还写着”extracted directory“。很是迷惑。

nix setupHook和一些tips

之前已经写过一篇关于nix的配置相关的博客,这次是再一次遇到了新的问题,而对setupHook进一步理解后写出的。主要针对NIX_CFLAGS_COMPILEcc-wrapper等内建的hook进行了一次理解。问题首先为成两个主要部分。

  1. cc-wrapper是何时被调用的,在cc-wrapper的setup-hook里没有调用到cc-wrapper,且stdenv/setup.sh内也不存在setup-hook以外的特殊脚本调用。
  2. setup-hook内,以及各种build-support内,没有任何对NIX_CFLAGS_COMPILE进行配置的地方,在nixpkgs也是同样(除了部分configure等有兼容性问题的地方)。那么nix是如何使用这个变量,而又不去设置CFLAGS等变量的(其实有点剧透了,因为最初的想法应该是何时把NIX_CFLAGS_COMPILE传过去的)。

这两个问题其实是同样的,因为都是wrapper的内容。这两个问题之外,就是一些小细节了。