RSS Feed

Posts Tagged ‘开源’

  1. 关于Typed Clojure

    August 17, 2014 by xudifsd

    最近一直很忙,都没空写什么东西了。今天终于闲下来了一些,现在正值今年GSOC项目要结束,而且国内关于Typed Clojure的资料少得可怜,所以写点东西介绍一下。

    Typed Clojure

    Typed Clojure的作用就是给Clojure语言提供一个可选的类型系统,以获得与静态类型语言同等的类型检查能力,但是这种能力的获得仍然是需要一定的代价:那就是使用者需要为每一个全局变量以及函数都加上类型注释,现有的类型可以见项目的wiki。不过它确实能完成对Clojure的类型检查,甚至包括对nil或者java null的捕捉,这一点还是很帅的。

    感兴趣的话可以看作者Ambrose在Clojure conj上的介绍视频(需翻墙),这个介绍讲的还是很清楚的。Typed Clojure完全通过Clojure的宏来实现,而不需要特殊的解释器或编译器,这也是Lisp类语言最大的优势,试想如果需要给python加一个类型系统,不自己重写个解释器是不可能。

    Typed Clojure受Typed Racket的影响很大,很多理念都是借鉴自他们,甚至我今年的实现内容也受到他们的影响。就健全性来说Typed Racket要优秀很多,因为Typed Clojure现在就只有Ambrose在维护,贡献者也很少。而Typed Racket就有点像是一个学术项目了,它们的贡献者以及维护者大多是Northeastern University PLT实验室的博士或博导,他们大多会在这上面发论文,比如这篇介绍,就说“Typed Racket is not just a nice language … it’s also informing PL research at every level”。

    我的工作

    我今年GSOC的内容就是给Typed Clojure类型系统添加两个函数类型,让Clojure中一些特别奇葩的函数也能使用first class type做类型标记而不需要在类型系统内部特殊处理。这些奇葩的函数就包括assochash-map。因为这两个函数对参数还有特殊的要求:因为都是操作map的,所以要求接收的参数与返回值map的key和value的类型匹配,而且也要求参数是成对出现的。

    Typed Clojure已经有了和Typed Racket类似的dotted type variables,这种类型已经可以用来表示不限参数个数的、任意类型的函数,并在结果上对参数类型加以限制。但是却无法表示要求参数成对出现,所以之前Ambrose的想法就是提供一个类似...2这样的语法来表示参数成对出现,不过这种做法有点类似将参数写死在类型系统里,如果之后出现了要求参数成三个出现,则又必须提供...3这样的语法。

    在与Typed Racket的人交流后,我们决定使用最lisp的方式解决——使用list。简单来说就是给list类型加上一个:repeat这样的属性,让:repeat的list可以匹配与它长度成倍的list,例如,(HVec [Number String] :repeat true)可以匹配(HVec [Number String])以及(HVec [Number String Number String])之类的,并且给函数类型加上<*以及<...这样的语法,意思是将多出来的参数捕获并与它之前的类型进行匹配,它之前的类型一般是有:repeat属性的list,这样就很好地解决了写死参数的问题——多给list内部加一个类型就能支持参数成三个出现的要求了。

    如果对细节感兴趣的话可以看下我写的关于我的实现细节以及Typed Clojure类型推导的文档

    Typed Clojure现在仍然很不成熟,从版本号(0.2.66)就可以看出来,现阶段已经可以在一些小的项目中使用了,但是我觉得在真正的生产环境还是最好不要使用,首先一个原因就是它的类型检查还是比较慢的,再者就是他的硬伤——学习成本,需要在项目中使用就需要完完全全学会它的类型注释。

    如何向Clojure贡献

    Clojure以及任何Clojure官方库的贡献都要求签CA,以前还必须是纸质信件邮寄到美国,现在终于支持电子版了,内牛满面。不过签完CA后还不能通过github的PR进行贡献,必须通过Clojure的JIRA提交patch。这确实有点麻烦,但是Clojure也是通过这种手段保证不会有有版权代码的进入。

    如果想要给Clojure或它的官方库贡献代码的话可以从它的JIRA中的issues下手,因为那里一般都是一些实现的bug,会有比较清晰的思路着手,并且能在这个过程中熟悉原有代码结构。

    关于开源

    今年参与Typed Clojure觉得最大的收获就是了解了下国外的开源是怎么运作的,我觉得这中间最重要的就是sponsor扮演的角色。很多项目开发者要不就是兼职开发开源项目要不就是全职开发了,比如我的mentor Ambrose就是全职在开发Typed Clojure,但是收入从哪来呢?就是通过sponsor,比如他就通过国外的众筹来筹得一些项目经费。

    甚至在Typed Clojure还没开始时,sponsor就在扮演很重要的角色了,见。Ambrose就是这样参加了那次Clojure conj,并在这个会上介绍逻辑编程,在会下和别人交流时别人提到有类型系统的需求,然后Ambrose才开始着手实现Typed Clojure的。

    国内貌似还是没有这样的捐助气氛的吧。


  2. 为什么你的公司应该执行开放的开源政策(翻译)

    July 26, 2013 by xudifsd

    很久以前看《维基经济学》里说到IBM准备实行开源时做了研究:投资linux项目所花资金比IBM从linux项目中获得的收益少多了,所以IBM决定投资linux,并实行开放的开源政策。但是总觉得开源没那么简单。

    现在在公司做cascading的项目,又由于对clojure感兴趣,所以搜了下cascalog。于是机缘巧合地搜到了cascalog创始人的博客,才发现他也是stormElephantDB的创始人,并且发现他的博客也写得非常好。而且发现了这篇文章,由于国内开源风气实在不行,所以把这篇文章翻译了下。希望大家能感受下。。。翻译得很烂,讲究看吧,如果英语好直接去看原版。

    以下文章为翻译,版权仍然归Nathan Marz所有。


     

    为什么你的公司应该执行开放的开源政策

    如果公司想要招到真正的星级程序员,那么执行开放的开源政策是很重要的。换句话说:优秀的程序员会尽量避免加入不开放的公司,因为参与开源项目是程序员提升自己市场价值的最好办法之一。

    评估编程能力的传统方法并不有效

    程序员市场,特别是顶级程序员市场是出了名的无效率。这种无效率性体现在缺乏好的评估方法。评估程序员的标准技术——简历,现场编程,离场编程项目——至多只能大概了解程序员的能力,但是都无法显示出一个人的远见力。当然,有些指标,如加入过成功的公司或有很显眼的称号,但是这些仍不足以显示一个人的编程能力。

    如果你是程序员,这种评估能力的无效率性会使得潜在雇主对你的估值低于你的真正价值。顶级程序员在市场上就会无法从低一级程序员中区别开,并且价值会被低估很多。顶级程序员需要更好的机制去表现自己的价值以便被更公平地估值。

    开源使得市场对程序员估值更有效

    开源是个均衡器。一个开源项目展示了程序员如何解决一个暂时没有可行解决方案的真实问题。开源项目给予程序员在面试中展示自己从设计到实现到测试的更广阔的视野。如果你是个伟大的程序员,这意味着可以显著减少你在市场上的估值与真实价值的鸿沟。

    一个程序员越被低估,那么他就应该越会想通过加入开源项目来使其估值得到提升。最被低估的是那些高端的被称为“摇滚明星”和“忍者”的程序员,所以这些程序员能从开源中得到更多。

    一个不开放的政策会阻碍星级程序员提升自己的市场价值

    既然最好的程序员有很强的激励去投资开源,那么他们就应该避免加入到不开放的公司,而倾向于加入开放的公司。这就意味着那些不开放的公司会不自觉地阻碍自己招到最优秀的程序员。

    公司会出于多方面的原因不喜欢开源自己的内部项目。他们可能会觉得自己将代码拱手让给潜在的竞争者,他们可能会不喜欢让雇员们通过提升自己市场价值让雇员们更贵,他们可能觉得开源让团队在建设真正商业产品时分心。这些都是公司在做出执行开放政策时所需要做的权衡,如果想招到真正的“摇滚明星”就必须做出这些权衡。

    公司也会从开源项目中得到其他好处。开源帮助公司在工程师社区中做了很好的广告。并且开源给这些公司在用户组和会议打自己广告的机会,让公司可以说出自己的品牌。最后,公司也可以通过开源项目得到外界的“免费贡献”。

    这个见解还不是所有人都知道

    很多程序员现在还没意识到自己投资开源的价值,并且很多优秀的程序员仍然在为并不开放的公司工作。但是随着越来越多的程序员意识到开源能提升自己的价值,越来越多的公司就会把实行开放的政策做为招聘时的优势。比如,我的公司BackType就有十分开放的开源政策,并且我们正在招人。(译注:BackType已经被twitter收购,Nathan Marz也自己去创业了,不用期望加入BackType能见到他,见他的另外一篇博文,至于他去干什么了看,只是里面说的内容和文章的发布时间有点让人觉得不可信【笑】。)

    当然,除了开放的政策,想要招到顶级程序员还要做更多。只是如果没有开放的政策会给招聘那些顶级程序员设置障碍而已。