文章: Moscrif(Mobile SCRipting Framework)技术概览

标签: 文章 moscrif mobile | 发表时间:2012-12-31 17:15 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=10560380f804c7341f042a2b8a03e117

Moscrif是一种针对移动应用程序开发的跨平台解决方案。它让你可以为智能手机、平板电脑和桌面电脑创建本地的应用和游戏。

现在,它已经支持iPhone、iPad、Android智能手机和平板电脑,并且还会不断增加对新设备的支持。不久之后也会支持桌面操作系统,像Windows和Mac OS,这样即便是最古老的学校中的PC用户也可以运行Moscrif应用程序。因为Moscrif让开发者可以只使用一种代码库,所以就不需要为所有需要的移动操作系统迁移应用程序。一旦开发完成,你的应用就会像在本地编写的那样执行和表现。

Moscrif基于强大的JavaScript引擎构建,它让你可以快速开发,同时保持高质量和高性能。你不需要针对每种平台分别使用C、C++、Objective C和Java来编写本地代码。只要了解流行的JavaScript就足够了,其他工作交给Moscrif就好。

收益

使用Moscrif编程只需要一位程序员,他会自动覆盖所有支持的平台。这意味着一位程序员能够在很短的时间内生成更多的应用程序,而不会降低质量。这会在人力资源、资金和时间上都会节省很多,因为和支持多个平台相比,只维护一套代码会节省很多成本。有了当前的支持,你可以接触到80%的移动市场,这让你可以接触到相当多移动用户。

Moscrif可以用于构建交互性的2D游戏,而对业务应用的支持也在日程上了。框架提供了对图形、音频和音乐、网络、加密、本地数据库、访问文件系统、使用传感器的支持,并且带有成熟的2D游戏程序库(Box2D)。

Moscrif SDK包含了独立的集成环境(IDE),不需要像针对Eclipse的Android开发工具那样需要安装额外的框架或者SDK,或者任何第三方的工具。Moscrif让开发者可以专注于开发,而不需要迁移和维护很多分支,这有助于让我们的开发更有效、更有生产力,并且可以部署在所有移动操作系统上。

Moscrif核心

Moscrif包含编译器、解析器、解释器和虚拟机。编译器和解析器都使用C和C++从头编写。编译器会编译输入的源代码,生成比特码。比特码和虚拟机被设计为运行在性能不太高的移动设备上。在发布过程中只会编译一次。虚拟机主要包括带有垃圾回收器的解释器。在Moscrif中没有JIT编译,原因之一是iOS中禁用了可写和可执行的内存区。Moscrif的垃圾回收器使用了停止并复制(stop-and-copy)技术。解释器和虚拟机是针对每种要支持的平台使用C/C++编写的。

