rust

微软正式开源受 Rust 启发的新编程语言 Verona

放肆的年华 提交于 2020-02-26 13:25:33
  一个月前,微软研究人员 Matthew Parkinson 曾提到: 微软正在开发基于 Rust 的新编程语言 ,该项目被命名为 Verona。现在,微软已将 Verona 正式 开源 。   根据微软给出的介绍,Verona 项目旨在探索有关语言和运行时设计的研究,以实现安全的可扩展内存管理和分区。此次开源的原型仅涵盖内存管理方面。   此外,微软还分享了一些关于 Verona 项目较高级别的研究问题:   这些问题正处在不同研究阶段,并将在以后的论文中供同行评审。   之前我们介绍到,Verona 是基于 Rust 的新语言。但 Rust 并不是激发 Verona 项目灵感的唯一语言,它也借鉴了 Cyclone(一种安全的 C 语言)和 Pony 的概念。   微软还强调, 这只是一个研究项目,不是一项产品, 并且与微软对 C ,C# 和 Rust 的使用没有关系。他们希望 Verona 研究项目可以使其他语言受益,希望将其作为一种 “研究编程语言”,通过开源吸引更多学术合作者以探讨并发所有权的概念。目前, 该项目尚未做好在研究之外的领域使用的准备。 来源: oschina 链接: https://my.oschina.net/u/4436414/blog/3160618

Rust编程基础

时光总嘲笑我的痴心妄想 提交于 2020-02-26 11:14:51
编者注 由于需要一个编写库的语言,要求执行速度非常快,能够完整跨平台使用。由于商业项目对稳定性要求高,则尽量增加稳定性。其中的主要选择为C++20与Rust语言,但是由于C++20的语言特性并未在主流编译器上完整实现,且VC与Gcc等割裂也不是一天两天。则确认学习Rust语言。作为学习重点。至于为什么不选择Go,主要问题是Go的Gc无法控制,导致作为第三方库的运行失控。Dart由于无法创建动态连接库,落选。 Rust Rust介绍 https://www.rust-lang.org/ Rust:一个赋予有所构建可靠有效软件的开发语言。 为什么使用Rust? 性能 - Rust具有非常快的内存效能:没有运行时和垃圾回收,能够为关键性能服务提供支持,能够运行在嵌入式设备,能够轻松和其他语言集成 可靠 - Rust的丰富类型系统和所有权模型保证了内存安全性和线程安全性,并使您能够在编译时消除许多类的错误 生产 - Rust拥有出色的文档,友好的编译器和有用的错误消息,以及一流的工具-集成的软件包管理器和构建工具,具有自动完成和类型检查的智能多编辑器支持,自动格式化程序等 Rust构建 在2018年,Rust社区决定改善一些不同领域的编程体验(请参见2018路线图)。对于这些,您可以找到许多高质量的板条箱和一些很棒的入门指南。 Command Line - 借助Rust强大的生态系统

Rust 隐式类型转换(Coercions)

倾然丶 夕夏残阳落幕 提交于 2020-02-26 09:43:44
Rust 隐式类型转换(Coercions) 类型会被隐式转换以适用特定上下文。这种转换主要集中在生存期和指针,通常是弱化类型。这种转换是目的主要是为提供编码便捷性,多数是无害的。 隐式转换规则 传递性原则: 如果 T1 可以隐式转换为 T2 ,并且 T2 可以隐式转换为 T3 ,那么 T1 可以隐式转换为 T3 弱化指针: &mut T => &T *mut T => *const T &T => *const T &mut T => *mut T 大小无关化:如果 T 实现了 CoerceUnsized<U> ,那么 T 可以隐式转换为 U 解引用:如果 T 解引用到 U (实现 T: Deref<Target = U> ),那么可以通过表达式 &*x 将类型为 &T 的引用 &x 转换为类型为 &U 类型。 所有指针类型(包括智能指针如 Box 和 Rc )都实现了: CoerceUnsized<Pointer<U>> for Pointer<T> where T: Unsize<U> ,就是如果 U 去掉大小这个属性后是类型 T ,那么 T 的所有指针类型都可以隐式转换为 U 的相同指针类型。无大小系统自动实现。包含以下几种情况: [K; n] => [K] K => dyn Trait 如果 K: Trait 如果 T: Usize<U>

2020 年编程语言盘点展望:Java 老兵不死,Kotlin 蓄势待发

ぃ、小莉子 提交于 2020-02-26 04:09:28
在进入新的十年之际,各行各业都在进行盘点与展望。 近期已陆续为大家整理了各大平台、社区针对技术领域作出的预测与盘点。 今天,继续为大家粗译(文末有原文地址,粗译仅供大家前期了解,建议阅读英文原文)O'Reilly 发布的编程语言发展展望 —— 《Where programming languages are headed in 2020》。 该盘点及分析由数位编程专家整理得出,包含了大量他们对于某些经典编程语言以及新兴编程语言的思考以及基于行业的分析。 Python 今年 Python 的比较大的新闻是,Python 之父吉多·范·罗苏姆(Guido van Rossum)正式退休,并将 Python 交给了 Python 指导委员会。到目前为止,这次权力转移并没有出现“阵痛”,正如《Python Crash Course》的作者 Eric Matthes 所认为的那样,这是很正常的,因为“ Guido 在很长一段时间里仍将保持自己在社区中的角色。” 此外,2020 年还将终止对 Python 2.7 的支持,这很可能导致坚持使用 Python 2.7 的人变得很难受。 但不管怎样,Python 仍然是数据科学的首选语言。 对于 Matthes 而言,Python 令人兴奋的一个方面是“来自一个社区的各种有趣且关键的项目已经诞生了,而社区已经如此有意识地建立了这么长时间。”

