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语言学习交流