用来编码的语言是JavaScript,针对对象编程做了一些修改,并扩展了一些额外的特性,比方说:

      ●    带有继承的类
           class Parent {
                 // 构造程序
                 function this(defaultVal = “default”) {
                         this._prop1 = defaultVal;
                 }
                 // 方法
                 function reset() {
                         this._prop1 = “”;
                 }
                 // 属性
                 property prop1(v) {
                         get { return this._prop1; }
                         set { this._prop1 = v; }
                 }
           }
           class Child : Parent {
                // 你可以重写成员
                function this() {
                         super(“childDefaultVal”);
                         this._prop2 = “test”;
                }
                function reset() {
                         super.reset();
                         this._prop2 = “”;
                }
                // 等等…
           }
      ●    构造器类
           class GameMenu : Scene {
                function this() {
                }
           }
      ●    读/写、只读、只写类属性(getter和setter)
           class Foo {
                function this() {
                         this._prop1 = 123;
                }
                // 读/写属性
                property prop1(v) {
                         get { return this._prop1; }
                         set { this._prop1 = v; }
                }
                // 只读
                property prop2(v) {
                         get return (this._prop1|| “”) + “.postfix”;
                }
                // 只写属性
                property prop3(v) {
                         set {
                               if (v !== null)
                                        this._prop1 = v;
                         }
                }
           }
      ●    Lambda函数
           function doOperation(operation, arg1, arg2) {
              return operation(arg1, arg2);
           }

           // 一般函数
           var add = function(a, b) {
              return a + b;
           }
           console << doOperation(add, 10, 20) << "\n";
           // 输出: 30

           // 匿名lambda
           console << doOperation(function(a, b) { return a - b; }, 100, 10) << "\n";                  
           // 输出: 90

           // lambda函数块
           console << doOperation(:a, b { return a * b; }, 10, 10) << "\n";
           // 输出: 100

           // lambda声明函数块
           console << doOperation(: a, b : a / b, 33, 3) << "\n";
           // 输出: 11

      ●    命名空间
      ●对整数和实数的的支持
      var r1 = 10 / 3;
      console << "type=" << typeof(r1) << ", value=" << r1 << "\n";
      // 输出 type=integer, value=3

      var r2 = 10 % 3;
      console << "type=" << typeof(r2) << ", value=" << r2 << "\n";
      // 输出 type=integer, value=3

      var r3 = 10 / 3.;
      console << "type=" << typeof(r3) << ", value=" << r3 << "\n";
      // 输出 type=integer, value=3

      ●    可选函数参数
           function func(arg, arg2 = "abc", arg3 = 123)
           {
             console << arg << ", " << arg2 << ", " << arg3 << "\n";
           }

           //func();
           // 输出: 错误: 参数数量错误

           func("param1");
           // 输出: param1, abc, 123

           func("param1");
           // 输出: param1, def, 123

           func("param1");
           // 输出: param1, def, 456
      ●    迭代器和装饰器
           // 装饰器 '@returns' —— 对函数返回值的验证
           function @returns(func, return_type)
           {
             return function(params..)
           {
              var rv = func.apply(this,params);
              if( typeof rv != return_type )
                  throw String.printf("expected to return %s but got %s\n", return_type, typeof rv);
              return rv;
            }
           }

           @returns #integer
           function add(a, b)
           {
             return a + b;
           }

           console << add(10, 20) << "\n";
           // 输出: 30

           console << add(10, "20") << "\n";
           // 输出(异常): 期望返回整型但得到了字符串
      ●    其他内容请见   Moscrif Basics

Moscrif使用经过修改的JavaScript,它更方便进行移动开发。之所以选用JavaScript,是因为它非常易于学习,并且大多数开发者(特别是web开发者)已经很熟悉。为了让我们使用先进的OOP方法,他们对JavaScript做出扩展,增加了基本的面向对象特性,像第一层级类(first tier classes)等。

IDE和发布工具

Moscrif SDK还包含了集成开发环境和用于发布本地应用程序安装文件的工具,它可以在各种应用程序市场或者业务环境中上传。我们多次听说过: 你为什么决定开发自定义的IDE? 为什么不使用Eclipse、NetBeans或者Visual Studio呢? 我们认为对很多开发者有很多IDE。很多开发者喜欢Eclipse,但是还有很多喜欢Visual Studio而不喜欢Eclipse,这使得这样的工具很难被所有开发者所接受。我们还认为移动开发应该更快,并被简化,所以我们决定开发一种专注于移动开发的简单IDE。这个IDE的设置面板看起来会是这样:

(点击图像可以放大)

Moscrif的IDE使用.NET和Gtk#从头开发。这让你可以在所有主要的桌面操作系统(Windows、Mac和Linux)上运行这个IDE。在Mac OS和Linux上需要安装Mono。IDE继承了所有基本特性,从创建项目、文本编辑,一直到发布过程。在项目设置之后,发布安装包很简单,不需要安装任何其他开发工具(像Android开发工具),也不需要把项目发送到构建服务器。

发布工具大部分是使用Moscrif编写的,使用了移动平台SDK的一些核心二进制代码。为了成功地把应用程序发布到iOS设备商,需要Mac OS以及Xcode中的Organizer。

发布工具会调用编译器,从而把源代码编译成相应的比特码。除了比特码之外,最终的发布包还会包含额外的应用程序资源,像图像、声音、音乐、文本等,以及虚拟机和解释器的二进制文件。当要把包放在移动商店中的时候,发布工具会创建并签署包含一系列打包文件的单一文件,并把它发布到构建服务器来签名。代码和资源不会发送到服务器,它会保留在开发者的计算机上。只有在开发者想要把应用程序发布到Google play、Apple应用商店、三星应用商店等的时候,才需要这个在Moscrif服务器上签名的过程。

本地类和框架

