作者归档:风吹走了我

为什么 Facebook 发明新语言“Hack”(php的一种派生语言)

(注: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/news/50565/why-facebook-invented-a-new-php-derived-language-called-hack?from=20140414

安装SQL2005图文教程(windows 7系统)

由于工作需要,今天要在电脑上安装SQL Server 2005。以往的项目都是使用Oracle和MySQL,MS sql2005的数据库还真很少用到,安装Oracle已经轻车熟路,但装SQL Server好像还有点小麻烦,所以记录下来,以留备用。

————————————————————————————————-

操作系统:Microsoft Windows 7 旗舰版(32位)

数据库版本:SQL Server 2005 简体中文开发板

数据库下载链接:http://pan.baidu.com/share/link?shareid=322740&uk=268517599 (地址已更新2013-03-09)

————————————————————————————————-

安装过SQL Server的人可能知道,它的有些服务要依赖于IIS,所以为了保证数据库的顺利安装,先启用IIS服务吧!Win7比XP好的一点是:启用IIS功能无需借助系统安装盘了,只要在控制面板里启用即可,如图:

step1

step2

第三步需要注意的是,选中红框中的复选项,分别为“Internet Information Services 可承载的 Web 核心”、“Web 管理工具”和“万维网服务”,这里我不确定“Web 管理工具”是否需要,因为我选中它们的父节点“Internet 信息服务”后选中了它的一些子项,多选总比少选全面,需要将它们的子项全部选中才显示为“√”,否则显示为“■”,记住,一定要显示为“√”才行,效果就 和step3一样就可以了!点击确定后会出现线面的框框

如果我们不启用IIS功能,在后续安装SQL Server时会遇见如图画面

到此,IIS功能就算启用完成了,下面开始安装SQL Server

 

安装文件解压后是一个ISO的镜像,其实是一个DVD文件,将两张光盘合并到一起了,所以你的电脑需要安装虚拟光驱,虚拟光驱不会用请先百度一下,我就不在这里赘述了。

首先启动虚拟光驱软件,把SQL Server的镜像加载进来,如图

此时我们可以在我的电脑里看到这张虚拟的安装盘了,如图

如果没有自动运行,那么我们就点双击H盘图标,进入安装

紧接着进入如下画面

我的系统是32位的,我自然选择基于x86的,之后点击“服务器组件、工具、联机丛书和示例(C)”

紧接着弹出对话框,点击“运行程序(R)”

接着出现,勾选,下一步

安装程序会检查所需组件,点击“安装”

点击“安装”

点击“下一步”后,安装程序会监测计算机配置

紧接着跳转为安装向导

点击“下一步”

我们看到,所有的项目都成功,如果之前没有启用IIS功能的话,出现的画面就是之前的那个样子,点击“下一步”

输入公司名后,点击“下一步”

这里需要注意,如果你的界面只有最后一个复选框可选,其他都为灰色不可选,那说明你的版本有问题,不是开发版,请马上放弃安装,从上面我给的下载地址下载开发板进行安装。全部选中后点击“下一步”

默认安装到系统盘下,我们可以点击高级进行修改,点击“浏览(R)”

我将“C”修改成了“D”,点击“确定”

点击“下一步”

我选择的“默认实例”,也可以选择“命名实例”,点击“下一步”

一切默认,点击“下一步”

因为其他程序也可能连接数据库,所以选择“混合模式”,并键入sa密码,点击“下一步”

默认,点击“下一步”

默认,点击“下一步”

默认,点击“下一步”

漫长的安装才刚要开始,点击“安装”

该过程很耗时,慢慢等待吧

安装中途,遇到的第一个弹出窗口,点击“运行程序(R)”

安装了一会,结果又弹出,继续点击“运行程序(R)”

所有模块都安装完毕了,点击“下一步”

到这里就接近尾声了,点击“完成(F)”

 

这个界面是登陆到刚刚安装的数据库,因为安装的时候我们使用的是“默认实例”,也就是计算机名称,“IceWee-PC”是我的计算机名称,点击连接就登陆到数据库了。

我个人感觉安装SQL Server需要注意的地方有两点,一是IIS功能的启用,二是一定要选对安装版本,我第一次就下错了,下的企业版,结果
就只能安装“工作站组件、联机丛书和开发工具”。

 

关于局域网内其他计算机要连接上这个数据库我也遇到了点小麻烦,折腾了半天才搞定。

首先,系统防火墙和其他第三方防火墙,如360、QQ电脑管家、杀毒软件等,这个是常识了

其次,使用telnet命令进行连接,如果能够连上,那么肯定就能访问了,命令格式:

telnet 数据库IP 1433

连不上就会出现如下画面

 

就为了能telnet上我的数据库,折腾了半天啊!折腾了半天!哈哈,最后终于解决了

开始-》Microsoft SQL Server 2005-》配置工具-》SQL Server Configuration Manager

 在弹出窗口中,按照下图点开左侧树

我们看到红框中的“TCP/IP”协议是“已禁用”状态的,我们把它启用后,再重启SQL Server就能telnet上了!