庆云古诗词

庆云古诗词

asm.js 和 Emscripten 入门教程

互联资讯 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】

阿斯美激素药吗,鞍山麻将手机版下载,爱什么就是爱自己,爱什么就是爱自己的作文

【【网址】】/blog/2017/09/asmjs_emscripten.html

作者:?阮一峰

日期:?2017年9月 7日

Web 技术突飞猛进,但是有一个领域一直无法突破 ---- 游戏。

游戏的性能要求非常高,一些大型游戏连 PC 跑起来都很吃力,更不要提在浏览器的沙盒模型里跑了!但是,尽管很困难,许多开发者始终没放弃,希望让浏览器运行 3D 游戏。

2012年,Mozilla 的工程师?Alon Zakai?在研究 LLVM 编译器时突发奇想:许多 3D 游戏都是用 C / C++ 语言写的,如果能将 C / C++ 语言编译成 JavaScript 代码,它们不就能在浏览器里运行了吗?众所周知,JavaScript 的基本语法与 C 语言高度相似。

于是,他开始研究怎么才能实现这个目标,为此专门做了一个编译器项目?【【淘密令】】。这个编译器可以将 C / C++ 代码编译成 JS 代码,但不是普通的 JS,而是一种叫做?asm.js?的 JavaScript 变体。

本文就将介绍 asm.js 和 【【淘密令】】 的基本用法,介绍如何将 C / C++ 转成 JS。

C / C++ 编译成 JS 有两个最大的困难。

  • C / C++ 是静态类型语言,而 JS 是动态类型语言。
  • C / C++ 是手动内存管理,而 JS 依靠垃圾回收机制。

asm.js 就是为了解决这两个问题而设计的:它的变量一律都是静态类型,并且取消垃圾回收机制。除了这两点,它与 JavaScript 并无差异,也就是说,asm.js 是 JavaScript 的一个严格的子集,只能使用后者的一部分语法。

一旦 JavaScript 引擎发现运行的是 asm.js,就知道这是经过优化的代码,可以跳过语法分析这一步,直接转成汇编语言。另外,浏览器还会调用 WebGL 通过 GPU 执行 asm.js,即 asm.js 的执行引擎与普通的 JavaScript 脚本不同。这些都是 asm.js 运行较快的原因。据称,asm.js 在浏览器里的运行速度,大约是原生代码的50%左右。

下面就依次介绍 asm.js 的两大语法特点。

asm.js 只提供两种数据类型。

  • 32位带符号整数
  • 64位带符号浮点数

?

其他数据类型,比如字符串、布尔值或者对象,asm.js 一概不提供。它们都是以数值的形式存在,保存在内存中,通过?TypedArray?调用。

如果变量的类型要在运行时确定,asm.js 就要求事先声明类型,并且不得改变,这样就节省了类型判断的时间。

asm.js 的类型声明有固定写法,表示整数,表示浮点数。

上面代码中,变量声明为整数,声明为浮点数。支持 asm.js 的引擎一看到,就知道是整数,然后采用 asm.js 的机制处理。如果引擎不支持 asm.js 也没关系,这段代码照样可以运行,最后得到的还是同样的结果。

再看下面的例子。

上面代码中,写法一是普通的 JavaScript,变量只有在运行时才能知道类型,这样就很慢了,写法二是 asm.js,在声明时就知道是整数,速度就提高了。

函数的参数和返回值,都要用这种方式指定类型。

上面代码中,除了参数和需要声明类型,函数的返回值也需要声明类型。

asm.js 没有垃圾回收机制,所有内存操作都由程序员自己控制。asm.js 通过 TypedArray 直接读写内存。

下面就是直接读写内存的例子。

如果涉及到指针,也是一样处理。

上面的代码编译成 asm.js,就是下面这样。

如果你对 JS 比较了解,可能知道还有一种叫做 WebAssembly 的技术,也能将 C / C++ 转成 JS 引擎可以运行的代码。那么它与 asm.js 有何区别呢?

