cargo

[Rust] Setup Rust for WebAssembly

天涯浪子 提交于 2020-11-03 14:03:39
In order to setup a project we need to install the nightly build of Rust and add the WebAssembly target. For an improved workflow we also install the CLI tools wasm-pack and wasm-gc. Install: brew install rustup Run: rustup-init Setup nightly toolchain as default. rustup default nightly Then we add the target wasm32-unknown-unknown rustup target add wasm32-unknown-unknown In addition, we use cargo , Rust's package manager, to install wasm-pack cargo install wasm-pack This tool seeks to be the one-stop shop for building and working with Rust-generated WebAssembly that you would like to interop

Qt for MCUs 1.5 发布啦!改进API,增强其可用性和稳定性

女生的网名这么多〃 提交于 2020-11-02 14:43:37
像C/C++和其他本地语言一样,Rust包括对条件编译的支持。指示编译器在编译过程中是包含还是忽略一段代码的最常见方法是添加一个带有所需条件的cfg属性。例如,您可以使用这种机制来检查目标架构,并根据操作系统在编译时切换代码块。 IntelliJ Rust会检测您项目中的条件禁用块,并将其从代码库中排除。这意味着名称解析和分析会忽略这些块,所以你不会在它们里面得到错误和警告,而且在自动完成中不会有该代码的项目出现在其他地方。另外,该插件在编辑器中把禁用的块灰化了。 这个级别的cfg支持在插件中已经有很长一段时间了,但是缺少了一些东西。条件选项可以包含Cargo功能。以前,IntelliJ Rust只支持项目依赖中声明的特性,但现在你的工作空间特性也被支持了。 我们已经实现了一个智能UI,使您的工作与特性更加透明:您可以直接在Cargo.toml文件中启用或禁用工作空间的任何特定特性。名称解析和代码洞察力会考虑到这一点。 让我们详细研究一下IntelliJ Rust如何处理Cargo特性,当它们在不同级别的依赖关系中使用时。 Library 最简单的情况是,您需要从库中排除功能,或者仅在构建中包括其中的一些功能。 首先,让我们添加tokio板条箱并使用以下full选项启用其所有功能: tokio = { version = "0.3.0", features = ["full"] }

Rust: Bindgen绑定CTP C++原生接口尝试

删除回忆录丶 提交于 2020-10-06 11:34:44
一、 环境准备: WSL2 + Bindgen + CTP C ++ 接口 for linux Bindgen : https : / / github . com / rust - lang / rust - bindgen CTP for linux 说明一下,我在windows环境下,同样的方法,一直报libclang没有找到,至今也没有解决,看了github bindgen issues上提的问题,类似的问题不少。试了不少方法,终于放弃,转WSL2. 二、构建wrapper.hpp 文件 wrapper.hpp是告诉bindgen,我这些都需要帮我翻译一下。东西在这呢。这个文件可以放在src目录下。 # include "../ctp_sdk/ThostFtdcMdApi.h" # include "../ctp_sdk/ThostFtdcTraderApi.h" # include "../ctp_sdk/ThostFtdcUserApiStruct.h" # include "../ctp_sdk/ThostFtdcUserApiDataType.h" 三、倒腾build.rs文件 build.rs文件,放在工程目录的根目录下,我这儿的工程名是“rust_new_test”,build.rs放在和Cargo.toml同一目录级下,并列就好。 use std :: env

基于腾讯云的 Rust 和 WebAssembly 函数即服务

可紊 提交于 2020-09-30 17:15:43
腾讯云云函数 (SCF) 已经支持十多种编程语言和运行时框架。腾讯云最近发布的 SCF custom runtime(自定义运行时)更进一步 —— SCF 现在可以支持用任何编程语言编写的函数。 原文首发于 Serverless 中文网 本文将介绍如何在云函数 SCF 中运行用 Rust 编写的 WebAssembly 函数。 我们先介绍一些基本概念,然后回顾一个完整但简单的 hello world 示例,部署您的第一个 WebAssembly 无服务器函数。最后,我们将用一个机器学习即服务 (MLaaS) 示例来做一些有用的事情。该示例接受数据并以 SVG 格式返回拟合模型和可视化。 这是本教程结束时你将创建的 最终应用 。它完全是「无服务器」的,只有使用时会产生成本。 HTML 和 JavaScript UI 可以托管在任何计算机上,包括笔记本电脑上。在腾讯云 Serverless 上的后端函数执行机器学习和 SVG 绘图。 为什么选择 WebAssembly 和 Rust 传统的无服务器函数基于重量级的框架。开发者必须在特定的应用框架中编写函数,比如 Node.js 中的 JavaScript 或 Python Boto。 腾讯云 SCF Custom Runtime 打破了这种模式,允许开发者用任何语言编写无服务器函数。 为了演示这个优势,本文提供了基于 Bash

abp(net core)+easyui+efcore实现仓储管理系统——出库管理之一(四十九)

假装没事ソ 提交于 2020-08-12 01:21:42
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三) abp(net core)+easyui+efcore实现仓储管理系统——定义仓储并实现 (四) abp(net core)+easyui+efcore实现仓储管理系统——创建应用服务(五) abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之控制器(六) abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之列表视图(七) abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之增删改视图(八) abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之菜单与测试(九) abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十一) abp(net core)+easyui+efcore实现仓储管理系统—

对比 rust 几种数据结构占用内存和插入速度,插入一亿条数据。

