为什么Facebook发明新语言“Hack”

(注:Hack是一种PHP的派生语言)

为了替换掉那些有年头的老代码,Facebook创建了一个新的语言。这篇文章将会告诉背后的故事。

By Steven Melendez

这个故事来自Facebook工程师Julien Verlaguet和Ed Smith的一次访谈。2004年2月,扎克伯格(Mark Zuckerberg)的哈佛同学们第一次登陆Facebook,服务器里运行着PHP。那个时候PHP击败了Perl成为最炙手可热的Web开发语言。

使用类似Ruby的Rails或者Python的Django这些当下最流行的开发框架都不是那个时候的选择。Rails第一次发布是在几个月之后(注:2004年7月),而Django在一年后才被发布(注:2005年)。十年后,PHP因为笨拙的库,不一致的命名规则,内置定义的函数,在多语言程序中语法和语义与相关语言巨大差异使人混淆,过去的设计原则极容易导致安全性问题等而被指责。

“每一个PHP程序员日复一日地处理着难以捉摸或者棘手的任务”,Facebook的工程师Julien Verlaguet和Alok Menghrajani在最近的公司博客上写道。

但是,PHP并没离开Facebook,并且其他的大公司和工程的数百万行代码都是用这个语言写的。程序员们仍然得益于PHP的快速开发和部署,且努力去除那些不好的特性。

减轻PHP程序员的痛苦不是说抛弃这个语言和多年的开发成果。Facebook开发了Hack,这是一种新的,派生于PHP的语言。它将与已有的代码和谐相处,增强了安全特性源于函数式编程语言和学术研究。

“这是一种很特别的设计,能与PHP进行无缝的交互”,Verlaguet说。技术引领着Hack项目的发展,它的背后是一份混合编程语言和行业经验的正式学术研究。Facebook已经在内部使用和发展Hack大概有两年时间了。最近,已经将项目开源,并且在4月9日安排公开的“开发者日”。

“我们这样做的目的是希望能更好地倾听来自社区的反馈, 同时开源社区也会让Hack面对Facebook外的开发者有更好的体验”,Verlaguet说。

也许Hack的主要创新是引入了自动类型判断,概念类似于深奥难懂的Haskell和 ML语言但是比他们少得多的命令行,同时更接近主流的编程语言。

传统的PHP是动态类型,这意味着在代码中的基本的本质的变量类型是一个数还是一个字符串或者其他类型是不确切的,除非程序实际运行着。程序员们享受这种灵活,却为错误开辟了空间,它不像Java或者C那样的静态类型语言,代码被写出来的时候就明确告诉你变量的类型。

Hack走了一条中间路线:它可以基于变量怎样被使用的使用逻辑让开发者指定类型,如果代码的逻辑冲突,就会给出一个错误(error)。这个概念本身不是新的,但是它以前都是被用在编译型语言上的,开发者需要等待他们的源代码被转换成机器码,不能像PHP程序员希望的那样点完保存立即执行,Verlaguet说。

“解决方案在于建立了一个类型检查守护进程”,他说。关于这个后台程序运行在开发者的电脑里。它代替等待开发者去显示调用一个编译器,当源代码文件被改变的时候,类型检查进程要求操作系统去通知编译器。这类似于同步文件需要更新时,Dropbox就得到一个信号。

被改变检查的有效的方法是通过类型检查器被反复检测,直到其确认与其他的代码是一致的。只要类型检查器足够快,程序员基本就不需要等待,类似于在Git版本管理系统上转换到新分支那样,Verlaguet说。

Hack还有其他一些特性,增强的集合类型如vector和set来增强PHP的数组,匿名函数被使用在函数编程上。新的语言让Facebook逐步提升已有的PHP代码,使得长期投资在PHP上的价值继续发挥作用, Ed Smith说,Facebook的HHVM运行引擎将会同时提供给Hack和PHP。

“Hack 让我们能在同一时间和同一文件上动态转换我们的代码”,Smith说,“换做其他的一种语言将会有很大的困难”你认为是吗?

其他的公司和工程转换到时髦的Hack还为时尚早,项目刚刚开源,Verlaguet说。不过,从对他采访的记录来看,整个项目目前是处于积极的态势中。

英文原文:fastcolabs