回答是,两者的功能基本一致,就是转出来的代码不一样:asm.js 是文本,WebAssembly 是二进制字节码,因此运行速度更快、体积更小。从长远来看,WebAssembly 的前景更光明。

但是,这并不意味着 asm.js 肯定会被淘汰,因为它有两个优点:首先,它是文本,人类可读,比较直观;其次,所有浏览器都支持 asm.js,不会有兼容性问题。

虽然 asm.js 可以手写,但是它从来就是编译器的目标语言,要通过编译产生。目前,生成 asm.js 的主要工具是?【【淘密令】】。

?

【【淘密令】】 的底层是 LLVM 编译器,理论上任何可以生成 LLVM IR(【【微信】】tation)的语言,都可以编译生成 asm.js。 但是实际上,【【淘密令】】 几乎只用于将 C / C++ 代码编译生成 asm.js。

?

【【淘密令】】 的安装可以根据官方文档。由于依赖较多,安装起来比较麻烦,我发现更方便的方法是安装 SDK。

你可以按照下面的步骤操作。

注意,最后一行非常重要。每次重新登陆或者新建 Shell 窗口,都要执行一次这行命令。

首先,新建一个最简单的 C++ 程序。

然后,将这个程序转成 asm.js。

上面代码中,命令用于编译源码,默认生成。使用 Node 执行,就会在命令行输出 Hello World。

注意,asm.js 默认自动执行函数。

是 【【淘密令】】 的编译命令。它的用法非常简单。

【【淘密令】】 允许 C / C++ 代码直接调用 JavaScript。

新建一个文件,写入下面的代码。

是一个宏,会调用嵌入的 JavaScript 代码。注意,JavaScript 代码要写在大括号里面。

然后,将这个程序编译成 asm.js。

浏览器打开,就会跳出对话框。

【【淘密令】】 允许 C / C++ 代码与 JavaScript 通信。

新建一个文件,写入下面的代码。

上面代码中,表示 JavaScript 代码返回的是一个整数,它的参数里面的表示第一个参数,表示第二个参数,以此类推。的其他参数会按照顺序,传入 JavaScript 表达式。

然后,将这个程序编译成 asm.js。

浏览器打开网页,会显示。

【【淘密令】】 提供以下宏。

  • EM_ASM:调用 JS 代码,没有参数,也没有返回值。
  • EMASMARGS:调用 JS 代码,可以有任意个参数,但是没有返回值。
  • EMASMINT:调用 JS 代码,可以有任意个参数,返回一个整数。
  • EMASMDOUBLE:调用 JS 代码,可以有任意个参数,返回一个双精度浮点数。
  • EMASMINT_V:调用 JS 代码,没有参数,返回一个整数。
  • EMASMDOUBLE_V:调用 JS 代码,没有参数,返回一个双精度浮点数。

下面是一个的例子。新建文件,写入下面的代码。

上面代码中,我们将一个字符串传入 JS 代码。由于没有返回值,所以使用。另外,我们都知道,在 C / C++ 里面,字符串是一个字符数组,所以要调用方法将字符数组转成 JS 的字符串。

接着,将这个程序转成 asm.js。

浏览器打开,会跳出对话框"【【淘密令】】++!"。

JS 代码也可以调用 C / C++ 代码。新建一个文件,写入下面的代码。

上面代码中,执行 JS 代码,里面有一个 C 语言函数。这个函数必须放在代码块之中定义,而且 JS 代码还要用方法引入这个函数。

接受三个参数,含义如下。

  • C 函数的名称,放在引号之中。
  • C 函数返回值的类型。如果没有返回值,可以把类型写成。
  • 函数参数类型的数组。

除了,还有一个方法,可以在 JS 代码之中调用 C 函数。

回到前面的示例,现在将编译成 asm.js。

注意,编译命令里面要用参数给出输出的函数名数组,而且函数名前面加下划线。本例只输出两个 C 函数,所以要写成。

