新年开篇博客,依旧是流水账。

读到一篇强文,《关于两个世界体系的对话》。common practice 往往是针对某种语言或者特定技术为背景,然而,很多时候,common practice 都具有其相似性,所谓一通百通(俺可没到这境界);诸如 pythonic 之类的说法,很多时候不过是语法糖;一方面是 control-flow-based 或者 object-oriented 设计思路的成熟与大同小异(当然,很多时候精妙的设计还是会让人眼前一亮),另一方面是 computer architecture 的长期相对稳定。但如果 computer architecture 发生了天翻地覆的变化会怎样,会带来哪些改变,能解决哪些问题(practical or just-for-fun)?很有趣的问题不是吗?

此文里,就提到了一种 data-flow architecture,见 wikipedia 摘要:

Although no commercially successful general-purpose computer hardware has used a dataflow architecture, it has been successfully implemented in specialized hardware such as in digital signal processing, network routing, graphics processing, telemetry, and more recently in data warehousing. It is also very relevant in many software architectures today including database engine designs and parallel computing frameworks.

根据这篇文章的说法(没细究,目前仅仅是不明觉厉):Haskell 是一种 dataflow machine,通过 continuation monad 和 lazy evaluation 将 event-driven 的条件触发代码段,组合成类似于线程的顺序语义。

既然如此,是否能够用 specialized hardware 完成类似 Haskell 试图构建的东东?简单搜索,就发现有前辈已经做了相关的工作,Reduceron 就试图通过 FPGA 实现 Haskell machine(原始论文Github repo):

FPGA Haskell machine with game changing performance. Reduceron is Matthew Naylor, Colin Runciman and Jason Reich's high performance FPGA softcore for running lazy functional programs, including hardware garbage collection. Reduceron has been implemented on various FPGAs with clock frequency ranging from 60 to 150 MHz depending on the FPGA.

