JavaScript嵌入式开发:您的下一份工作

22 天前

我们中的很多人都是从网页开发开始编写JavaScript。就算你是一个服务端的开发人员,专注于Node,想必你也是从编写客户端的JavaScript开始的。我们把JavaScript当做一门与DOM结合非常紧密的语言,或者看做一门轻量级的服务端语言。但是我们换个角度思考看看,完全把JavaScript看做一门嵌入式语言:毕竟,它嵌入到了网页中——作为沟通运行时所需的原生数据结构和功能的桥梁。

为什么要嵌入式语言?

脚本语言嵌入到其他软件中的根本原因是什么?比如说有一个很大的C++、C#或者Objective-C写的项目,项目的构建和发布会是一个主要的问题。特定的编程杂活很适合转成脚本语言,一次小的调整,比起重新编译完整的项目,修改脚本会更加有效率。

在游戏开发领域,常常使用Python和Lua来编写脚本。它们被用来编写游戏的接口、业务逻辑,用来加载资源,实现AI等等。基于Unreal游戏引擎的修补社区的部分成功来源于UnrealScript的使用。

绑定

你可能会有这样的疑问:为什么是Python和Lua?原因就是它们使用广泛,并且非常适合作为嵌入式语言。Boost.PythonRasterbar Software就是两个用来做绑定的类库。如果没有与底层原生代码的绑定,就没办法使用脚本语言与之交流,有了绑定才会如此的高效和简单。

Web UI

一种更加简单的绑定,就是使用一个web view组件,在里面运行JavaScript,并通过事件与底层程序进行绑定。有很多移动或桌面程序的大量UI都使用了web view,因为这些UI用HTML实现起来更简单。这种用法要比你想象的多得多。

如果你有大量的UI都是使用HTML编写的,那所使用的JavaScript就开始变得一团糟。像Backbone和AngularJS这样MVC框架就有用武之地了。但是,编写这样的代码包含了一套完整的技能,因此C++/Objective-C开发者需要我们的帮助!

不幸的是,嵌入式的JavaScript运行时并没有理想的那样简单。每种语言都好好多种不同的方式。

.NET

在.NET这块大陆上,有很多项目都致力于在.NET项目中运行JavaScript。fholm/IronJS · GitHub是一个ECMAScript 3.0的实现,基于微软的Dynamic Language RuntimeClearScript - Home支持将多种脚本语言添加到.NET程序中:使用V8来实现对JavaScript的支持——想象下我们可以把Microsoft.ClearScript.V8添加到C#程序中,然后可以写:

engine.Execute("Console.WriteLine(lib.System.DateTime.Now)")

还有一个ECMAScript的运行时,Jurassic - A Javascript Compiler for .NET

C++

通常来看,嵌入V8是潮流,但同时还有基于SpiderMonkey的项目,例如[libjspp -

libjspp is C++ template based wrapper for embedding and extending Javascript engine spidermonkey 1.8.5](https://code.google.com/p/libjspp/)。

Objective-C

苹果公司的Webkit Objective-C编程指南(WebKit Objective-C Programming Guide: Introduction to WebKit Objective-C Programming Guide )中说明了如何从Objective-C中访问JavaScript。

另一种实现方式是嵌入式的JavaScriptCore 。显然,Appcelerator Titanium使用JavaScriptCore来开发iOS项目——参看appcelerator (Team Appcelerator) 路 GitHub

工作机会

我现在受雇于一个特别综合的办公室,我的团队里有Objective-C、C++、C#以及JavaScript工程师。非JavaScript工程师的共识是他们想在他们的项目中嵌入JavaScript:游戏、桌面软件和移动开发工程师都想要。

着很棒,但是最好别忘了,JavaScript并不是擅长所有事情——类型系统对特定的项目并不合适,那些从其他领域转过来的工程师在面对JavaScript的作用域和限制条件难免会感到挫败。JavaScript看上去与C很像,但是并不代表它就是C语言:于是当你在和那些比起JavaScript更熟悉C的工程师工作时,问题就来了。

你想知道别人从其他方面如何看待JavaScript的么?我找到David Rosen的Choosing a scripting language:他质疑JavaScript代码的可读性,因为他不能重载操作符,还想编写可维护的线性代码。

无论如何,看上去大量的JavaScript平台如雨后春笋班冒出来,因此,你应该认真考虑下。如果将来你发现自己在给游戏或者程序编写脚本,没啥大惊小怪的。

原文:DailyJS: Embedded JavaScript: Your Next Career Move

1
推荐阅读