JavaScript 很少为人所知的玩法

01 FEBRUARY 2017 on  物联网,  JavaScript

Stack OverFlow 的联合创始人杰夫·阿特伍德(Jeff Atwood)曾提出著名的“Atwood定律”,即:

Any application that can be written in JavaScript, will eventually be written in JavaScript.

任何能够用 JavaScript 实现的应用,最终都必将用 JavaScript 实现。

毫无疑问,JavaScript 已然成为当下最流行的编程语言之一,这点已经不需要争论了,不服的话前后端乃至全栈工程师肯定跟你急。最近,hackereart 就发表过一篇博文,文中描述了2016年主流编程语言的使用情况:

他们因此预测今年最流行的语言将会是:

  • JavaScript
  • Java
  • Python
  • PHP
  • R
  • Matlab
  • Arduino
  • Swift

作为编程语言界的当红辣子鸡,JavaScript 已将其触角延伸到了很多领域,变换出了很多新奇的玩法,下面的内容我试图探索一些 JavaScript 很少为人所知的玩法:

Espruino

Espruino 是一个专门为微控制器(MCU)设计的 JavaScript 解释器,最低资源开销 128KB Flash & 8KB RAM,使用 MPL-2.0 协议开源。

作者 Gordon Williams 简直就是个全才,最近还设计了一款硬件 Puck.js 来支持 Espruino。

在这位巨人的肩膀上,我做了一些修改,让其能够兼容我自己开发的硬件,修改后的代码我已经提交 GitHub 了,感兴趣的小伙伴可以克隆下来玩玩。

$ git clone https://github.com/makerdiary/Espruino.git
$ cd Espruino# 将 YS-Beacon 连接至 PC
$ YS_BEACON=1 RELEASE=1 make flash# 终端跳出一大堆字符,板子上的蓝色灯闪烁,最后一切轻松搞定~
...
[====================] 100%
DEBUG:root:reset stop on Reset
INFO:root:Programmed 446464 bytes (109 pages) at 14.56 kB/s
DEBUG:root:uninit board <pyOCD.board.mbed_board.MbedBoard object at 0x1025e8a90>
DEBUG:root:closing interface

Espruino 还有一个配套的开发工具 Espruino Web IDE,可以用来编辑代码、下载程序,甚至可用于图形化编程。下面是简单实现 LED 闪烁的代码,有没有一种似曾相识的感觉:

var on = false;
setInterval(function() {  on = !on;LED1.write(on);
}, 500);

有意思的是,Espruino 硬件上跑着 JavaScript 的解释器,上传给它的 JavaScript 代码只是保存在 RAM 中,掉电就没有了,这点跟浏览器的做法居然如出一辙,也正好体现了其具备动态解析的特点。

JerryScript

如果说 Espruino 有点玩具化,那 JerryScript 应该说就比较产品化了,而且 JerryScript 的资源开销也不高,RAM 可小于 64KB,ROM 可小于 200KB。

一说到 JerryScript 就一定离不开 IoT.js 和三星,他们的“三角关系”是这样的:

IoT.js 是一个使用 JavaScript 编写的物联网应用平台;JerryScript 是一个适用于嵌入式设备的小型 JavaScript 引擎;而三星开源了 IoT.js 和 JerryScript。

整个内部架构如下:

下面这一小段代码可以显示 JerryScript 的基本工作流程:初始化引擎 → 解析 JavaScript 代码 → 执行代码 → 结束运行,释放内存。

{jerry_init(JERRY_FLAG_ENABLE_LOG);char script[] = "print ('Hello, World!');";jerry_parse(script, strlen(script));jerry_run();jerry_cleanup();
}

查看 JerryScript 的源码,发现已经能够在一些 RTOS(如 Zephyr、mbed OS 等)上运行了。去年在深圳举行的 mbed Connect Asia 2016 大会上,Jan Jongboom 说他已经将 JerryScript 带到 mbed OS 5 上来了,还介绍了几个简单的示例。

