• Continuation Passing Style

    CPS(Continuation Passing Style, 后续传递风格), 是指将程序的控制流显示地用 Continuation 来传递,而不是像 direct style 那样明确指出下一条语句的编码风格。符合 CPS 的函数需要一个额外的参数:一个显式的Continuation (通常为一个只有一个参数的函数)。一个CPS函数通过以返回值为参数,调用Continuation的方式来返回函数值。当我们调 用一个CPS函数式,被调用的函数需要一个额外的return procedure来供被调用的函数使用。用CPS的方式来表达代码可 以使普通程序中很多不明确的内容变得明确。例如,函数的返回值看起来就像是对Continuation的调用,参数的求值顺序也 变得明确,同时,尾调用(tail call)也被直接传递给调用者(caller)。

    一个函数可以被自动地从 direct style 转换成 continuation passing style。当在命令式或者过程式语言的编译器中 需要表达SSA(事实上,SSA可以被视作CPS的一个子集)时,编译器可以使用CPS来表达中间代码。

  • Continuation 和 call/cc

    维基百科关于 Continuation 的定义:

    The continuation is a data structure that represents the computational process at a given point in the process’s execution; the created data structure can be accessed by the programming language, instead of being hidden in the runtime environment.

    Continuation,延续性,是对程序的控制状态/流程的抽象表达,Continuation 使得程序的控制流程具体化。

    Current continuation,也就是 continuation of the computation step,指的是源自于程序当前运行点的一种 continuation。Scheme中,在代码某处调用call/cc后,产生了一个等待着参数的过程,这个参数是程序在该处的上下文, 在参数之后的程序就叫做 current continuation。Continuation 一词也指 first-class continuations, 指的是编程语言中使得编程语言具有保存任意一点的运行状态,并从之后的程序中回到这一状态(可能多次返回)的可能 的结构和概念。

  • Monoid(幺半群)

    A class for monoids (types with an associative binary operation that has an identity) with various general-purpose instances.

    Monoid,幺半群,顾名思义,指的是有幺元(单位元,Identity)的半群(semigroup),而半群的定义如下:

    Any semigroup $S$ may be turned into a monoid simply by adjoining an element $e$ not in $S$ and defining \(e*e = e \textit{ and } e*s = s = s*e \textit{ for all } s \in S.\)

    From Wiki-Monoid

  • X86汇编学习笔记

    X86汇编学习笔记。

  • 2015-08

  • STM (软件事务内存)

    Software Transactional Memory(STM,软件事务内存)是一种与数据库的事务类似的并发控制结构,用于控制并发 计算中对共享内存的访问,是基于锁的同步的一种替代机制。STM在软件层面实现,而不是基于硬件部件。当一段代码需要读或者写共享的 内存区域时,就产生了一次事务。 1986年,Tom Knight 提出了这一理论,Nir Shavit 和 Dan Touitou 在 1995 年发表的论文 Software Transactional Memory 使得STM开始流行起来,越来越多地收到人们的关注。

  • 线程和锁

    线程与锁模型是并发程序的经典架构,本质上是对底层硬件的运行过程的形式化。这种形式化是其最大的优点,也是其最大的缺点。该模型中,并发的基本单位是线程,并通过锁提供同步机制,保证线程的安全。

  • OpenGL 光照

    在3D真实感图形学中,光照是很重要的技术。从物理上讲,一束光是由很多细小的粒子“光子”组成,这些光子在空气中传输,在物体的表面折射,反射,最终进入我的视觉系统,形成了我们眼中看到的真实世界。本文将主要讨论OpenGL 中的几种光照模型。

  • 投影与相机空间

    计算机屏幕是2维的,OpenGL渲染的3D场景必须以2D形式的图像投影到屏幕上。

  • OpenGL 坐标变换

    图形学中主要有三类坐标变换:

    • Translation Transformation
    • Rotation Transformation
    • Scaling Transformation

    OpenGL中,既可以通过单独计算某一个维度的值来实现变换,也可以通过矩阵乘法来实现变换。使用矩阵乘法的方法更方便,也使用综合多个变换,在OpenGL Shader中,也有相应的硬件支持。

  • OpenGL Shader

    计算机图形系统的发展以提供更快的图形数据处理和更真实的视觉效果为目标!

    固定管线和可编程管线

    图形处理的pipeline解决的问题都一样,所谓固定管线(fixed function pipeline),是说芯片上一组电路已经固定实现了特定的运算功能,程序能做的只是提供场景数据以及微调运算功能的参数。固定渲染管线就是只可配置(configurable)的管线,实现不同效果就好像在电路中打开不同的开关,这样做比较直接,但是它是基于一个基本假设,就是做硬件能预先确定应用会需要哪些能力并提前做进去,如果你要的算法没在里面怎么办?只能各种绕,有时直接就做不了。例如texture stage的设置就是最复杂的部分,而stage数量非常有限(Direct3D 9只有8个),想要组合出各种各样的效果就会非常复杂。

    可编程渲染管线(programmable pipeline)就直接把电路做成相对通用的流处理单元,让写软件的人以shader的形式给这些浮点运算能力超强的单元安排工作。可编程渲染管线把很多部分从可配置改为可编程(programmable),各种效果及他们的组合可以通过一般编程的方式实现,自由度高得多,而且不需那么伤脑筋。最通常的应用就是自行实现光照和材质,可用上各种光照和反射模型,也可把一些运算放在顶点上算,一些运算放在像素上算。


Subscribe via RSS