タグ

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

  • 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 P� ��U P� ��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

    はじめに 正直なところ、公式ドキュメント std::iter::Iterator - Rust を読めば終了、この記事は不要、という感じはある。 しかしこのページ、例とかは豊富だし良いのだが、関数の並べ順がどうにも微妙な感じがするので、メモを兼ねて用途別(独断と偏見による分類)で紹介してみることにする。 あと、関数の型はHaskell風に書くと流れる感じがあって良い(イテレータの用途とマッチしている気がする)ので、 T -> U -> V のように書くことがある。 とはいえ、わかりやすさ優先で書くと FnMut とか FromA: Default + Extend<A> みたいな独特の情報が失われてしまったため、やはり公式のドキュメントをあわせて見ることをおすすめする。(リンクを沢山張ったので、発見次第別ウィンドウで開くくらいの勢いが良い。) それから、以下で Iterator<T> と書

    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

    Start your trial month now! Use devmio on a monthly basis REGISTER 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
    ふおおお、ちょっと見ない間に正式リリース秒読み段階に。ここまできたら意外と早かった
  • イテレータを返す関数を書きたいんですけど? → やめとけ。 死ぬぞ。 - Qiita

    !!この記事の内容はもう古いです。 詳しくはコメント参照!! こんにちは。 Rust記事です。 Rust、比較的新しい言語じゃないですか。 頑張ってチュートリアル読んで、じゃあなんかちょっとしたアルゴリズムでも書いてみるか、ってなるじゃないですか。 で、大体のちょっとしたアルゴリズムって、まぁ普通は配列とかマップとか、そういうデータ集合のデータ構造が出てきますよね。 もちろんそんなデータ構造を関数間で受け渡ししたくなるじゃないですか。 で、『Vec作って返すよりもイテレータの状態で返したほうがパフォーマンスいいんじゃない?』って場面はまぁあると思うんですよ。 やめとけ、死ぬぞ。 っていうのが今回の主旨です。 イテレータを返す関数って、どんな定義になると思いますか? ここでは適当に、Vec<i32>を2つ受け取って、それらを連結した上で3の倍数の要素のみを返したい、とか考えましょう。 たぶん

    イテレータを返す関数を書きたいんですけど? → やめとけ。 死ぬぞ。 - Qiita
    zyzy
    zyzy 2015/02/25
    ぎゃあ……意外なところに落とし穴が。
  • Announcing Rust 1.0 Alpha | Rust Blog

    Today, we're excited to release the alpha version of Rust 1.0, a systems programming language with a focus on safety, performance and concurrency. This release marks a huge milestone for Rust and its community: The language is feature-complete for 1.0. While we plan to make many usability improvements before the final release, all 1.0 language features are now in place and we do not expect major b

    Announcing Rust 1.0 Alpha | Rust Blog
    zyzy
    zyzy 2015/01/10
    ちょっと予定より遅れつつも、キターーーーーーーーーーーー
  • Rustの1.0ベータ版に向けたロードマップ

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    Rustの1.0ベータ版に向けたロードマップ
    zyzy
    zyzy 2014/10/17
    今年もうあと2ヶ月しかないわけですが。1は影響範囲でかそうなんで、早く安定して欲しい。
  • Rustで値のmoveが起こる場合 - saneyuki_s log

    Rust v.0.11pre時点での情報です。 Rustにおけるムーブセマンティクス だいたいC++のそれと同じものと理解してるんだけど、おさらいとして。 Rustの言語セマンティクスの一つに、メモリの所有権(Ownership)というものがある。これは「このメモリ領域を自身のもの所有しているものは常に一つ(ユニーク)になる」というもので、これが保証されると、特定のメモリの領域は、所有する変数ひいては所有するタスクが決定されるようになる。原則として、各タスクごとの単位でしか、その所有権の貸し借り(borrowing)ができないため、タスクAから他の非同期に動作するタスクBの所有するメモリ領域の変更は不可能になる。タスクAからタスクBに向けてデータを送信した場合、データの所有権ごと送信されるので、結果としてデータ競合が発生しないことが保証される(もちろんArc<T>とか使ったり、生ポインタを

    Rustで値のmoveが起こる場合 - saneyuki_s log
    zyzy
    zyzy 2014/08/06
    最初に気になる部分の分かりやすいまとめ