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 ...
随机推荐
- QQ粘性布局
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- spring数据源配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-// ...
- mongodb查询返回内嵌符合条件的文档
db.T_Forum_Thread.find({ "ThreadReply.ReplyContent" : /范甘迪/ }, { "ThreadReply.$" ...
- [转载]:Fortran字符串的故事
一. Fortran 字符串与 C 字符串的区别 Fortran的字符串处理能力其实很弱,关于字符串的语法还很落后.它与 C 字符串最大的区别就是:Fortran字符串是固定长度的,没有 \0 结束 ...
- 关键字static和this
1.this关键字 this:代表当前对象,就是代表所在函数所属类的引用.哪个对象调用了this所在的函数,this就代表哪个对象. this关键字也可以用于在构造函数中调用其他构造函数,此时要注意, ...
- javascript的replace+正则 实现ES6的字符串模版
采用拼接字符串的形式,将 JSON 数据嵌入 HTML 中.开始时代码量较少,暂时还可以接受.但当页面结构复杂起来后,其弱点开始变得无法忍受起来: 书写不连贯.每写一个变量就要断一下,插入一个 + 和 ...
- linux 修改ssh端口号
vi /etc/ssh/sshd_config 找到#Port 22一段,这里是标识默认使用22端口,修改为如下: 代码如下 复制代码 Port 22 Port 50000 然后保存退出 执行/et ...
- ajax实现文件下载
前台: <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ...
- Log4j 配置 的webAppRootKey参数问题
为了让Web项目中的Spring 使用Log4j做如下配置: 1.在web.xml中添加如下内容: <!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的&q ...
- C++/MFC如何启动另一个应用程序并获取其进程 ID
ShellExecute( hWnd: HWND; {指定父窗口句柄} Operation: PChar; {指定动作, 譬如: open.runas.print.edit.explore.find[ ...