专栏首页Rust语言学习交流【Rust日报】 2019-08-09:我學習rust的前三個月

【Rust日报】 2019-08-09:我學習rust的前三個月

Tokio v0.2.0-alpha.1; 現在有 async & await.

現在一個簡單的 echo server可以寫成這樣

#![feature(async_await)]

use tokio::net::TcpListener;
use tokio::prelude::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let addr = "127.0.0.1:8080".parse()?;
    let mut listener = TcpListener::bind(&addr)?;

    loop {
        let (mut socket, _) = listener.accept().await?;

        tokio::spawn(async move {
            let mut buf = [0; 1024];

            // In a loop, read data from the socket and write the data back.
            loop {
                let n = match socket.read(&mut buf).await {
                    // socket closed
                    Ok(n) if n == 0 => return,
                    Ok(n) => n,
                    Err(e) => {
                        println!("failed to read from socket; err = {:?}", e);
                        return;
                    }
                };

                // Write the data back
                if let Err(e) = socket.write_all(&buf[0..n]).await {
                    println!("failed to write to socket; err = {:?}", e);
                    return;
                }
            }
        });
    }
}

到目前為止,感謝社區的回饋與rust團隊對rust語言的維護,也感謝tokio有專業的團隊在維護。

read more

我學習rust的前三個月

作者是c++ 老手,看到了一些rust的傳聞很感興趣,所以來試著用用看。

一開始的感覺還不錯,所有權解決了很多在C++會遇到的問題,

這並不是免費的午餐,他依賴更複雜的語法限制,且你不能把其它語言的常識套用在rust。

但這樣也沒什麼不好,rust寫出來的程式很難會有難聞的代碼味,你可以很放心的維護你的程式。

rust相較於c++,需要你顯式宣告各種語法,你的程式語意明確不會被誤解。

作者覺得rust生態還不夠完整,直接使用的風險還過高,

但這個問題正在逐步被改善,像微軟、亞馬遜、臉書等公司都在使用,

相信rust的未來是很光明的。

read more

Await 一下,何必要這麼麻煩呢?

這篇文章講解了從純future轉換到 async/await之後,

程式碼的閱讀性會有顯著的提高,也更容易寫出非同步的程式。

使用future

fn handle_get_counters(
    &self,
    p: &mut P::Deserializer,
) -> impl Future<Item = ProtocolEncodedFinal<P>, Error = Error> + Send + 'static {
    let ret: Result<_, Error> = (|| {
        let args = {};
        Ok(self.service.get_counters(args))
    })();
    let ret = ret.map(|res| {
        res.then(move |res| {
            res.and_then(move |res| write_message(
                p, "getCounters", MessageType::Reply, |p| res.write(p),
            ))
        })
    });
    ret.into_future().flatten()
}

async/await

async fn handle_get_counters(
    &self,
    p: &mut P::Deserializer,
) -> Result<ProtocolEncodedFinal<P>, Error> {
    let args = {};
    let res = self.service.get_counters(args).await?;
    let enc = write_message(p, "getCounters", MessageType::Reply, |p| res.write(p))?;
    Ok(enc)
}

相信大家都跟我一樣迫不及待想要趕快使用rust 1.38版!

read more

Project Servo 使用過去繼有的技術拯救未來的自己

裡面提到了 rust 目前所擁有的語言特性大部份是參考過去程式語言的解法

只是更優雅的整合在了一起,這是其它語言所沒有的。

read more

gfx-hal-0.3 來了

現在所有的型別都實作 Debug

MSAA 反鋸齒做好了

事件API

對3D圖形底層api有興趣的可以看看。

read more


From 日报小组 @Damody

日报订阅地址:

独立日报订阅地址:

  • Telgram Channel
  • 阿里云语雀订阅
  • Steemit
  • GitHub

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss
  • Rust Force: 支持rss
  • 微信公众号:Rust语言学习交流

本文分享自微信公众号 - Rust语言学习交流(rust-china)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Qt ListView 配合Model 显示文件与删除文件

    表格、列表和树型窗口部件是 GUI 开发中经常会用到的窗口部件。这些窗口部件有两种不同的方式来获取数据。传统的方式是窗口部件本身包含用于存储数据的内置容器。这种...

    用户5908113
  • 连接两个点云中的字段或数据形成新点云以及Opennni Grabber初识

    (1)学习如何连接两个不同点云为一个点云,进行操作前要确保两个数据集中字段的类型相同和维度相等,同时了解如何连接两个不同点云的字段(例如颜色 法线)这种操作的强...

    点云PCL博主
  • Android NDK OpenCV级联方式实时进行人脸检测

    前面的文章《Android通过OpenCV和TesserartOCR实时进行识别》我们已经搭好一个利用NDK方式实时处理摄像头数据的程序了,今天我们就在看看Op...

    Vaccae
  • 异步编程举例之闹钟程序

    本次主要和大家分享两个闹钟程序。它们分别是同步版本、多进程版本,之后和大家分享多线程版本。

    用户5908113
  • markdownIt2html 插件化路程

    自从来了微信之后,好少写文章了,最新一篇去还停留在年 10 月 24 日。真鸡儿惭愧。在这边工作最大的感受就是自由,你可以做很多事,你喜欢的,你不喜欢的,都做。...

    villainhr
  • 为什么强烈推荐Java程序员使用Google Guava编程

    目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!学习使用Google Guava可以让你...

    哲洛不闹
  • ClickHouse初识

    ClickHouse这些年还是比较火的一门技术,是Yandex在2016年6月15日开源的数据分析的数据库。在GitHub上有7000多的星。

    jeanron100
  • PCL 可视化

    可视化(visualization)是利用计算机图形学和图像处理技术,将数据转换图像在屏幕上显示出来,并进行交互处理的的理论,方法和技术,

    点云PCL博主
  • Sharding-JDBC:单库分表的实现

    通过上面的优化,已经能满足大部分的需求了。只有一种情况需要我们再次进行优化,那就是单表的数量急剧上升,超过了1千万以上,这个时候就要对表进行水平拆分了。

    猿天地
  • Android通过OpenCV和TesserartOCR实时进行识别

    最近一系列的文章都是用Android利用OpenCV NDK的方法通过摄像头实时获取图像进行图像处理,在上一篇《Android使用Tesseract-ocr进行...

    Vaccae

扫码关注云+社区

领取腾讯云代金券