基础类和设备特性类都是使用C/C++/Objective-c/Java本地编写的。它们被称为“本地类”,但是作为脚本类暴露给了开发者。所以,当开发者创建Sensor类的时候,它实际上是创建并使用本地类Sensor。有以下几种本地的基础和高级类:

  • 类似JavaScript的类(Math、Array、Strings等)
  • 系统、文件系统、流
  • SQLite、Crypto、Web、Facebook
  • 渲染(OpenGL)和高级图形(Paints、Shaders、Vectores等)
  • 媒体、传感器
  • AdMob、iAd、InApp (针对Apple应用商店和Google Play)
  • 基于视图的一系列类,用于应用程序开发(View、ScrollView、TextView等)
  • 等等…

所有这些类都是本地编写的。脚本开发者会像一般的脚本类那样使用它们。它不需要了解低级语言,像C、C++或者Objective-C。本地类是Moscrif脚本编写的类的基础。这组类被叫做框架。例如,Game2D框架是用Moscrif的JavaScript编写的,是用内建的本地类,像Windows(主应用程序窗口)、Bitmap、Canvas、Paint、Shader(用于Sprite类和高级绘图)等等。大多数Game2D类都使用脚本编写。动画、变换、粒子系统完全是是用 Moscrif's脚本编写的。不需要本地开发。

例如: Bitmap是一种本地编写的类。脚本程序员可以像通常那样使用它:

var bitmap = Bitmap.fromFile(“path_to_bitmap”);

框架会使用一系列本地和(或)其他框架类来定义新的和高级的类。例如:

include "lib://core/log.ms"
include "lib://game2d/game.ms"

// 自定义脚本类
class FrameworkSprite
{
  // Bitmap是本地类
  var box = Bitmap.fromFile("app://gfx/sprite.png");
  function this(x, y)
  {
     this._x = x;
     this._y = y;
  }
  function draw(canvas)
  {
     canvas.drawBitmap(box, this._x, this._y);
  }
}
class TestGame : Game
{
  function start()
  {
     super.start();
     this._sprite = new FrameworkSprite(100, 100);
  }
  function draw(canvas)
  {
     super.draw(canvas);
     this._sprite.draw(canvas);
  }
}

// 创建实例并运行游戏
new TestGame().run();

应用程序框架使用了一系列与游戏框架不同的本地类,这个框架目前还处于beta阶段。因为并非所有本地组件都已经实现,所以框架使用皮肤和主题来模拟本地行为。这意味着我们可以拥有看起来像Windows Phone App的应用(Metro UI或者Modern UI),而运行在Android和iOS上。这种方式也非常适合高度商标化的业务应用。

他们计划允许对Moscrif进行扩展,增加自定义的本地编写的类,这意味着开发者有可能会创建自己的本地类。他们将可以扩展预定义的本地类,并(或者)创建新的类。另外,他们也可能会创建完整的本地应用程序或者游戏,只在某些部分使用Moscrif: 例如,创建带有本地UI控件(分别针对Android和苹果的设备)的本地应用,但是把业务逻辑放在脚本中(来支持跨平台)。这会通过NDK(本地开发工具)完成,计划会在不久的将来实现(2013年的第一季度)。NDK还会为脚本程序员提供本地控件,让应用程序的开发集成底层系统,但需要付出跨平台的代价。

关于作者

Jozef Pridavok是Moscrif的CEO,该家公司创建了Moscrif SDK——当前市场上针对移动开发最有效的解决方案。Jozef拥有10年的软件开发经验。在创立Mothiva之前,Jozef创建了叫做Inlogic软件的公司——专注于创建移动应用程序和游戏的开发工作室。

Jozef对移动技术和软件开发都有独到的眼光和极大的热情,相信为智能手机和平板电脑构建软件可以比现在更加吸引人、更简单、更有趣、更享受。

查看英文原文: A Technical Overview of Moscrif – MObile SCRipting Framework

您可能也会喜欢

相关 [文章 moscrif mobile] 推荐:

文章: Moscrif(Mobile SCRipting Framework)技术概览

- - InfoQ cn
Moscrif是一种针对移动应用程序开发的跨平台解决方案. 它让你可以为智能手机、平板电脑和桌面电脑创建本地的应用和游戏. QCon北京2013,架构设计,大数据云计算等十八项专题,1月6日前报名7折. 百度技术沙龙特约观察员火热招募中,2013,因为有你更精彩. QCon北京2013,新增NodeJS、函数式编程、推荐算法等前沿专题.

Weaver Mobile招聘

