タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

Rustに関するkakkun61のブックマーク (20)

  • Rustで型レベルプログラミング

    はじめに 通常のプログラムは実行時(ランタイム)に1 + 1など様々な計算を行う。一方でコンパイラーを持つ言語では、コンパイラーの型検査やジェネリクスなどの機構を利用して、コンパイル時にも計算を行うことができる。このようなプログラミングを、コンパイル時に検査・推論される“型”[1]に注目して型レベルプログラミングと呼ばれる。 ランタイムの計算の中にはたとえばwhile(1);のような簡単な計算で無限ループといった停止しない状況に陥いることがある。コンパイル時にできる計算でこのように無限ループに陥いってコンパイルが停止しなくなってしまったら、プログラムを実行することなく自明なエラー(型があってないとか、Rustであればfreeするタイミングが自明でないなど)を検出しようというモチベーションが崩壊してしまう。したがってコンパイル時にできる計算とはランタイムに比べて非常に限定された計算しか許可さ

    Rustで型レベルプログラミング
  • Non-Lexical Lifetimes - Qiita

    Non-Lexical Lifetimesって? Rust 2018 Edition の最初のリリース、Rust 1.31.0でstabilizeされた新しいリージョン推論システムの名前。 または、Rustの借用システムにおけるノンレキシカル・ライフタイム (レキシカルスコープではなく制御フローグラフに基づくライフタイム)対応への拡張。 これにより、(主に式をまたいだライフタイムの)より柔軟なリージョン推論が可能になりました。 Announcing Rust 1.31 and Rust 2018を読むと、「エラーメッセージがわかりやすくなってデバッグが簡単になりました」と書いてありますが、実際はできること自体が増えています。 今回ちょっと時間が無かったため、RFCで例に上がっているコードをコンパイルしてみて確認してみました程度になってしまいました。 追記:コメントで将来的にRust 201

    Non-Lexical Lifetimes - Qiita
  • 使いやすさを重視したHTMLスクレイピングライブラリを作った - 純粋関数型雑記帳

    TL:DR レポジトリ https://github.com/tanakh/easy-scraper ドキュメント 背景 このところ訳あってRustHTMLからデータを抽出するコードを書いていたのですが、 既存のスクレイピングライブラリが(個人的には)どれもいまいち使いやすくないなあと思っていました。 HTMLから望みのデータを取り出すのはいろいろやり方があるかと思いますが、 ツリーを自力でトラバースするのはさすがにあまりにも面倒です。 近頃人気のライブラリを見てみますと、CSSセレクターで目的のノードを選択して、 その周辺のノードをたどるコードを書いて、 欲しい情報を取り出すという感じのものが多いようです。 RustにもHTMLのDOMツリーをCSSセレクターで検索して見つかったノードをイテレーターで返してくれたりする、 scraperというライブラリがあります。 例えば、<li>要素

    使いやすさを重視したHTMLスクレイピングライブラリを作った - 純粋関数型雑記帳
  • 君のRustは20倍遅い - 簡潔なQ

    Rustはデフォルトでは来の力を発揮しない。試しに手頃なベンチマークを3個くらい試したらだいたい20~100倍程度遅かった。 「Rustで ○○ を高速にする方法」が知りたい人は、まず、Rustコンパイラが来の力を発揮しているか確認したほうがよい。 Cargoの場合 Cargoでは --release をつけると来の力を発揮してコンパイルする。 $ cargo build --release $ cargo run --release rustcを直接実行する場合 $ rustc -C opt-level=3 -C debug_assertions=no 上記のオプションを設定しない理由 逆に、上記のオプションを使わない理由としては、デバッグモードのほうが諸々のチェックが実行されてよいというのが挙げられる。 例えば、整数演算のオーバーフローはデバッグモードでは捕捉される。なお、オーバ

    君のRustは20倍遅い - 簡潔なQ
  • Rustのself引数まとめ - 簡潔なQ

    概要: Rustの随所でself引数は特別扱いされている。それらの挙動について調べた。 self引数とメソッド Rustではnon-staticメソッドは self という特殊な名前の引数を持つ関数として定義されている。例えば、 struct A; // parse_self_arg impl A { fn f1(self: A) {} fn f2(self: &mut A) {} fn f3(self: &A) {} fn f4(self: Box<A>) {} // 生存期間を明示すると以下の通り // fn f2<'a>(self: &'a mut A) {} // fn f3<'a>(self: &'a A) {} } と書くと、 f1, f2, f3 はメソッドになる。 self はキーワードであり、この名前の引数は特定の条件下でのみ宣言できる。それは以下の場合である。 trai

    Rustのself引数まとめ - 簡潔なQ
  • 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
  • クロージャを boxせずに 返したい: Rustのconservative_impl_traitとimplementation leak - 簡潔なQ

    概要: 「クロージャを boxせずに 返したい」という欲求は人類の四大欲求のひとつと言われている。 conservative_impl_trait という機能を使うことでこれをスパッと解決できるが、これは単なる構文糖衣にとどまらずRustの型システムにい込むこともあってかまだ安定版入りしていない。なぜこの機能が必要で、なぜこの機能が問題かを説明する。 クロージャをboxせずに返したい話 Rustではクロージャに異なる型がつく OCamlやHaskellのような言語では、外の環境を引き継ぐ無名関数 (クロージャ) を次のように作ることができるのであった。 let mult_curry x = fun y -> x * y この関数は x を受け取り、「y を受けとってx * yを返す関数」を返す。この「y を受けとって x * y を返す関数」は、 y というデータを引き連れている。そして

    クロージャを boxせずに 返したい: Rustのconservative_impl_traitとimplementation leak - 簡潔なQ
  • Graphical depiction of ownership and borrowing in Rust - Rufflewind's Scratchpad

    Below is a graphical depiction of moving, copying, and borrowing in the Rust language. Most of these concepts are fairly specific to Rust and are therefore a common stumbling block for many learners. To avoid clutter in the graphics, I have tried to keep the text to a minimum. It isn’t meant to be a replacement for the various tutorials out there but more of a different perspective for programmers

  • Rustは何が新しいのか(基本的な言語機能の紹介) - いもす研

    Rust は、Firefox を開発する Mozilla が開発し、次世代ブラウザの開発に使っているプログラミング言語です。借用検査という概念を導入することによりメモリ安全およびデータ競合安全をコンパイラが保証する言語であり、2015年中頃の安定版のリリースあたりから次第に注目を集めるようになりました。 メモリ安全とは、メモリの範囲外アクセスや二重解放、ヌル参照、未初期化領域へのアクセスがない状態を表します。ただし、Rust の言うメモリ安全とは、メモリリークをしないことを保証するものではありません。 データ競合安全とは、あるひとつのオブジェクトに対しての読み込みおよび書き込みのが同時に起き結果が不定になる状態にならないことを表します。競合状態とは異なります。 無名関数という概念を様々な言語が次々と導入したように、プログラミング言語は相互に影響を及ぼし徐々に変化しています。Rust は「寿

  • Run Rust code on PEZY-SC processor - 純粋関数空間

    これはRust その2 Advent Calendarの16日目の記事です。日付と投稿日がかみ合っていなくてすみません。 概要 PEZY-SCというメニーコアプロセッサーでRustのコードを動かしてみたというお話です。 PEZY-SCとは PEZY-SCとは、PEZY Computingが開発したメニーコアプロセッサーです。1024コアのRISCプロセッサーで、各コア8スレッドのSMTになっており、トータルで8192スレッドが同時に動きます。ピーク性能は倍制度1.5TFlops、単精度3TFlopsで、これを用いたシステムが電力効率の良いスパコンとしてGreen500などで良い成績を収めています。現在さらに性能を向上させたPEZY-SC2を開発中です。 高い演算スループットと電力効率を目指しながらも、SIMDを用いない完全なMIMDプロセッサーで、ある意味コンピューター科学の常識に反してい

  • Introduction -

    Discovery Discover the world of microcontrollers through Rust! This book is an introductory course on microcontroller-based embedded systems that uses Rust as the teaching language rather than the usual C/C++. Scope The following topics will be covered (eventually, I hope): How to write, build, flash and debug an "embedded" (Rust) program. Functionality ("peripherals") commonly found in microcontr

  • Writing an OS in Rust (Second Edition)

    This blog series creates a small operating system in the Rust programming language. Each post is a small tutorial and includes all needed code, so you can follow along if you like. The source code is also available in the corresponding Github repository. Latest post: Async/Await The first step in creating our own operating system kernel is to create a Rust executable that does not link the standar

  • The Story of Rust

    Steve Klabnik Let's talk about Rust Rust is a programming language. It's been in development a long time. I'm here to tell you about that. Let's talk about Rust I'm not going to say more about Rust itself yet. We'll get there! First, let's talk about why you should care about this story. Let's talk about stories This is a story about history History can be divided up into 'epochs' Epochs are deter

  • Rust Once, Run Everywhere | Rust Blog

    Rust's quest for world domination was never destined to happen overnight, so Rust needs to be able to interoperate with the existing world just as easily as it talks to itself. For this reason, Rust makes it easy to communicate with C APIs without overhead, and to leverage its ownership system to provide much stronger safety guarantees for those APIs at the same time. To communicate with other lan

    Rust Once, Run Everywhere | Rust Blog
    kakkun61
    kakkun61 2015/04/25
    Rust の C との FFI は no overhead らしい
  • A Fresh Look at Rust

    A Fresh Look at Rust written on Wednesday, October 1, 2014 I have been programming with Rust for quite a long time now but that does not mean much. Rust has been changing for years now in such dramatic ways that coming back after two months feels almost like working in a different language. One thing however never changed: the trajectory. With every update, with every modification the whole thing

  • Rust By Example Has Moved

    Rust by example has moved! Its new home is at https://doc.rust-lang.org/stable/rust-by-example. This website is sponsored by JOJOChips.com.

  • 関数型プログラマのためのRust | POSTD

    この投稿はEdward Z. Yangが2010年に書いた OCaml for Haskellers 、私自身が今年頭に書いた Haskell for OCaml programmers の流れに沿っています。 目次 プロローグ なぜRustを学ぶべきか 直接対応が可能なもの トレイト:Rustの型クラス アドホックなオブジェクトとメソッド 安全な参照 寿命と記憶域、そして管理オブジェクト オブジェクトの共有:RcとArc マクロとメタプログラミング リテラル 謝辞 参照 Copyright and licensing 注 : この記事の最新版は下記サイトで見られます。 http://science.raphael.poss.name/rust-for-functional-programmers.html 他のフォーマット: Source , PDF プロローグ C言語プログラマのための

    関数型プログラマのためのRust | POSTD
    kakkun61
    kakkun61 2014/09/05
    0.10 以降のメモリーモデルが日本語で読めるのうれしい
  • Rustの並列タスクモデルのメモ - saneyuki_s log

    「メモリ安全性と並列実行性に注目した言語」と語られる割に、メモリ安全性はともかく、どのようにRustの並列実行モデルが成り立っているのかについて語られる事が殆どない気がしたので、Rust Tasks and Communication Tutorial を大雑把ながら読み解いていくことで、Rust 0.7での並列モデルを探っていきたいと思います。 尚、サンプルコードはチュートリアルのものを元に一部改変を加えて使用してます Rustにおける並列実行モデル 実行されるRustプログラムは、それぞれがスタックと独自に所有権を持つヒープが割り振られた、タスクツリーによって構成される Rustにおける並列実行モデルは、軽量かつメモリ独立したタスクと、それらの相互のメッセージ通信によって成り立っている。 Rustにおけるタスクはスレッドではない。細かく分割されたタスクを、Rustの内部スケジューラによ

    Rustの並列タスクモデルのメモ - saneyuki_s log
  • Rust 基礎文法最速マスター (rust 0.7 編) - gifnksmの雑多なメモ

    警告 (2014/1/25 追記) 以下の記事ですが、今となっては通用しない記述が多く含まれています。 0.7 から現在までに行われた大きな変更としては、思いつくだけでも 言語組み込み機能としての managed box が非推奨になった (将来削除され、ライブラリによる実装と置き換わる) rusti ツールが削除された というものがあります。 おそらく、文中のコード例はコンパイルすら通らなくなっていることでしょう。 また、今後も 1.0 に向け大きな変更が予定されています (DST や GC の実装など)。 文中の、言語の基的なコンセプトに関する部分はかろうじて現在でも通用すると思いますが、その他の部分についてはきちんとメンテナンスされている文章 (公式のドキュメントなど) を参照してください。 以下、オリジナルの記事です。 ブログ移転後の最初の記事っということで、最近僕がハマっている

    Rust 基礎文法最速マスター (rust 0.7 編) - gifnksmの雑多なメモ
  • Rust 言語チュートリアル (非公式日本語訳, 途中)

    2016-07-21 この翻訳はもはや化石です。こちらに現在の言語仕様に追従した素晴らしい翻訳があります。 このページは削除すべきだとは思うのですが、現行の言語仕様、とくにメモリ管理まわりの仕様がどのような試行錯誤を経て現在の形になったかを知る上で面白い時期のスナップショットになっていて、残しておくのもありかなーとか。 * 訳注00: Rust は (既に処理系が Rust 自身で書かれているにも関わらず) 大胆な言語仕様の変更が頻繁に行われています。この日語訳も git の最新版 (0.3.1 < x < 0.4. すんません rev メモっておくの忘れました) と同期して一ヶ月程度ですが、あっという間に別言語と化しています。訳者のやる気的な意味もあってとりあえず公開しておきますが、日語訳は参考程度に留め、 git 上の公式ドキュメント を参照してください。 0.4 のリリース以降は

    kakkun61
    kakkun61 2013/03/11
    せっかくだからこれも GitHub で管理して pull request 受け付ければいいのに。
  • 1