浏览器打开,就会看到弹出的对话框里面显示下面的内容。

另一种情况是输出 C 函数,供网页里面的 JavaScript 脚本调用。 新建一个文件,写入下面的代码。

上面代码中,是一个 C 函数,放在代码块里面,就可以对外输出。

然后,编译这个函数。

上面代码中,参数告诉编译器,代码里面需要输出的函数名。函数名前面要加下划线。

接着,写一个网页,加载刚刚生成的。

浏览器打开这个网页,就可以看到了。

如果执行环境不是浏览器,而是 Node,那么调用 C 函数就更方便了。新建一个文件,写入下面的代码。

然后,将这个脚本编译成 asm.js。

接着,写一个 Node 脚本。

上面代码中,Node 脚本调用 C 函数有两种方法,一种是使用下划线函数名调用,另一种使用方法调用。

运行这个脚本,就可以看到命令行的输出。

asm.js 不仅能让浏览器运行?3D 游戏,还可以运行各种服务器软件,比如?Lua、Ruby?和?SQLite。 这意味着很多工具和算法,都可以使用现成的代码,不用重新写一遍。

另外,由于 asm.js 的运行速度较快,所以一些计算密集型的操作(比如计算 Hash)可以使用 C / C++ 实现,再在 JS 中调用它们。

真实的转码实例可以看一下?gzlib?的编译,参考它的?Makefile?怎么写。

  • asm.js, by Wikipedia
  • 【【淘密令】】 & asm.js: C++'s role in the modern web, by Alon Zakai
  • 【【淘密令】】 Tutorial, by 【【淘密令】】
  • Asm.js: The Ja【【微信】】t, by John Resig
  • An Introduction to Web De【【微信】】ten, by Charles Ofria
  • Interacting with code, by 【【淘密令】】
  • WebAssembly: A New Hope, by Philipp Spiess and James Swift
  • Understanding asm.js, by Afshin Mehrabani

(完)

  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 发表日期:?2017年9月 7日

官方教程来了,小程序的云开发

Vue 源码解读,0元领取

  • 2020.01.26:?Deno 运行时入门教程:Node.js 的替代品

    这几天假期,我学习了一下 Deno。它是 Node.js 的替代品。有了它,将来可能就不需要 Node.js 了。

  • 2019.09.01:?React Hooks 入门教程

    React 是主流的前端框架,v16.8 版本引入了全新的 API,叫做 React Hooks,颠覆了以前的用法。

  • 2019.08.06:?Web Components 入门实例教程

    组件是前端的发展方向,现在流行的 React 和 Vue 都是组件框架。

  • 2019.04.15:?如何用网页脚本追踪用户

    本文介绍如何编写 JavaScript 脚本,将用户数据发回服务器。


chatgpt能自动升级到chatgpt-4吗 chat gpt网站如何开始对话

chatgpt,chatgpt国内能用吗,chatgpt是什么意思,chatgpt怎么注册