Reduceron 项目里,有一个 York Lava 子项目(memo 链接,从 memo 里可以看到,这并非他们的原创,而是相似于 Chalmers Lava(坐落于瑞典第二大城市哥德堡的 Chalmers 大学的 Lava 项目,原始论文,团队核心成员project intro),试图用 Haskell 的一个子集,来做为硬件描述语言(类似 Verilog HDL)。是不是很酷?

顺便看了同一个作者的一篇《Erlang 编程方法论:错误处理,单元隔离,语句优先级,并发模型,调用机制,分布式,状态管理》。观点很犀利。与犀利断言对照阅读:Quora 上关于 Erlang vs Haskell 的一篇问答,同样值得一读。

除了研究价值和「放眼未来」的体验,Erlang 和 Haskell 真的有在被实际使用么?关于 Haskell 的实际使用,找到一家名为 Silk 的公司,使用 Haskell 做后端(Haskell 相对于 Erlang 而言,目标更着眼于 general purpose programming language,但是对 web programming 而言,用 Haskell 做除了后端以外的事情,还是觉得怪怪的),工程博客上一篇《Why we use Haskell》;Erlang 则在国内都被广泛使用着(看云风在 2011 年的一篇开发笔记就可略知一二,他希望用 ZeroMQ 实现进程间消息传递,另一个核心成员则决定用 Erlang 语言级别的消息传递机制 + C/Python driver 的方式来做)。

再说另一件事。前阵子还发现一家公司,杭州瑞瀛科技(Rexense),抛开拗口的中英文名称不谈,这公司很值得研究。其他细节不表,感兴趣的欢迎围观

最后,新年伊始,免不了略显俗套的新年决(愿)心(望)。不过这东西和愿望差不多,太直白的说出来就不太好了。贴一张网上看到的搞笑新年决心,此君之鉴,做为反面案例,与诸位共勉。

2014 New Year’s First Blog的更多相关文章

  1. leetcode Ch2-Dynamic Programming [2014]

    1. Triangle class Solution { public: int minimumTotal(vector<vector<int> > &triangle ...

  2. 跟我一起学习VIM

    跟我一起学习VIM - The Life Changing Editor   前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程.虽然准备有限,但分享过程中大家大多带着一种惊叹 ...

  3. hadoop 集群的配置

    在经过几天折腾,终于将hadoop环境搭建成功,整个过程中遇到各种坑,反复了很多遍,光虚拟机就重新安装了4.5次,接下来就把搭建的过程详细叙述一下 0.相关工具: 1,系统环境说明: 我这边给出我的集 ...

  4. 搭建vpn环境:centos7+openvpn

    vpn的含义:virtual private network vpn的作用/使用场景:最常见的一个作用,你通过公网来访问某个局域网里的主机/服务,其实就是搭建一个隧道,用公网传递你的数据包,等数据包到 ...

  5. Android 自定义 view(三)—— onDraw 方法理解

    前言: 上一篇已经介绍了用自己定义的属性怎么简单定义一个view<Android 自定义view(二) -- attr 使用>,那么接下来我们继续深究自定义view,下一步将要去简单理解自 ...

  6. 让我轻轻的告诉你AliSQLselect语句中in多少个合适

    在以往的分享中,不止一次被开发问: 在MySQL的官方手册上有这么一句话: the optimizer can estimate the row count for each range using ...

  7. Coding源码学习第一部分(AppDelegate.m)

    前言:在此首先感谢开源,感谢大神们的无私分享. Coding 的主页:https://coding.net/app#app-feature Coding 自己家的仓库:https://coding.n ...

  8. CNN for NLP (CS224D)

    斯坦福课程CS224d: Deep Learning for Natural Language Processing lecture13:Convolutional neural networks - ...

  9. [原] XAF How to Edit multiple objects in a ListViewAndDetailView

    2014年好久没有更新Blog了,工作调换了,很少用XAF,但还是很关注XAF的发展和学习,对中国的中小企业数据管理软件开发真的太实用了!! 功能比较简单,但很实用,直接上图和代码! ListView ...

随机推荐

  1. ubuntu下基于sqlite3后台的php环境的搭建

    最近准备把公司的服务器换成linux 数据库sqlite3 搭建过程记录如下: 1 sqlite3安装.. apt-get install sqlite 2.PHP服务器搭建. apt-get ins ...

  2. bash检查文件格式

    情形描述:最近在做一个ETL的项目,用的是CLoverETL,需要在拿到文件后对文件格式进行检验,以决定是否继续. 主要功能是检查每个文件中有几个“|”符号,项目中约定以该符号来作为分隔,所以检查每个 ...

  3. 使用JDBC进行批处理

    在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...

  4. stl 存放对象析构问题

    vector内数据使用结构体的话是深拷贝,vector内的数据会拷贝一份保存,vector内数据不会丢失.如果vector内数据是指针的话是进行浅拷贝,数据超出作用域后会自动析构,vector内所指向 ...

  5. EXCL poi导入

    public static void importExcel2(File file) throws Exception { InputStream is = new FileInputStream(f ...

  6. 安装 ppsycopg2报错, Error: You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application

    sudo apt-get install libpq-dev

  7. [原创] 更新Ubuntu自带的python2.X版本 ImportError: No module named pip;ImportError: No module named _sqlite3

    Ubuntu14.04自带的Python2版本,是2.7.6的,想更新为最新的2.7.11,操作如下: 1. 从python官网下载2.7.11的source源码包 Python-2.7.11.tgz ...

  8. ITop

    iTop,即IT运营门户(IT Operation Portal),是一个开源web应用程序,用于IT环境的日常运营.它基于ITIL最佳实践,而又不拘泥于任何具体流程.它很灵活,可以适应不管是非正 式 ...

  9. information_schema系列之字符集校验(CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_SET_APPLICABILITY)

    1:CHARACTER_SETS 首先看一下查询前十条的结果: root@localhost [information_schema]>select * from CHARACTER_SETS ...

  10. mysql - 最小缺失值查询

    初始化数据 DROP TABLE IF EXISTS X; CREATE TABLE X( a INT UNSIGNED PRIMARY KEY, b ) NOT NULL )ENGINE=INNOD ...