Can't build a rusqlite transaction inside loop: use of moved value and cannot borrow as mutable more than once at a time

送分小仙女□ 提交于 2020-02-26 03:35:10
问题 In order to speed up insertions into a SQLite DB using rusqlite, I want to build a transaction inside a for loop and only commit every N iterations. The following code compiles but it builds a single transaction and commits it all in one go: use rusqlite::{Connection, Result, NO_PARAMS}; fn main() -> Result<()> { let mut conn = Connection::open_in_memory()?; conn.execute( "CREATE TABLE entry ( id INTEGER PRIMARY KEY, data INTEGER )", NO_PARAMS, )?; let tx = conn.transaction()?; for i in 0..20

Rust语言Actix-web框架连接Redis数据库

和自甴很熟 提交于 2020-02-26 02:34:26
Rust语言Actix-web框架连接Redis数据库 actix-web 2.0 终于发布了,不再是测试版本,基于actor系统再加上异步支持,使得actix-web成为了目前响应速度最快的服务器框架,本来计划使用 deadpool-redis 来写这篇博客,更新了一下actix-web的官方例子,发现actix团队新增加了一个 actix-redis 库,暂且尝鲜。 准备工作 框架 描述 版本号 actix-web rust 基于actor的异步网络库 2.0 actix-rt actix运行时 1.0 redis-async redis异步连接库,通过Tokio框架和Rust future 语法编写 0.6.1 actix-redis redis连接管理工具 0.8.0 actix actix核心库 0.9.0 Cargo.toml [package] name = "cloud_test" version = "0.1.0" authors = ["yuxq"] edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] actix = "0.9.0" actix-web =

RUST actix-web连接有密码的Redis数据库

会有一股神秘感。 提交于 2020-02-26 00:49:46
RUST actix-web连接有密码的Redis数据库 actix-web的example里面,使用了自己的actix-redis,但是我尝试了一下, 并不好用 替换成另一连接池,deadpool-redis 使用到的库 库 版本 deadpool-redis 0.5.2 redis 0.15.1 actix-web 2 actix-rt 1 dotenv 0.15.0 设置环境变量 REDIS_URL=redis://:password@localhost 可以将此链接写入与之形目录同级的 .env 文件中,password替换成自己的密码,localhost替换成自己的链接地址. dotenv库加载环境变量 #[actix_rt::main] async fn main() -> std::io::Result<()> { dotenv().ok(); //加载.env文件 } 如若不使用!!! dotenv可以手动在代码中设置环境变量 #[actix_rt::main] async fn main() -> std::io::Result<()> { std::env::set_var("REDIS_URL", "redis://:password@localhost"); } 配置链接池,并且加载进actix-web HttpServer::new(|| { /

How can I send through a specific network interface?

耗尽温柔 提交于 2020-02-25 04:06:53
问题 I need send messages through different gateways dynamically. How do that and what must be my first step in this direction? On my server I have two connections: one-direct, and secondary over VPN. Default route is direct connection, but i need dynamically change connection to VPN. At current time I try build socket from libc::bind() it's work, but have not expected effect. Changing the outgoing IP is not a solution to define the interface. 回答1: As suggested in a comment we must use SO

Converting jni::sys::JNIEnv to JNINativeInterface defined in ffi

眉间皱痕 提交于 2020-02-25 04:06:30
问题 I am following up on Casting a borrowed reference with a lifetime to a raw pointer in Rust, which solved the wrong problem. Please consider the following code: extern crate jni; extern crate ffi; use jni::JNIEnv; use jni::objects::JClass; use jni::sys::{jint, jlong, jobject}; struct CameraAppEngine { _env: *mut jni::sys::JNIEnv, _width: i32, _height: i32 } impl CameraAppEngine { pub fn new(_env: *mut jni::sys::JNIEnv, _width: i32, _height: i32) -> CameraAppEngine { CameraAppEngine { _env,

How to use std::convert::Into in statements in Rust? [duplicate]

﹥>﹥吖頭↗ 提交于 2020-02-25 02:59:05
问题 This question already has answers here : Using .into() when type inference is impossible (4 answers) Closed last year . I am trying to use into in the following code this way: use std::convert::{From, Into}; struct MyStruct { x: i64, } impl From<i64> for MyStruct { fn from(a: i64) -> Self { Self { x: a } } } impl Into<i64> for MyStruct { fn into(self) -> i64 { self.x } } fn main() { let s = MyStruct::from(5); let b = s.into() == 5; println!("{:?}", b); } It produces an error: error[E0283]: