当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-06-30
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::Er


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



日报订阅地址:

独立日报订阅地址:

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

社区学习交流平台订阅:

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