タグ

Rustに関するzyzyのブックマーク (164)

  • Rust のマクロ・構文拡張,および Macros 2.0 について | ubnt-intrepid's blog

    記事は Rust Internal Advent Calendar 2017 第10日目の記事です. 記事では,Rust の主要な機能の一つである「マクロ」および「構文拡張」についての現状認識と,将来的な導入のために検討が進んでいる Macros 2.0 についての概略をまとめる. 記事執筆時における情報をもとに記述しているため,将来的にその仕様が(大幅に)変更される可能性があることに注意されたい. はじめにRust のマクロ・構文拡張Rust は,構文解析後に抽象構文木 (AST) を書き換える操作を注入するために マクロ (macro) および 構文拡張 (syntax extension) という仕組みを提供している. Rust のマクロは,それが構文解析後に行われるという点で C や C++ におけるプリプロセッサとは対照的なものである.マクロの仕様に関する詳細は Rust

    zyzy
    zyzy 2018/04/13
    今までマクロがnightlyから出てこなかったのは、マクロの構造的にstableの条件を満たしようがないから、というのは目から鱗。
  • wasm32-unknown-unknown landed & enabled - Hello, Rust!

    zyzy
    zyzy 2017/11/27
    これはかなりお手軽。
  • Rust compile time mandelbrot

    I read Sean Leffler's article on Rust's type system being turing complete and that's when I lost my weekends for the next few months. The output dg $ /usr/bin/time rustc play.rs 2>&1 | sed -e 's/((/X((/g' -e's/, (N//g' |tr 'X' '\012' error[E0599]: no function or associated item named `foo` found for type ` ((N1111111111222222bbbbb11111111111, FalseT)))))))))))))))))))))))))))))))), ((N111111112222

    zyzy
    zyzy 2017/09/12
    Scalaだけでなくお前もか!!
  • RustのGenericsを触っていて腑に落ちなかったところ - Qiita

    fn foo<T>() { use std::sync::{Once, ONCE_INIT}; static INIT: Once = ONCE_INIT; INIT.call_once(|| { // run initialization here println!("Called"); }); } fn main() { foo::<i64>(); foo::<i64>(); foo::<isize>(); } 0000000000007510 <_ZN4test4main17h916a53db53ad90a1E>: 7510: 50 push rax 7511: e8 5a ff ff ff call 7470 <_ZN4test3foo17h61cadb66d9062e2eE> 7516: e8 55 ff ff ff call 7470 <_ZN4test3foo17h61cad

    RustのGenericsを触っていて腑に落ちなかったところ - Qiita
    zyzy
    zyzy 2017/09/12
    こうしてみると、Genericsは本当にパラメータとして扱われてる、って感じなんだな。
  • RustのRFC一覧 (~0500) - 簡潔なQ

    概要: RustのRFCの一覧を作ろうとしたが、あまりに多いのでとりあえず0500までで公開することにした。なお、単に全てのRFCを列挙したいならばここを見ればよい。 このRFCはRustのコミュニティーが管理しているものであり、 “RFC” の元祖であるIETF RFCとは関係ない。いずれもrequest-for-commentの略である。 メタ RFC 0002 Rust RFCの提出プロセスの説明 スタイル/慣習 RFC 0199 似たような動作で、所有権/借用の種別だけが異なるようなメソッドの命名規則を定める RFC 0236 panic!/Result の使い分けの慣習を定義する、関連するメソッドの命名規則を定める RFC 0240 unsafe の慣習の整理: unsafe 関数をメソッドにする条件の定義、論理的な不変条件を壊すが未定義動作を引き起こさない関数は unsafe

    RustのRFC一覧 (~0500) - 簡潔なQ
    zyzy
    zyzy 2017/07/19
    自分じゃまともに追えない奴だったので概要だけでもありがたい。
  • Rustで型の多相再帰はできない - 簡潔なQ

    OCamlやHaskellに比べると、Rustは多相再帰ができない場合がほとんどである。以下にその詳細を説明する。 多相再帰 異なる型引数による再帰呼び出しを多相再帰 (polymorphic recursion) という。多相再帰はPurely Functinoal Data Structuresで紹介されているようなデータ構造でよく出てくる。例えば、完全二分木はOCamlとHaskellではそれぞれ以下のように書ける。 type 'a sep = Nil | Cons of ('a * 'a) sep data Sep a = Nil | Cons (Sep (a, a)) これがlistの定義と異なることがわかるだろうか。listでは 'a list の定義に 'a list という形の型のみを用いる。ここでは 'a sep の定義に ('a * 'a) sep を用いている。これが

    Rustで型の多相再帰はできない - 簡潔なQ
    zyzy
    zyzy 2017/03/19
    ここなんとかmacroで代替できないか、色々思案。
  • Zero-cost futures in Rust · Aaron Turon

    One of the key gaps in Rust’s ecosystem has been a strong story for fast and productive asynchronous I/O. We have solid foundations, like the mio library, but they’re very low level: you have to wire up state machines and juggle callbacks directly. We’ve wanted something higher level, with better ergonomics, but also better composability, supporting an ecosystem of asynchronous abstractions that a

    Zero-cost futures in Rust · Aaron Turon
    zyzy
    zyzy 2016/08/15
    Scala的な方向に近づきつつ、Zero-Cost目指すの本当にわくわくする。
  • Rustのforget関数 - Qiita

    Rustの面白い関数にstd::mem::forgetがあります。 Rustには値がスコープ外になった時の後処理を記述できるDropというtraitがあり、 リソースのリーク漏れを防いでくれます。 Dropのおかげでmallocしてfreeしたりfileをopenしてcloseするなどの処理は自分で書く必要がないし忘れる事もないわけです。

    Rustのforget関数 - Qiita
    zyzy
    zyzy 2016/04/21
    うわ、あったのかこれ。ちゃんと調べるべきだった、というかrustonomiconすらちゃんと読んでないし、ないない言う前にちゃんと探さないとな。
  • Compile-Time Fibonacci in Rust

    My roommate insisted that I learn some Rust. It's incomprehensible why my programmer roommate thought his marketer roommate needs to know Rust, but oh well, I spent a bit of time learning Rust. Rust has many curious features. One of them is (hygienic) macros. The grammar of macro_rules! is explained in prose without clear grammar definitions, making it a bit hard to grasp. But after a few false st

    zyzy
    zyzy 2016/03/11
    Scalaと違って型ではそう凝った事は出来ないはず……と思っていたらMacroでやりやがった。
  • RustのHigher-Kinded type Trait | κeenのHappy Hacκing Blog

    κeenです。少し前の話になりますがRustの関連型を駆使してHigher Kinded type Trait(高階型トレイト)を実現してしまったものが出回ってたのでそれについて。 RustはHKTをサポートしていませんが不思議なことに実装出来てしまっているのです。 HKTについて微塵も知らない方にも分かるように解説していきます。 map 可能なトレイト Option、Result、etc 色々なトレイトが map メソッドを実装しています。 それぞれ型シグネチャを抜き出してみましょう。 Option: map<U, F: FnOnce(T) -> U>(self, f: F) -> Option<U> Result: map<U, F: FnOnce(T) -> U>(self, op: F) -> Result<U, E> 驚く程似てますね。これを抽象化して「mapメソッドを持つ」

    RustのHigher-Kinded type Trait | κeenのHappy Hacκing Blog
    zyzy
    zyzy 2016/02/29
    この間これ応用して2項の奴(Arrowとか)実装して遊んでみたんだけど、凄まじく力づくな事になって笑った(CとUを組み合わせたTの全パターンの組み合わせをmacroでぶっこまざるを得なかった)。
  • Higher-kinded type trait

    hkt.rs �EP]�U �`"]�U use std::rc::Rc; trait HKT<U> { type C; // Current type type T; // Type with C swapped with U } macro_rules! derive_hkt { ($t:ident) => { impl<T, U> HKT<U> for $t<T> { type C = T; type T = $t<U>; } } } derive_hkt!(Vec); derive_hkt!(Option); derive_hkt!(Box); derive_hkt!(Rc); trait Functor<U>: HKT<U> { fn map<F>(&self, f: F) -> Self::T where F: Fn(&Self::C) -> U; } impl<T, U> F

    Higher-kinded type trait
    zyzy
    zyzy 2016/02/16
    Rustの擬似高階型だが、その手があったか!!
  • Rustのイテレータの網羅的かつ大雑把な紹介 - Qiita

    let words = vec!["abc", "FOOBAR", "xyz"]; let case_insensitive_min = words.iter().min_by(|a, b| { let a_iter = a.chars().map(|c| c.to_ascii_lowercase()); let b_iter = b.chars().map(|c| c.to_ascii_lowercase()); a_iter.cmp(b_iter) }).unwrap(); (全体コード: Playground) 安直にやれば、 str::to_lowercase() で先に(こちらは ASCII に限らず)小文字に変換しきってから比較ということになるが、これだと文字列の生成、つまりメモリアロケーションがあるので無駄が多い。 そこで min_by を使えば、文字列を生成することなく、文

    Rustのイテレータの網羅的かつ大雑把な紹介 - Qiita
    zyzy
    zyzy 2016/02/13
    by_refの代わりに、ここにあがってないas_refをよく使うんだけども、イマイチこの二つの使い分け所が分からない……。mutが付かないだけかな?
  • rfcs/text/0387-higher-ranked-trait-bounds.md at master · rust-lang/rfcs

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    rfcs/text/0387-higher-ranked-trait-bounds.md at master · rust-lang/rfcs
    zyzy
    zyzy 2016/02/12
    将来的に高階Trait表現が可能になる根拠はこれか……。後はカリー化をもう少しお手軽に出来るようにする方法だよなぁ……。
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    zyzy
    zyzy 2016/01/07
    ちょっと気になる事へのリンクがまとまっていたので
  • Rust and the Monad trait - Not just higher kinded types · m4rw3r

    m4rw3r The blog of Martin Wernstål Rust and the Monad trait - Not just higher kinded types 19 Sep 2015 Higher kinded types is something which has been discussed a lot related to Rust in the past year, both as a feature people want, but also as a feature people do not really know what to do with. I am going to focus on the Monad trait in this post, since that is one of the things which makes higher

    zyzy
    zyzy 2015/12/22
    この辺は是非上手い事導入されて欲しいなぁ……。
  • JAXenter - Java Development & Software Architecture

    brand id {{brandid}} apploaded {{apploaded}} loading {{loading}} everLoadedData {{everLoadedData}} page {{page}} page_size {{page_size}} loadMorePossible {{loadMorePossible}}

    JAXenter - Java Development & Software Architecture
    zyzy
    zyzy 2015/12/04
    Sizedの件もそうなんだけど、後付で発見されて仕様が改定されてる部分って、Traitとジェネリクスが組み合わさった時に起こる不都合、ってのが多いような……。この二つの組み合わせは予想外引き起こしやすいのか?
  • Peeking inside Trait Objects

    One of the most powerful parts of the Rust programming language0 is the trait system. They form the basis of the generic system and polymorphic functions and types. There’s an interesting use of traits, as so-called “trait objects”, that allows for dynamic polymorphism and heterogeneous uses of types, which I’m going to look at in more detail over a short series of posts. Update 2015-02-19: A lot

    zyzy
    zyzy 2015/11/26
    Object Safety 周りがイマイチよく分からないので、一生懸命読んでるけど英語の壁が……。
  • Announcing Rust 1.0 | Rust Blog

    Today we are very proud to announce the 1.0 release of Rust, a new programming language aiming to make it easier to build reliable, efficient systems. Rust combines low-level control over performance with high-level convenience and safety guarantees. Better yet, it achieves these goals without requiring a garbage collector or runtime, making it possible to use Rust libraries as a "drop-in replacem

    Announcing Rust 1.0 | Rust Blog
    zyzy
    zyzy 2015/05/16
    穴あきだらけだと思ってたドキュメントも綺麗にそろったな……。
  • Nim引退

    nim-fuseについてはちゃんとメンテしますが、Nim引退しようと思います。たぶんこの引退は覆りません。 この前Rustを引退して、今後はNimも引退します。 coreutils splitのマージ。そしてRust引退 - テストステ論 私はOSだとかストレージだとか、システムプログラミングばかりやってる人間であって、基的にC言語ばかり書いているわけですが、C言語は全く糞だしもう人類はこれを使うべきではないと思っています。そう思う人が少なくないのか、次世代システムプログラミングを作る流れがあって、有名順でいうと、D > Rust > Nimという感じになるのでしょうか。 このうち、Dについてはを読みかけの段階でリタイア(難しすぎる!!!)して、Rustはcoreutilsにいくつかコードを入れて引退、Nimnim-fuseを作って引退。使ってみると色々と悪いところが見えてくるもので

    Nim引退
    zyzy
    zyzy 2015/04/16
    一通り使って比較してから選ぶ、というのは割と皆が通る道だろうけど、コアなライブラリ開発にコミットした上で、ってのはそうそうないよな……凄いとしか。
  • Announcing Rust 1.0 Beta | Rust Blog

    Today we are excited to announce the release of Rust 1.0 beta! The beta release marks a very significant "state transition" in the move towards 1.0. In particular, with the beta release, all libraries and language features that are planned to be stable for 1.0 have been marked as stable. As such, the beta release represents an accurate preview of what Rust 1.0 will include. To see what has changed

    Announcing Rust 1.0 Beta | Rust Blog
    zyzy
    zyzy 2015/04/08
    ふおおお、ちょっと見ない間に正式リリース秒読み段階に。ここまできたら意外と早かった