rust

Rust语言在2017年的发力点

给你一囗甜甜゛ 提交于 2020-03-02 18:32:02
Rust核心团队已经确定了 Rust的路线图 提案,旨在确定语言在一年内的位置。部分基于2016年Rust用户进行的 调查结果 ,它优先改善Rust的生产力,而不牺牲速度和可靠性。 具体来说,2016年的调查显示了Rush采用的一些障碍,例如它的学习曲线,缺乏库和IDE,对语言“成熟度”和编译器性能的关注。拟议的2017年路线图通过提供详细的改进方法来解决所有这些问题。 学习曲线 Rust的学习曲线在2016年调查的4个受访者中被提及,它部分与Rust的还没有主流内存管理模型,基于所有权的概念有关。 Rust团队将尝试制定的策略包括改进文档, 语言诊断 和 功能 以及工具。 工具链 在工具方面,Rust团队希望改进 编码-编译-调试 周期并提供一个IDE。已经做了一些工作来改进编辑 - 编译 - 调试周期,即通过引入中级IR( MIR )来减少Rust的表面,并且为类型检查和翻译以及增量编译提供更简单的表示最近已达到alpha状态。此外,Rust团队将尝试在当前调试版本(即“运行太慢”)和发布版本(“构建太慢”)之间取得更好的平衡。 Rust的生态系统 Rust的库的生态系统的成熟度是提高生产力的另一个重点。这有两方面:一方面,提供发现高质量的creates的方法,包括信号质量指标的徽章,更好地支持持续集成,在选定的creates上执行API审查等。另一方面

Rust 编译模型之殇

妖精的绣舞 提交于 2020-03-02 18:03:46
作者介绍: Brian Anderson 是 Rust 编程语言及其姊妹项目 Servo Web 浏览器的共同创始人之一。他目前在 PingCAP 担任高级数据库工程师。 感谢 Rust 中文社区翻译小组对本文翻译及审校上的贡献: 翻译:张汉东、黄珏珅 审校 :吴聪 Rust 编译缓慢的根由在于语言的设计。 我的意思并非是此乃 Rust 语言的 设计目标 。正如语言设计者们相互争论时经常说的那样,编程语言的设计总是充满了各种权衡。其中最主要的权衡就是: 运行时性能 和 编译时性能 。而 Rust 团队几乎总是选择运行时而非编译时。 因此,Rust 编译时间很慢。这有点让人恼火,因为 Rust 在其他方面的表现都非常好,唯独 Rust 编译时间却表现如此糟糕。 Rust 与 TiKV 的编译时冒险:第 1 集 在 PingCAP ,我们基于 Rust 开发了分布式存储系统 TiKV 。然而它的编译速度慢到足以让公司里的许多人不愿使用 Rust。我最近花了一些时间,与 TiKV 团队及其社区中的其他几人一起调研了 TiKV 编译时间缓慢的问题。 通过这一系列博文,我将会讨论在这个过程中的收获: 为什么 Rust 编译那么慢,或者说让人感觉那么慢; Rust 的发展如何造就了编译时间的缓慢; 编译时用例; 我们测量过的,以及想要测量但还没有或者不知道如何测量的项目;

在Rust中,cargo使用国内镜像源

吃可爱长大的小学妹 提交于 2020-03-02 11:41:00
一个编程语言依赖包管理的普通问题。 cargo解决得比较优雅。 一,新建$HOME/.cargo/config文件 [source.crates-io] registry = "https://github.com/rust-lang/crates.io-index" replace-with = 'ustc' [source.ustc] registry = "git://mirrors.ustc.edu.cn/crates.io-index" 二,项目cargo.toml内容 [package] name = "guessing_game" version = "0.1.0" authors = ["aguncn <aguncn@163.com>"] edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] rand = "0.5.5" 三,cargo build命令 四,更新完成之后,Cargo.lock文件内容 # This file is automatically @generated by Cargo. # It is not intended for manual

How can I implement Deref for a struct that holds an Rc<Refcell<Trait>>?

