写点什么

Moscrif(Mobile SCRipting Framework)技术概览

2012 年 12 月 31 日

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";
// 输出(异常): 期望返回整型但得到了字符串
● 其他内容请见 <a href="http://moscrif.com/doc/basics" target="_blank">Moscrif Basics</a>

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

2012 年 12 月 31 日 03:151727
用户头像

发布了 340 篇内容, 共 111.4 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

云原生如何来进行HTTPS升级

soolaugust

架构 云原生 设计模式

话题讨论 | 当你敲代码累了时,一般喜欢吃点什么补充能量?

InfoQ写作平台官方

加班 写作平台 代码 话题讨论

MySQL复杂where条件分析

程序员历小冰

MySQL

甲方日常4

句子

工作 随笔杂谈 日常

揭开链表的真面目

Java旅途

Java 数据结构 链表

面试必备知识点:悲观锁和乐观锁的那些事儿

鄙人薛某

面试 乐观锁 悲观锁 CAS 并发控制

自己做的 PPT 总被批「缺少干货」?试试先回答这三个问题

Tony Wu

效率工具 方法论 PPT

java安全编码指南之:对象构建

程序那些事

Java 安全 安全编码指南 对象构建

week 12 作业

Geek_2e7dd7

Golang写算法

卒迹

golang 算法

Jenkins持续集成「编译打包、代码检查、单元测试、环境部署、软件测试​」

清菡

jenkins

性能相关 磁盘I/O子系统

Linuxer

SpreadJS 纯前端表格控件应用案例:表格数据管理平台

Geek_Willie

区块链usdt支付系统开发,承兑支付跑分系统搭建

WX13823153201

区块链usdt支付系统开发

挽救你的视频号:能够把PPT转换成视频,把备注转换成语音的开源项目

陈磊@Criss

Cassandra Gossip协议的二三事儿

华为云开发者社区

源码 三次握手 开发者 Cassandra Gossip协议

你也许还不懂静态方法和实例方法

架构师修行之路

oeasy教您玩转linux-010110内容回顾

o

DockerHub 镜像仓库的使用

哈喽沃德先生

Docker 容器 微服务 镜像 容器技术

C语言内存泄露很严重,如何应对?

华为云开发者社区

c 内存泄露 内存 代码 函数

SpreadJS 纯前端表格控件应用案例:MHT-CP数据填报采集平台

Geek_Willie

week 12 学习总结

Geek_2e7dd7

新时代背景下的Java语法特性

高翔龙

Java java 14 java 14 新特性 Java 分布式

图解Janusgraph系列-分布式id生成策略分析

洋仔聊编程

分布式 分布式系统 janusgraph 图数据库

anyRTC Native 4.1.0.1与Web SDK 4.0.11上线

anyRTC开发者

学习 WebRTC 语音 直播 sdk

MAC系统初始化

焦振清

macos 重装系统

产品经理的架构思维

吴世亮

架构 产品经理 电商

Keepass+Synology 打造私人密码管理器

zj坚果

1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知

YourBatman

Hibernate-Validator Bean Validation 数据校验 JSR380

拖延症竟然是自己给自己的一种奖励?如何干掉它?

非著名程序员

个人成长 拖延症 番茄土豆工作法

SpreadJS 纯前端表格控件应用案例:雨诺订单管理系统(雨诺OMS)

Geek_Willie

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

Moscrif(Mobile SCRipting Framework)技术概览-InfoQ