- HACK21 - 弯曲评论
Weaver Mobile是一家专注于下一代SNS的移动互联网公司. 成立于2011年4月,并获得了业界著名的风险基金的投资和支持. 我们将会在六月开始在北京上地建立研发中心. 诚恳的邀请在Android,iPhone应用系统开发有兴趣,or/and 有经验的朋友加盟. 我们期望您,具备良好的数据结构的基础,具备良好的和至少C语言功底.

Mobile App 将死?!

- - Tech2IPO
日前,Mozilla 产品副总监 Jay Sullivan 称移动应用不久即将成为历史,未来将是移动 Web 应用的天下. 光盘好歹还能当杯垫,可怜 Mobile App,难道就这样一下跌落进历史的垃圾堆. Mozilla 的产品副总监杰 • 沙利文 (Jay Sullivan, 上图) 日前表示,移动终端应用(Mobile App)没有未来,真正有前途的是移动 Web 应用(Mobile Web App).

Moscrif:用JavaScript进行跨平台移动开发

- - InfoQ cn
Moscrif是构建在定制虚拟机上的跨平台移动开发环境. 尽管该平台提供了访问原生设备的功能,但编程语言却是JavaScript的一个定制版本. 据公司联合创始人Michal Habalcik所说,Moscrif已支持iOS、Android、Symbian、Windows Mobile和Bada等平台,而且还将在微软发布API之后,添加对Windows Phone 8的支持.

jQuery Mobile 1.3.0发布

- - InfoQ cn
jQuery基金会发布了旗下的JavaScript和HTML5/CSS框架 jQuery Mobile 1.3.0. 更新主要集中在响应式的web设计并新增了多个移动应用的widget. 响应式web设计(RWD)旨在提供最佳的用户浏览体验,不管使用的是什么设备、什么浏览器. RWD使用CSS媒体查询(media queries)语言在浏览器中动态适配页面布局,而不是在服务端检测用户代理(User Agent).

关注:jQuery Mobile来了!

- sheng - 膘叔
  为了让移动设备也能用上jQuery,jQuery开发团队发布了jQuery移动设备版开发项目jQuery Mobile Project(http://jquerymobile.com). jQuery Mobile不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架.

Mobile Web调试工具Weinre

- - 移动开发 - ITeye博客
现在、将来,用移动设备上网越来越成为主流. 但对于开发者们来说,移动web的调试一直是个难题,前期可以使用模拟器来协助调试,但到了真机调试阶段就让人非常头痛. 而Weinre就是解决这难题的利器.   Weinre的本意是Web Inspector Remote,它是一种远程调试工具. 功能与Firebug、Webkit inspector类似,可以帮助我们即时更改页面元素、样式,调试JS等,下面就简单介绍下如何使用.

Vision Mobile:2001-2010 手机市场 Top 5

- Shanshan - 爱范儿 · Beats of Bits
自从 iPhone 和 Android 问世以来,手机市场便进入了一轮新的变革. 过去一些看似无法撼动的手机行业王者,在新的市场竞争中不断丧失领地,一些曾经 PC 行业的公司则以更加迅捷的反应加入到这场移动互联网的巨变之中. Vision Mobile 盘点了过去 10 年间位居前五位的手机制造厂商,让我们得以更加直观的了解这场变革.

Mobile app视觉传达的魅力

- 青蛙小子  - 所有文章 - UCD大社区
时下移动开放平台众多,苹果、谷歌、微软、诺基亚都有自己的移动开发平台,想让自己的产品在众多的开放平台中留住用户,只靠品牌是不够的,产品用户体验比品牌更重要. 我们可以充分的利用移动设备的特性,运用视觉传达的表现方式,去创造具有优秀的用户体验的app应用软件. 在如今这个智能手机时代,大屏幕高分辨率触摸屏的智能手机在市场上即将呈现普及的趋势.

诺顿发布 Mobile Security Lite 应用

- 乌鸦 - 谷安——谷奥Android专题站
Norton(诺顿)可是在为你的安全担心哟,它可是可以给你带来“安全感”的哟. Symantec(赛门铁克)研究发现“Android 仍比 PC 安全…”,不过安防是免不了得特别是这样一个开放的系统中,于是乎他们发布了这个 Norton Mobile Security Lite 应用,这是一个免费的应用,具备一些基本的功能,包括通过短信远程锁定你的手机,扫描恶意文件和应用并删除它们,它还可以自动下载最新的安全库文件.