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

读到一篇强文,《关于两个世界体系的对话》。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. oracle 常见恢复

    author by :shawnloong 环境:windows 2008 r2 sp1 db:oracle 11g r2 做之前记得做个完整备份 ONFIGURE RETENTION POLICY ...

  2. Metasploit更新

    Metasploit更新,官方放弃SVN,开始使用GIT 有一段时间没有写文章了,今天翻译一篇文章吧.以后Metasploit更新,请不要再使用下面的方法了 1 svn co https://www. ...

  3. nodejs http 请求延时的处理方法(防止程序崩溃)

    有时候因为接口没开,或者其他原因,导致http.request 请求延时,一直耗费资源不说,还会导致程序报错崩溃,延时处理其实也是一种错误处理. 直接上代码: var APIGET = functio ...

  4. 【T电商2】ftp服务器搭建

    一.为什么需要ftp? 分布式环境一般都有一个专门的图片服务器存放图片.我们使用虚拟机搭建一个专门的服务器来存放图片.在此服务器上安装一个nginx来提供http服务,安装一个ftp服务器来提供图片上 ...

  5. 【Tree 1】树形结构数据呈现的递归算法实现

    一.基本概况 在我的项目中,常常会用到树形结构的数据,最为明显的就是左边菜单栏,类似于window folder一样的东西. 而我之前一直是借助前端封装好的ZTree等工具实现展示,而后台则通常使用递 ...

  6. linux mono环境

    安装好 CentOS 6.5 之后 1.更新系统 在命令行下执行 yum –y update 2.安装必要的软件 yum -y install gcc gcc-c++ bison pkgconfig ...

  7. SQL笔记 [SQL判断是否存在] [长期更新] (-2015.4)

    --判断某个存储过程是否存在if exists (select * from sysobjects where id = object_id(N'[p_CreateTable]') and OBJEC ...

  8. Android--Toast(吐司)的基本使用

    1.学习Android开发,不能从单方面的知识去考虑问题,要从全面出发. 2.Toast(吐司) 1.打开eclipse 选择文件存放的位置 点击Dbms,测试是否连接成功(海马模拟器或者夜神模拟器) ...

  9. velocity模板使用建议

    复杂页面前端模块化的方式: 方式一:iframe 方式二:velocity模板(#parse) 方式一,优点很多,也有缺点,例如页面之间传递参数等: 方式二,页面之间的调用,传参更容易,页面性能更好: ...

  10. css部分的复习

    常见的块元素有<h1><h6>.<p><div><ul><li><ol>等,其中<div>标记是最典型的 ...