Tim Caswell是多个JavaScript和Node.js社区的知名成员,他提出了一个使用JavaScript来重新实现Git的建议。并将该项目放到了Kickstarter(译者注:Kickstarter是一个对个人创意项目进行公众集资(捐赠)从而获得资金支持的网络平台)上进行集资,结果仅仅在28小时内就获得了超过360人的资助。该项目再一次应证了Atwood定律:“但凡可以用JavaScript编写的应用,最终都会有JavaScript编写出来的实现。”
InfoQ通过与Tim的对话对该项目进行了更深入地了解。
JSGIT项目的想法从何而来?
我一直在寻找一种适合在我自己设备上编程的新方式。最近有个微软的朋友送了我一个Surface RT ,前一个项目留下的一对iPad,以及我最近买的一个ChromeBook Pixel。这些都是很有意思的设备,但是令我非常郁闷的是他们都有锁定限制并且对于在设备上的开发支持非常不友好。有一个平台没有人敢对其锁定,甚至是Apple,这就是浏览器环境中的JavaScript。你可以在该环境中生成并执行代码,你也可以访问本地存储,并且可以通过互联网上传或下载数据。
在Cloud9平台上工作了一年后,我意识到基于浏览器的IDE在现今将成为可能。唯一的问题是Cloud9没有很好的解决离线问题。我希望的是可以将我的Git仓库复制到我本地的设备中,当我在海外飞行时(或者身处于我家后院深处时)可以离线工作。并且当我回到互联网的怀抱后,可以将我的修改push回我的公共Git仓库。
由于JavaScript是唯一一个随处可用的平台,所以我决定并且真的要将Git移植到JavasScript平台。
你认为JSGit将会有哪些使用场景,是否只是基于浏览器的IDE和编辑器,还是将会有更广泛地应用?
我个人的主要用途是基于浏览器的编程环境,但是很多人也表达了对于其他用途的兴趣,比如一个纯JavaScript的针对Node.js的 Git客户端和服务器。Git是很多部署系统中的一个通用组件,实现具有针对Node.js的Git服务器和客户端来对Git进行细粒度控制,将会给很多人带来帮助。
你认为它的性能将会如何?
JavaScript本身是相当快的,我最近使用JavaScript写了一些非常快的hash函数(MD5,SHA1,SHA256),在我的桌面浏览器里可以达到每秒500,000次MD5 hash的速度。因为复制一个Git仓库是很慢的,即使你在一台很快的笔记本上使用原生客户端,对于大型的仓库来说都是非常慢的,我也不期望JS版本的Git能解决这个问题。但是对于小型的仓库,我希望它是足够快的。
为什么不采用Emscripten这样的工具将C实现的Git进行交叉编译,而选择使用JavaScript从无到有的重新实现每一项功能?
我打算对此做进一步的研究,但是从我对这个领域的初步调查来看,我预见到两个问题。首先,Emscripten是一个代码生成器。它会生成非常大量的代码并最终形成一个直接的移植版本,除非你手动地调整大部分代码。其次,查看Git的各种C实现,它们通常是与底层文件系统和网络调用紧密耦合的。这就需要我们对某个基于浏览器版本的Git进行重型定制。因为每个web平台都有其自有的文件存储API,这将需要我为多个web平台手写文件系统的抽象。
目前已经有C,Java和其他语言等多个Git实现,你觉得使用JavaScript实现Git将会面临哪些特别的挑战?
我在使用JavaScript实现加密相关的功能方面相当有经验,所以我不认为这是一个问题。但是需要实现的代码总量之大将会是个问题。我计划把工作重点先放在那些最基本的重要功能上,然后不断完善直到花光我的时间。
为什么现在才发起这个项目?是不是某些特别的HTML5技术使得现今具备了该项目的可行性?
这其中更多的因素与硬件有关。现在越来越多的设备具备了长时间的电池寿命以及较大的屏幕,但是开发体验却非常的糟糕。
你的项目在一天多内就得到了小规模的资助,你打算使用这些即将收到的资金来构建哪些功能?
正如我在拓展目标中所预估的,我希望先实现重要的Git功能。如果有时间,将会实现对多种平台的集成。
为什么会想到使用Kickstarter平台?
这在当时这听起来像是个不错的主意。到目前为止它都进行的很好,尽管在通读了所有Kickstarter的规则后,我仍然感觉到像这种类型的项目勉强能符合他们心中的理想项目。
你是否认为更多的(JavaScript)开源项目应该尝试上Kickstarter进行集资呢?
我现在还不知道,这只是一个实验。我确实很喜欢这种概念,就是在你为某个想法花费几个月的时间实践之前,可以通过创意甄选从而获得支持。我曾经在过去的几个项目中花费了几百个小时的业余时间,但最后却发现社区对他们几乎没什么兴趣。我真的喜欢全职为一些大家想要的而且非常酷的项目而工作。我不知道Kickstarter的这个项目是否可以长期这样进展下去,但是即使不会我也会继续寻找其他适合的点子。
JSGit并不是首个在Kickstarter上成功达到集资目标的JavaScript相关项目。以前类似的项目还包括一本关于异步JavaScript编程的书和测试驱动JavaScript的一个视频系列。不管怎样,JSGit是首个用于生产JavaScript代码库的Kickstarter项目。
该项目开放接受集资至2013年3月30日。Tim希望在接受集资截止日到期后立即开展该项目的工作。
查看英文原文:http://www.infoq.com/news/2013/03/git-in-javascript