老子叫甜甜 提交于 2020-08-11 04:02:31
硬件:mbp 2019 编译参数:cargo run --release 插入 i32 条数: 100,000,000 结论 HashMap<i32,i32> 1.3G, 13s BTreeMap<i32,i32> 1.98G, 10s HashSet<i32> 650M, 13s Vec<i32> 381M, 0.27s 可以看出,Vec<i32> 没有额外的消耗,HashSet, HashMap, BTreeMap 额外消耗也很小。 代码 use std::convert::TryInto; use std::collections::{HashMap, BTreeMap, HashSet}; fn main() { // let mut a = HashMap::new(); // 1.3G, 13s // let mut a = BTreeMap::new(); // 1.98G, 10s // let mut a = HashSet::new(); // 650M, 13s let mut a = Vec::new(); // 381M, 0.27s // 1亿 条 let start = std::time::Instant::now(); for i in 0..100_000_000 { a.insert(i); // a.insert(i, i); }

Rust async/.await内幕

时光总嘲笑我的痴心妄想 提交于 2020-08-09 16:35:37
在这个教程中我们将详细分析rust异步代码async/.await的内部运行机制。我们将使用async-std库而不是tokio,因为这是第一个支持async/.await语法的rust库。async/.await原理解析教程分为两部分,这是第一部分。 区块链开发教程链接: 以太坊 | 比特币 | EOS | Tendermint | Hyperledger Fabric | Omni/USDT | Ripple 0、准备Rust练习环境 首先让我们先创建一个Cargo项目: ~$ cargo new --bin sleepus-interruptus 如果你期望和教程使用的编译器保持一致,可以添加一个内容为1.39.0的rust-toolchain文件。 在继续下面的内容之前,先运行 cargo run 确保环境没有问题。 1、一个交替显示的Rust程序 我们要写一个简单的程序,它可以显示10次Sleepus消息,每次间隔0.5秒;同时显示5次Interruptus消息,每次间隔1秒。下面是相当简单的rust实现代码: use std::thread::{sleep}; use std::time::Duration; fn sleepus() { for i in 1..=10 { println!("Sleepus {}", i); sleep(Duration::from

Rust:mod、crate、super、self、pub use等模块系统用法梳理

删除回忆录丶 提交于 2020-08-06 07:55:05
在Rust模块系统中,有诸多的概念和用法,不容易搞清楚,理一下,很有必要。 cargo是从包的根目录开始找相应的文件的。 一、packages、crates、modules packages: 通过cargo new 创建; crates: 通过cargo new --lib 创建。有根包和子包。即一个根包下可以包含多个子包。 modules: 通过关键字mod加模块定义 二、各种用法 src下有同个级:兄弟、父、子三个层级。 1、mod 往往是引入与当前文件同级的文件夹下(兄弟模块下)的文件。 2、crate 代表引用当前文件同级的文件。为同级文件时,意义和self相同。但如果是同级文件夹,不能混用。 3、super super:代表当前文件的上一级目录(父模块) 。super后面可以直接接函数。也可以接“*”,表示所有函数。 4、self 见crate 5、pub use 三、桥 在src下,往往有一个子目录,比如名字叫core. 里面还有两个文件,read.rs,write.rs.此时,需要有一个文件把这两个文件串起来。 此时,可以在core目录同级,建一个core.rs文件,把core目录下的两个文件串起来,对外可见。 我称这种与目录相同的rs文件为桥(个人定义,不规范)文件。 比如: pub mod a; pub mod c; pub use a::*; //不能省

C++11并行编程-条件变量(condition_variable)详细说明

。_饼干妹妹 提交于 2020-05-06 17:58:49
<condition_variable > 头文件主要包含有类和函数相关的条件变量。 包括相关类 std::condition_variable 和 std::condition_variable_any ,还有枚举类型 std::cv_status 。另外还包含函数 std::notify_all_at_thread_exit() ,以下分别介绍一下以上几种类型。 std::condition_variable 类介绍 std::condition_variable 是条件变量,很多其它有关条件变量的定义參考维基百科。 Linux 下使用 Pthread 库中的 pthread_cond_*() 函数提供了与条件变量相关的功能, Windows 则參考 MSDN 。 当 std::condition_variable 对象的某个 wait 函数被调用的时候,它使用 std::unique_lock (通过 std::mutex ) 来锁住当前线程。 当前线程会一直被堵塞。直到另外一个线程在同样的 std::condition_variable 对象上调用了 notification 函数来唤醒当前线程。 std::condition_variable 对象通常使用 std::unique_lock<std::mutex> 来等待,假设须要使用另外的 lockable 类型

基于 HTML5 WebGL 的 3D 水泥工厂生产线

喜你入骨 提交于 2020-05-05 13:53:54
前言 今天为大家带来一个很酷的作品,依然运用了强大的 HT for Web 的 3D 图形组件,动作流畅性能好,大家可以先来欣赏一下效果! 点我进入! 整体风格为科技金属风,制作精良,由于上传 gif 大小有限制,所以务必打开链接查看细节演示! 代码实现 做完场景后,首先我们要对它进行一些基本的设置,如: // 设置 camera 的位置 gv.setEye([457, 9047, 434 ]) // 设置中心点位置 gv.setCenter([-4, -1, 0 ]) // 设置远端距离 gv.setFar(500000) 设置后可以让场景在反序列化后能够显示出我们想要的展示角度,设置远端位置能够避免造成场景显示不完全等问题。 为了使其看起来有一个进入的过程,我们给场景增加一个入场的动画来增色: ht.Default.startAnim({ duration: 3000 , // 动画周期毫秒数,默认采用`ht.Default.animDuration` action: function (v) { // action函数必须提供,实现动画过程中的属性变化。 gv.setEye([gv.getEye()[ 0] + (1117 - gv.getEye()[0]) * (v / 5), gv.getEye()[1] + (450 - gv.getEye()[1]) * (v / 5