ChatGPT的产品名称已确定为“文心一言”,英文名为ERNIEBot百度公司通过官方渠道回应了关于推出人工智能聊天机器人的传闻,类ChatGPT的产品名称已确定为“文心一言”,英文名为ERNIEBot,预计今年三月完成测试并开放使用据悉;ChatGPT对话生成技术是一种机器学习技术,可以根据输入的文本,自动生成高质量的文本输出,它能够模仿人类的对话行为,使机器能够与人类进行自然的对话ChatGPT技术的出现,确实会对底层程序员的就业有一定的影响由于它;chatgpt手机版进去没有聊天框 ChatGPT手机版没有聊天框,因为它是一款聊天机器人软件,可以帮助用户解决问题,提供有用的信息它可以通过文本消息语音消息或图片消息来与用户交流,并且可以根据用户的输入自动生成回复chat;Chatgpt没有全网置顶,但是它可以应用于各种网站和平台中,例如智能客服智能聊天机器人在线教育人机问答等无论是电商金融医疗教育娱乐等领域,Chatgpt都可以根据定制需求做出相应的智能应用,实现高效智能化的;Chargpt是OpenAI开发的一个大型预训练语言模型通俗一点说就是一个聊天机器人它是GPT3模型的变体,ChatGPT经过了训练,可以根据接收到的输入生成类似人类的文本响应,具有更自然更多样化的特点用户可以向它提出无数问题;chatjpt是什么 ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT35架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是;ChatGPT的英文全名是Chat Generati【【微信】】 Chat表示“聊天”,GPT是Generati【【微信】】的缩写,这几个词表示“预训练语言模型”所以,这个ChatGPT其实是一个会跟你对话的人工智能工具;ChatGPT是 OpenAI 于 11 月 30 日推出的一款聊天机器人,可以免费测试,能根据用户的提示,模仿类似人类的对话ChatGPT不仅会聊天,写得了代码,修复得了bug,还能帮你写工作周报写小说进行考试答题,绘画,看病,甚至。

caht gpt全称Chat Generati【【微信】】 1 chatGPT介绍 chatGPT是由OpenAI开发的一个人工智能聊天机器人程序,于2022年11月推出该程序使用基于GPT35架构的大型语言模型并通过强化学习进行训练ChatGPT;edge怎么用chat方法如下1打开edge浏览器2点击右上角写作助手3edge上面的chatgpt是作为一个插件进行使用的4用户只需将自己想要的内容进行描述,ai很快就可以帮助用户生成,甚至进行排版5不仅可以直接选择;ChatGPT是OpenAI开发的大型预训练语言模型这是GPT3模型的一个变体,经过训练可以在对话中生成类似人类的文本响应ChatGPT背后的算法基于Transformer架构,这是一种使用自注意力机制处理输入数据的深度神经网络Transformer架构。

你可以在网页上访问Chatgpt并开始与它交流这个系统不需要下载,只需要有浏览器和一个网络连接即可使用Chatgpt可以自动回答你的问题,并根据你的输入进行回复无需担心语言问题,因为Chatgpt支持多种语言,包括中文尝试与;Chatgpt是OpenAI开发的一个大型预训练语言模型,OpenAI是一个研发机构,于2015年由硅谷投资者山姆・阿尔特曼和亿万富翁埃隆・马斯克作为非营利机构成立,并吸引了包括风险资本家皮特・蒂尔在内的其他几个人的投资2019年该集团。

要访问Chatgpt对话系统,您可以通过以下任一方式1在网页浏览器中输入【【微信】】,进入Chatgpt的官方网站,然后点击网页上的quot开始对话quot按钮2进入【【微信】】,搜索并启动【【微信】】机器人,然后就可以开始与Chat;3 登录成功后,在右上角会看到一个“我的学习”按钮,点击它4 进入“我的学习”页面后,您会看到一个叫做“我的消息”的选项卡,点击它5 在“我的消息”页面中,您可以看到Chatgpt的聊天页面,并可以直接与Ch。

GPT是一种基于人工智能的自然语言处理技术,目前在国际上得到了广泛的应用和关注在国内,需要使用GPT技术的话,可以选择使用一些开源的工具和平台来完成例如,可以使用开源的DeepSpeed框架,它支持GPT的多卡训练和优化此外;如果您遇到了遗忘Chatgpt账户的密码,可以尝试一下方法解决1尝试使用记录在册的备用电子邮件地址再次登录Chatgpt账户2重置密码点击Chatgpt登录页面下方的“忘记密码”链接,按照提示向Chatgpt提供您的电子邮件地址,Chat;另外,这几天白天在使用OpenAI ChatGPT网页版时,很多次出现网站拥堵情况因此,后续有必要调用API来做些事情OpenAI GPT3 API 包括以下好处高质量的文本生成 GPT3 是一种先进的语言模型,能够生成高质量和连贯的文本。