2019-01-21 Xie Jingyi
This chapter develop a small language of numbers and booleans, serving as a straightforward vehicle for the introduction of serveral fundamental concepts like, abstract syntax tree, evaluation and runtime errors. Syntax BNF-like Definition Terms of this language are defined as below: t ::= true false i 继续阅读 »
2019-01-21 Xie Jingyi
SS Client bash $ [sudo] pip3 install shadowsocks /etc/ss.json: javascript { "server": "", "server_port": "", // must be Number "password": "", "local_address":"127.0.0.1", "local_port":1081, "timeout":300, "method":"aes-256-cfb", "fast_open":false } bash $ [sudo] sslocal -c /etc/ss 继续阅读 »
2019-01-07 Xie Jingyi
前几天和阿三聚了一餐,这大概是一年到头来我们为数不多能好好聊天的时间。 我们谈了很多,从考试到动漫到未来。令人惊讶的是,他表现出了一种忧虑,对未来的忧虑。在我看来这是很少见的。忧虑的一方面是关于短期的未来,有CSST面试的压力,以及成堆的考试;另一方面是更遥远的未来,暑研或是升学或是就业。再往前两天的团队聚餐上大家的讨论,关于资本寒冬的,关于机器学习的逐渐饱和,都给我们留下了深刻的印象。 我问他不做金融吗。他说经过暑假的实习他也对这个行业失去了兴趣,量化交易不过也是机械性的脑力劳动(如有冒犯请见谅,这是我凭回忆归纳的,然而我对这个行业一窍不通)。现在他也开始迷茫将来要做什么。 他说有点羡慕我的状态,对周围的环境不care,沉浸 继续阅读 »
2019-01-06 Xie Jingyi
rustup v.s. cargo cargo 是 Rust 最底层的包管理器,类似 npm 或 pip。 rustup 是 Rust 的工具链管理器,允许开发者在多个不同版本的工具间切换。所谓工具不仅包括 rustc 和 cargo,还包括 rustfmt、racer 等一系列辅助开发的模块。类似于 Anaconda、Pipenv 之于 Python,或是 n 之于 Node.js。 Rust 的工具链默认存在于 ~/.cargo/bin 中,rustup 会用代理脚本覆盖其中的可执行文件,从而用户可以通过命令行标志方便地切换版本。 stable v.s. beta v.s. nightly Rust 官方默认提供三个通 继续阅读 »
2018-12-31 Xie Jingyi
四月,我大病了一场。先是呼吸时胸口隐隐作痛,我以为是运动伤害,毕竟始发时刚剧烈地骑完车。后而逐渐变成呼吸困难,镜子里的自己嘴唇发紫,睡觉时也像是有人扼着喉咙。我开始在傍晚时发烧。 清明前后,春寒未散。宿舍已没有了暖气。清明节我在宿舍躺了两天,睡到饭点起来吃,吃完继续睡。两个舍友出去玩了,合肥一直在下雨,屋里甚是寒冷。 躺在床上,我不停查找着可能的病源。我是个不轻易上医院的人,但这突如其来的状况着实让我害怕。我想在相关疾病的列表中寻求安慰,希望只是一场小病。为什么不上医院呢?去医院一切就定下来了,无论结果是好是坏。但如果不去,就还有无数的可能。我总是这么想。 入夜时,我也会想,如果这真是糟糕的病又该怎么办呢?我在一个陌生的城市, 继续阅读 »
2018-12-15 Xie Jingyi
一个依赖于外部状态 s 的伪函数 f' :: a -> b,我们可以将其改写为 f :: a -> s -> (b, s) 使其良定。即,在输入输出中显式传递状态 s。现在,我们需要利用 Monad 将状态传递过程隐藏起来。 注意到,输出值 (b, s) 中的末状态 s 不仅依赖于输入状态,更依赖于之前更改过状态的一系列函数及其逻辑。因此我们不能简单地将 Monad 定义为 (a, s) 类似的形式,否则两个函数用 >=> 结合的结果将与函数逻辑无关,这与我们的期望不符。 考虑如下定义: haskell newtype State s a = { runState :: s -> (a, s) } 由于 -> 的右结合性, 继续阅读 »
2018-12-14 Xie Jingyi
动机 pure functions 看似完美,但却不能模拟现实世界中的诸多任务。这是由于 pure functions 是良定的映射,对于特定的输入值会返回唯一的输出。这种模式在面对如下任务时会显得苍白无力: 有可能失败的任务。如大多数的 IO。 依赖外部状态的任务。如(伪)随机数生成器。 非确定性任务,即对于确定的输入可能有多个输出。这种在 IP 中较为少见。 对外界会造成影响的任务。如大多数的写入过程。 这些问题可以用数学中的域扩充技巧来解决。 域扩充 在数学中,当定义问题的范畴不足以容纳问题的解时,我们通常会对相关的范畴进行扩充。类似的技巧同样也可以应用在这里。 假设一个不良定的函数 f: A -> B: 如果 f 继续阅读 »
2018-11-18 Xie Jingyi
Motivation Functor solves the problem of mapping regular one-parameter functions into a sub-category, but that's not easy for functions with more than one parameters. Let's consider a function with two parameters f :: a -> b -> c, which can also read as a -> (b -> c). Applying fmap on f, we will get fmap f :: m a -> 继续阅读 »
2018-11-18 Xie Jingyi
Category Theory A category has three components: A collection of objects. A collection of morphisms, each of which map one object to another. A notion of composition of these morphisms, i.e. morphisms can be composed. If f: A -> B and g: B -> C are morphisms, f.g generates a new morphism A -> C. Note that a morphism 继续阅读 »
2018-11-16 Xie Jingyi
新类型有自己的 data constructor (literals 可以看成特殊的 data constructor),由这一点来区分是否创建了新类型。 data 创建了新类型,可以有多个 data constructor。 newtype 创建了新类型,只能有一个 data constructor,同时新类型的内存布局与原来的类型相同。 type 没有创建新类型,只是建立了 alias,没有新的 data constructor。 type 常用于语义化类型,是业务逻辑层的概念。 ```haskell type ID = Int a = 1 :: ID b = a + 2 -- legal showID :: ID - 继续阅读 »