2014 New Year’s First Blog
新年开篇博客,依旧是流水账。
读到一篇强文,《关于两个世界体系的对话》。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的更多相关文章
- leetcode Ch2-Dynamic Programming [2014]
1. Triangle class Solution { public: int minimumTotal(vector<vector<int> > &triangle ...
- 跟我一起学习VIM
跟我一起学习VIM - The Life Changing Editor 前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程.虽然准备有限,但分享过程中大家大多带着一种惊叹 ...
- hadoop 集群的配置
在经过几天折腾,终于将hadoop环境搭建成功,整个过程中遇到各种坑,反复了很多遍,光虚拟机就重新安装了4.5次,接下来就把搭建的过程详细叙述一下 0.相关工具: 1,系统环境说明: 我这边给出我的集 ...
- 搭建vpn环境:centos7+openvpn
vpn的含义:virtual private network vpn的作用/使用场景:最常见的一个作用,你通过公网来访问某个局域网里的主机/服务,其实就是搭建一个隧道,用公网传递你的数据包,等数据包到 ...
- Android 自定义 view(三)—— onDraw 方法理解
前言: 上一篇已经介绍了用自己定义的属性怎么简单定义一个view<Android 自定义view(二) -- attr 使用>,那么接下来我们继续深究自定义view,下一步将要去简单理解自 ...
- 让我轻轻的告诉你AliSQLselect语句中in多少个合适
在以往的分享中,不止一次被开发问: 在MySQL的官方手册上有这么一句话: the optimizer can estimate the row count for each range using ...
- Coding源码学习第一部分(AppDelegate.m)
前言:在此首先感谢开源,感谢大神们的无私分享. Coding 的主页:https://coding.net/app#app-feature Coding 自己家的仓库:https://coding.n ...
- CNN for NLP (CS224D)
斯坦福课程CS224d: Deep Learning for Natural Language Processing lecture13:Convolutional neural networks - ...
- [原] XAF How to Edit multiple objects in a ListViewAndDetailView
2014年好久没有更新Blog了,工作调换了,很少用XAF,但还是很关注XAF的发展和学习,对中国的中小企业数据管理软件开发真的太实用了!! 功能比较简单,但很实用,直接上图和代码! ListView ...
随机推荐
- 华为OJ题目:扑克牌大小
题目描述: 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A.2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 ...
- underscorejs
Underscore是一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象.它是这个问题的答案:“如果我在一个空白的HTML页面前坐下, 并希 ...
- mysql存储过程简介
创建存储过程CREATE PROCEDURE productpricing(OUT pl DECIMAL(8,2),OUT ph DECIMAL(8,2),OUT pa DECIMAL(8,2))BE ...
- JavaScript实现类的private、protected、public、static以及继承
JavaScript中的类 JavaScript实际上是一种弱类型语言,与C++和Java等语言不同.因此,在JavaScript中,没有强调类(class)这一概念,但实际运用中,类还是很重要的,比 ...
- Egret Wing3 商城插件下载和使用
吐槽下官网目前找不到插件商城入口 . 根据管理员提供的地址: http://store.egret.com/work/21-0.html 平时我们可以在wing里直接打开商城. 打开wing使用向导 ...
- C++基于TCP和UDP的socket通信
以下是关于socket编程的一个非常经典的例子: 服务端: #include <stdio.h> #include <Winsock2.h> //windows socket的 ...
- static 变量
被static 修饰的变量全部称为静态变量.所有的静态变量全部存储在静态存储区.按静态变量定义的位置不同,又分为全局静态变量和局部静态变量. 1)全局静态变量 在全局变量的说明前加上static,就是 ...
- pyhton函数——黑板客老师课程学习
1.基本语法 语法: def func_name (arguments) 定义 statements return x,y x,y=func_name(para) 调用 作用域: 可以给内置的函 ...
- git服务器的搭建
http://blog.jobbole.com/25944/ 1,概念 git服务器:就是一个仓储,一个大家都可以访问的公共仓储,大家可以从这个仓储中拉取和推送数据. 协议: 与gist服务通讯的仓储 ...
- (转载)iOS系统Crash文件分析方法
转自: http://ios-iphone.diandian.com/post/2012-05-18/19440182 Xcode 4.3的symbolicatecrash的位置和老版本的不一致了. ...