V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
BlockBlockBlock
V2EX  ›  JavaScript

小程序不能 eval?能动态执行代码?

  •  2
     
  •   BlockBlockBlock · 2018-02-25 02:24:02 +08:00 · 9508 次点击
    这是一个创建于 2498 天前的主题,其中的信息可能已经有所发展或是发生改变。

    === 不存在的!===

    那拿 JavaScript 写一个 JavaScript 解释器不就完了嘛?惊不惊喜?意不意外?

    代码传送门 -> https://github.com/bramblex/jsjs

    未压缩的代码总共也就 170 K,压缩后大小估计能减到一半以下,远远超不过小程序的 1 M 限制。目前实现了除了 label 和 with 以外所有 es5 语法。

    唯一的问题大概是效率低 /内存占用高了,但是就更个业务代码,效率根本不是问题。

    第二个版本准备设计一个 IR 来减轻前端的解析执行压力、提高效率,同时也方便实现协程( generator / async await )

    所以,鹅厂的小伙伴,有本事把字符串处理的函数全封了,然后再把 ajax 全封了呀~

    不能封?封了就废了?那你能奈我何?[滑稽]

    4 条回复    2020-10-08 05:03:00 +08:00
    whileFalse
        1
    whileFalse  
       2018-02-25 09:33:41 +08:00
    卧槽,这真是……只能点赞了。
    whileFalse
        2
    whileFalse  
       2018-02-25 09:35:47 +08:00
    不过模拟器里面的代码和主代码的变量是隔离的吧。
    zjcqoo
        3
    zjcqoo  
       2018-03-05 12:55:40 +08:00
    年前我也写了个类似的,可以用在小游戏里动态执行 bytecode。

    当然主要出于性能优化设计,用了不少奇技淫巧,性能损失控制在一个数量级内(简单的算法甚至和原生 JS 差不多快~~)

    下次有机会分享下。
    life4s
        4
    life4s  
       2020-10-08 05:03:00 +08:00
    好牛逼呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2777 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:41 · PVG 14:41 · LAX 22:41 · JFK 01:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.