既然已经支持 mbed OS 5 了,那事情就好办多了,可以轻松支援自己开发的硬件,至于开发环境的搭建可以参考 README,不难实现。

$ git clone https://github.com/YS-Beacon/mbed-js-example.git$ cd mbed-js-example# 国内的朋友可以使用淘宝镜像安装依赖:cnpm install
$ npm install # 此处 gulp 用于获取 JerryScript 源码
$ gulp# 获取 mbed os 最新源码
$ cd ./build/jerryscript/targets/mbedos5/mbed-os
$ git checkout master
$ git pull# 从我的仓库拉回相关目标硬件配置文件
$ git remote set-url origin https://github.com/makerdiary/mbed-os.git
$ git pull# 指定目标板子,自动编译
$ gulp --target=YS_BEACON

再来看下 JavaScript 所编写应用的源码,是不是有种既陌生又亲切的感觉:

// blink_leds.js
var led = DigitalOut(LED1);var blink = function() {  led.write(led.read() ? 0 : 1);print("blink! LED is now " + led.read());
};module.exports = blink;// main.js
var blink = require('./blink_leds');setInterval(function() {  blink();
}, 1000);

将编译好的 mbedos5.hex 文件下载到目标板,看看是不是你想要的结果:

Blockly

如果你对编程语言或命令行窗口闪烁的光标感到恐惧的话,Blockly 或许是拯救你的利器,让你变得好玩有趣。Blockly 是 Google 开发并开源的一个 JavaScript 库,用于实现图形化编程,只需拖动一些表示变量、表达式、循环等含义的图形块,组合在一起就可以完成编程,是不是很酷?

实际上,Blockly 只做一件事:可视化编辑,生成代码。而代码背后的行为,Blockly 是不管的,这就留给开发者们非常大的想象空间,例如 Ozobot 就开发了一个智能机器人玩具,玩家可以使用 Blockly 编程机器人的行为:

是不是很好玩?可惜就是没有机器人。不过,你可以先用 Espruino 体验一下 Blockly 的玩法,再一步一步构建你自己的机器人(没错,前面提到的 Espruino 是支持 Blockly 的):

未完待续

是不是还没有玩过瘾?更多好玩的东西,我还在探索中,等我学上手就来分享,感兴趣的朋友可以稍微关注一下。


如无特殊说明,本文版权归本文作者及「创客日记」所有,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

转载请注明:来自「创客日记」https://makerdiary.co/interesting-things-about-javascript/

JavaScript很少为人所知的玩法相关推荐

  1. JavaScript的类型自动转换高级玩法JSFuck

    0 前言 最开始是不小心在微信公众号(程序员大咖)看到一篇JS的高逼格代码,然后通过里面的链接跳转到了JSFuck的wiki,就像顺着迷宫找宝藏的感觉,感叹JS的自动类型转换的牛逼. 1 样例 (!( ...

  2. 本人实操赚钱项目:月入10万的冷门玩法,人人可操作!

    4月1号,愚人节来了,狼来了! 这一天,谎言和承诺会铺天而来,让你分不清真真假假. 我在这里抄录两句话: 我们每天都在愚人,却只敢在愚人节这天说真心话! 如果连愚人节都没人和你表白的话,你就真是没人喜 ...

  3. 白杨SEO:从5118站长工具备案内参发现百度SEO批量建站优化玩法

    前言:这是公众号白杨SEO原创第358篇.为什么想到写这个?本来想写一个SEO工具的,但在用5118备案查询时,发现了一个SEO批量建站站群玩法.它的相关关键词排名还不错,特意拆解分享出来,供参考学习 ...

  4. 异星工厂机器人科技树_异星工厂开局怎么玩 异星工厂开局玩法介绍

    异星工厂1.0版本已经上线了,这个版本的开局相比于之前发生了一些变化,需要玩家自己去建造工厂,获得瓶子还是有些难度的,那么异星工厂开局怎么玩?下面一起来看看吧! 异星工厂开局玩法介绍 因为30瓶工厂需 ...

  5. 陈百强原来这么帅_朱一龙虽然很少玩手机,但居式打字法很有个性,手指飞舞超级帅!...

    文/梧弋柠 朱一龙虽然很少玩手机,但居式打字法十分有个性,手指飞舞超级帅! 印象里的朱一龙先生几乎从来不玩手机,以前不出门的时候曾长达大半年的时间没有更博,现在有了一定的知名度平时也很少上线冒泡,有时 ...

  6. 用Unity制作一个很火的找不同游戏,包括核心玩法与关卡编辑器工具的实现

    玩家们心里都清楚,其实游戏的品类超级多,有些人喜欢玩moba.射击竞技类的,有些人喜欢塔防.策略.回合制类的,而又有些人喜欢经营养成.休闲益智类的.休闲益智类游戏,虽没像moba类游戏的激烈操作带来的 ...

  7. 罗马数字转十进制 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候, 现在看起来简直不能忍受,所以在现代很少使用了。

    /* 罗马数字转十进制古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了.之所以这样,不是因为发明表示法的人的智力的问题 ...

  8. 元气骑士 自建服务器,《元气骑士》新模式“电子空间”,自建地牢很轻松,这是创造玩法...

    遇枪不捡,遇怪就跑,大家好,我是菜鸟熊猫~ 欢迎来到由熊猫君主讲的<元气骑士>大型栏目<元气搞笑日常>的第54期~ 在元气骑士这款游戏当中,因为玩法模式的固定导致了很多的玩家都 ...

  9. 很久很久以前纸牌玩法

    Once Upon ATime 是一款玩家运用带有童话中典型元素的纸牌一起创造故事的游戏.一个玩家作为故事叙述者,运用她手中牌的要素来创造一个故事.她会试图把故事线索引向她手中的结局.其他玩家要努力运 ...

最新文章

  1. 正向代理和反向代理??
  2. echarts 在两点之间画一条线_凭什么?辛辛苦苦画了三个小时,却换来一句“撕了重画”...
  3. ProjectManagement::Redmine备份与恢复
  4. android 添加子view,Android基于Window.ID_ANDROID_CONTENT给定id添加子View
  5. 安卓短信加密_发短信控制车辆!苹果发布ios14,手机可作车钥匙
  6. 在Teams Hackathon上介绍LuckyDraw
  7. DPDK Qos之报文处理流水线
  8. linux之切换用户su(switch user)
  9. Jenkins中集成Gcov代码覆盖率报告
  10. GridView 换行设置
  11. 行为树BT设计与实现
  12. 10 大开源免费的项目管理软件推荐
  13. 检查一个字符串是否为回文 回文:正着念与反着念一样,例如:上海自来水来自海上;要求用户从控制台输入一个email地址,然后获取该email的用户名(@之前的内容)
  14. 游戏角色动画:从入门到商用(一)
  15. 视频号拍摄技巧和制作方法有哪些?
  16. 超清西瓜视频真实视频地址获取方法
  17. linux HID驱动分析
  18. 如何使用web of science查找SCI WOC 号或者EI来查找检索号
  19. 虚拟化服务器里的cpu是什么型号的,VMware虚拟化CPU型号不一样,在集群中如何进行VMotion?...
  20. 南明兵部尚书万元吉后裔在松滋

热门文章

  1. FastDFS分布式文件系统集群安装与配置
  2. 以太网已连接(?)上不了网,或以太网已关闭
  3. 程序猿如何变为创业狗?一位刚融到资的程序员含泪述说
  4. PythonGUI简单学生管理系统
  5. PostgreSql数据库增删改查以及其他基本命令
  6. SNR、BER、Eb/N0之间的区别与联系
  7. Python数据分析案例14——文本计算TF-IDF值和LDA主题模型
  8. 卖股票缴税,卖房避税,马斯克的“阳谋”要结束了
  9. C++入坑系列(五)之函数指针
  10. 联想Y50C加内存条