混乱的名词

曾几何时,我只知有锁,不知有同步。接着互联网兴起,人们开始说异步。当今有一种怪象,销售也席地而坐给人讲技术。我过某传销者说“异步防阻塞”,还就何种“防”法长篇大论 ಠ_ಠ

歧义?

我初入门是学Linux和C。Java那种Synchronized,在我的认知下就是Mutex。后来听说有同步IO和异步IO。看过《UNP》之后,我理解的同步就有了两种含义(也就是说“同步”一词有歧义),当时网络上大多评论也赞同这种观点。但是后来学习了各种技术,知识,我发现自己的观点完全错了。 Continue reading 混乱的名词

抽象价值之简述

我在《实现drop函数》最后写下:

抽象的价值是否就在于将问题映射到更简单的解空间?

这只是一个Shower Thought。但可以就其展开谈一些有趣的事。

首先,抽象这个词在中英文语境的含义不一样。其次,抽象的概念本身就很难解释(一不小心就递归了:-p)。本文是完全从编程者的角度探讨的。

辞源

抽象的英文是abstract,看词根就是牵拉的意思。15世纪艺术届大量使用abstract表示分离现实物质的行为。比如说抽象画,它的一大要素就是去除事物的外在特征。可能是同期艺术界千奇百怪的作品被冠名“抽象”,让这个词有了“高深”或“难以理解”的含义。

中文的抽象一词源头已经不可考,但它的含义已经被各种后现代艺术,娱乐作品转义了不知道多少次。工程上所谓的抽象出现不超过200年。 Continue reading 抽象价值之简述

吃饱了撑的之实现drop函数?

本篇的灵感如题来自一个常见的函数drop(),他的用法是这样的:

vec{1, 2, 3, 4, 5}
vec1 = drop(2, vec) // vec1 = {3, 4, 5}
vec1 = drop(-1, vec) // vec1 = {1, 2, 3, 4, 5}
vec1 = drop(7, vec) // vec1 = {}

它在函数式或者动态语言里非常常见。一般实现是这样:

drop = (n, xs) => {
    if (n <= 0 || xs === [])
        return xs
    else 
        return drop(n - 1, tail(xs))
}

这里借助了tail()。如果用Python或者Go就是xs[1:](尾递归优化不在探讨范围)。 Continue reading 吃饱了撑的之实现drop函数?

几种状态机实现形式

状态机(State Machine),在电气,电子行业应用比较多。对于程序员,尤其是在应对流程复杂的业务逻辑时也非常有用。大多情况下,只要设计出良好的状态图,就可以机械地将其翻译成代码。状态机的概念分支其实很复杂,中文其实没有正确的翻译所有术语,比如automata。我没有能力涵盖所有内容,以下只是笼统的讲一点理论和形式。

基本概念

游戏编程有个概念,触发器(是Trigger不是电子中的Flip-flop)。它核心的两个概念,事件(Event)和动作(Action),有时候可选的加上环境(Environment)/ 条件(Condition/Criterea)。下面是个简化的实例:

大多格斗游戏,输入“↓→A”,会发出波动拳,像街头霸王的Ken。对触发器来说,“↓→A”就是事件,波动拳就是动作。但在浮空和倒地时不能发出波动拳,这两个就可以算作环境或条件。再之后,释放的波动拳又可以作为触发下一个动作的事件。

Continue reading 几种状态机实现形式