核能气质少年 提交于 2020-03-02 09:26:31
问题 My goal is to delegate method calls against my struct to a Trait's methods, where the Trait object is inside an Rc of RefCell . I tried to follow the advice from this question: How can I obtain an &A reference from a Rc<RefCell<A>>? I get a compile error. use std::rc::Rc; use std::cell::RefCell; use std::fmt::*; use std::ops::Deref; pub struct ShyObject { pub association: Rc<RefCell<dyn Display>> } impl Deref for ShyObject { type Target = dyn Display; fn deref<'a>(&'a self) -> &(dyn Display +

用rust写一个玩具解释器10(parser)

安稳与你 提交于 2020-03-01 19:45:54
介绍完中缀和前缀表达式 那么今天就把parser的代码全部贴出来 可跳过 use crate::ast::ast::ASTNode; use crate::ast::ast; use crate::mylexer::lexer; use crate::token::token; use std::collections::HashMap; pub enum Pri { LOWEST, ASSIGN , // 赋值 EQUALS , // ==, != LESSGREATER , // < ,> SUM , //+,- PRODUCT ,//*,/ PREFIX , // !,- CALL , // func() INDEX, // array[0], map[0] } macro_rules! get_pri { ($x:ident) => { Pri::$x as i8 }; } //这里嘛, 现在还没有更好的办法解决... fn get_precedence(t: token::TokenType) ->i8 { let map: HashMap<token::TokenType,i8> = { let mut mmap = HashMap::new(); mmap.insert(token::EQ, get_pri!(EQUALS)); mmap.insert(token:

Reading from TcpStream results in empty buffer

不羁岁月 提交于 2020-03-01 19:43:43
问题 I want to read data from a TCP stream but it results in an empty Vec : extern crate net2; use net2::TcpBuilder; use std::io::Read; use std::io::Write; use std::io::BufReader; let tcp = TcpBuilder::new_v4().unwrap(); let mut stream = tcp.connect("127.0.0.1:3306").unwrap(); let mut buf = Vec::with_capacity(1024); stream.read(&mut buf); println!("{:?}", buf); // prints [] When I use stream.read_to_end the buffer is filled but this takes way too long. In Python I can do something like import

Reading from TcpStream results in empty buffer

一笑奈何 提交于 2020-03-01 19:42:20
问题 I want to read data from a TCP stream but it results in an empty Vec : extern crate net2; use net2::TcpBuilder; use std::io::Read; use std::io::Write; use std::io::BufReader; let tcp = TcpBuilder::new_v4().unwrap(); let mut stream = tcp.connect("127.0.0.1:3306").unwrap(); let mut buf = Vec::with_capacity(1024); stream.read(&mut buf); println!("{:?}", buf); // prints [] When I use stream.read_to_end the buffer is filled but this takes way too long. In Python I can do something like import

智能合约开发新趋势【2019】

你离开我真会死。 提交于 2020-03-01 13:02:13
智能合约开发语言已经被Solidity统治了一段时间,它用于开发可以在以太坊虚拟机EVM上运行的智能合约。不过Solidity有一些严重的问题,包括算术溢出、类型错误以及曾经冻结了3亿美元的delegatecall漏洞。所有这些漏洞都是在开发语言层面存在的问题。换句话说,如果有一个好点的开发语言,本来应该可以创造更安全的智能合约。文本将列出在2019年值得关注的区块链智能合约开发技术趋势。 上汇智网,用互动方式学习以太坊、比特币、EOS、tendermint等更多 区块链开发教程 。 2019年,Solidity的挑战者终于来了。 Waves RIDE Waves RIDE是一个图灵不完备(没有循环或递归)的、收Haskell启发的函数式编程语言, 用于Waves区块链。它的特点包括静态类型、惰性评估、模式匹配和用于决定交易是否允许 完成的断言表达式。目前图灵完备的版本也在开发中。Wave的智能合约支持目前在主网上 已经激活。我们应当可以在2019年看到第一批Waves的dApp。 官方地址: https://docs.wavesplatform.com/en/technical-details/ride-language.html Plutus (Cardano) Plutus是另一个类Haskell的函数式编程语言,用于Cardano区块链。Cardano计划在2019年

2019年需要关注的区块链智能合约开发平台

孤街醉人 提交于 2020-03-01 13:01:58
智能合约开发语言已经被Solidity统治了一段时间,它用于开发可以在以太坊虚拟机EVM上运行的智能合约。不过Solidity有一些严重的问题,包括算术溢出、类型错误以及曾经冻结了3亿美元的delegatecall漏洞。所有这些漏洞都是在开发语言层面存在的问题。换句话说,如果有一个好点的开发语言,本来应该可以创造更安全的智能合约。文本将列出在2019年值得关注的区块链智能合约开发技术趋势。 上汇智网,用互动方式学习以太坊、比特币、EOS、tendermint等更多 区块链开发教程 。 2019年,Solidity的挑战者终于来了。 Waves RIDE Waves RIDE是一个图灵不完备(没有循环或递归)的、受Haskell启发的函数式编程语言,用于Waves区块链。它的特点包括静态类型、惰性评估、模式匹配和用于决定交易是否允许完成的断言表达式。目前图灵完备的版本也在开发中。Wave的智能合约支持目前在主网上已经激活。我们应当可以在2019年看到第一批Waves的dApp。 官方地址: https://docs.wavesplatform.com/en/technical-details/ride-language.html Plutus (Cardano) Plutus是另一个类Haskell的函数式编程语言,用于Cardano区块链

编程语言这一年:Rust、Kotlin 上位,Python 横行,PHP……

点点圈 提交于 2020-03-01 12:40:04
作者: 开源中国(OSCHINA) 内容来源: 开源中国(OSCHINA) 最近 开源中国(OSCHINA) 在庆祝 11 周年生日,编辑部借着这个机会梳理了一下这一年来我们追过的那些开源界/开发界的热点新闻,算作一个阶段性小结。(其实只有 9 个月~) 开源中国是目前国内为数不多深耕于围绕“开源/自由软件”为开发者分享开源业内事、传播开源价值观的平台。目前 社区收录的开源项目 数量已经超过 50k,其中国产项目数量 10k+。 关于社区会发布哪些类型的新闻内容,开源中国的传统是: 最核心的当然是开源相关的,比如开源项目的更新公告、各个开源社区的相关大事。 知名开发工具的相关动态,包括各种 IDE、浏览器与各种协议/规范等。 开发者强相关的大事件,比如 996。 偶尔有一些泛 IT 界的能够引起开发者共鸣/思考的大事件,比如删库跑路。 …… 而这些内容来自开源中国官方编辑,也 来自社区的用户 OSCer ,借此也感谢 OSCer 们对开源中国社区的支持与维护。“ @红薯 你起来啊,怎么就跪下了。” 今年这几个月下来,已经积累了庞大规模的内容,我们按不同方向整理成了数篇文章,接下来会陆续推出,这是第一篇,自然是从编程语言讲起。 OSCHINA 今年关注了什么之——编程语言 编程语言是开发者最亲密的工具,以针对编程语言的梳理作为开篇,似乎再合适不过了。