文章转载自开源中国社区 [http://www.oschina.net]

为什么 Facebook 发明新语言“Hack”相关推荐

  1. 腾讯 QQ 产品已经实现全量上云;中科院计算所发明新编程语言“木兰”;Electron 7.1.9 发布 | 极客头条...

    整理 | 屠敏 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...

  2. 腾讯 QQ 产品已经实现全量上云;中科院计算所发明新编程语言“木兰”;Electron 7.1.9 发布 | 极客头条

    一分钟速览新闻点! 贵州今年建成华为数据中心.iCloud 数据中心等项目 美团打车:"出租车感谢费"模块已下线,将进一步评估方案 腾讯 QQ 产品已经实现全量上云 华为面向全球发 ...

  3. Facebook成立AI语言研究联盟,自然语言处理或有新成果

    2019-08-29 23:06:04 大约三个月前,Facebook在自然语言处理(NLP)的三个子领域,即语言学的跨学科研究和涉及计算机语言交互的人工智能方面发起了研究提案.除了针对低资源方言的神 ...

  4. 蛙蛙推荐:蛙蛙教你发明一种新语言之一--词法分析和语法分析

    摘要 程序开发行业中有很多种编程语言,每个程序员大概也都会一两种,可你有没有想过自己DIY一种语言呢,本文就带你用.net DIY一种新语言--WawaSharp,我们将定义语法,实现词法分析,建立语 ...

  5. java自动推断类型_推断:Facebook的新Java静态分析工具

    java自动推断类型 如何使用Facebook的Infer改善Java开发工作流程? 如果您与技术话题保持同步(如果您正在阅读此博客,我想您会这样做),那么您可能听说过Facebook 刚刚向公众发布 ...

  6. 推断:Facebook的新Java静态分析工具

    如何使用Facebook的Infer改善Java开发工作流程? 如果您与技术话题保持紧密联系(如果您正在阅读此博客,我想您应该这样做),那么您可能听说过Facebook 刚刚向公众发布的新工具:推断. ...

  7. 谷歌力推新语言 Logica,解决 SQL 重大缺陷!

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 昨日,谷歌在其开源博客介绍了一个新的开源逻辑编程语言--Logica. (图片来自 Logica 官方) Logica,取名于  Log ...

  8. 鉴于现有的形式化方法(简称“桥”系列)有其优点和缺点,特发明新的“秤”系列

    鉴于现有的形式化方法及其形式化语言(简称"桥"系列)具有的优点和缺点, 特依据信息基本定律发明新的"秤"系列,以扩充并解决"桥"系列所解决不 ...

  9. IT职场人生系列之二十二:如何学习新语言(二)

    获取帮助 谦虚.大胆.再谦虚地尝试 这几个词看起来很不搭嘎,但我细细回忆起来10多年编程的经历,这句话很可能是高手与低手最后产生差别的关键,所以重点写一整篇. 菜鸟不是低手,低手指的是工作了很久,但技 ...

最新文章

  1. 利用人脑神经突触进行网络模型剪枝
  2. asp.net webapi 微信接口接入
  3. python pandas dataframe 转json_python将相类不同key的json对象转化为pandas的dataframe(上篇)...
  4. IntelliJ IDEA 2019从入门到癫狂 图文教程
  5. Android 自定义阴影,自定义颜色样式
  6. 猜数字游戏python123_【趣味数学】可以说谎的猜数字游戏
  7. 车林通购车之家--购车计算器模块--保险
  8. 一个函数统一238个机器学习R包,这也太赞了吧
  9. keil编译运行错误,缺少error:#5:#includecore_cm3.h_过路老熊_新浪博客
  10. 阿里巴巴分布式消息系统的演进之路
  11. hive xmlserde_各种数据格式的Hive建表语句
  12. Palabos源码:computeEquilibrium(iPop, rhoBar, j, jSqr)的过程
  13. im即时通讯软件app源码-仿微信-开发日记
  14. 中望3d快捷键命令大全_autocad2014快捷键命令大全
  15. 中国物联网、物联网卡进入蓬勃发展阶段
  16. 使用proxychains匿名浏览,清理痕迹(六)
  17. 最新WIFI分销大师小程序源码+带后端/亲测可用
  18. char类型与字符编码
  19. uCOSIII移植stm32c8t6
  20. stackoverflow愚人节彩蛋效果

热门文章

  1. 金融帝国2(Capitalism2)完美中文版下载
  2. 国产系列卫星平台介绍——环境系列、资源系列
  3. win10使用宽带虚拟WiFi信号
  4. 安全路上慢慢走,持续更新
  5. 计算机硬件安装实验报告,[转载]计算机硬件系统及组装【大一计算机实验报告】...
  6. Delphi易主Embarcadero
  7. kotlin异常处理之----取消异常CancellationException与其他异常的区别,协程异常处理顺序
  8. 【b站黑马程序员C++视频学习笔记-多态案例二-制作饮品】
  9. 护卫队(动态规划+ST表)
  10. termux-x11教程