タグ

Boxとselfに関するslay-tのブックマーク (2)

  • 「Go言語でつくるインタプリタ」をRustで実装しました。 - Sansan Tech Blog

    はじめに こんにちは。DSOC 研究開発部 Architect Group Data Direction Teamの有山です。 気温が上がってきて夏っぽくなってきましたね。毎年夏用にTシャツを集めるのが趣味なのですが、今年は個人的にブームが再燃してるGOODENOUGH*1を古着で集めようかなと考えています。 ところで皆さんは普段何の言語を書いていますか? Data Direction Groupでは主にPythonを使用していますが、ある時から四則演算の計算順序やif文の条件分岐はどうして正しく動くのだろうと疑問に思うようになり、実際に正しく動かしているシステムを理解してみたくなりました。色々検討した結果、「Go言語で作るインタプリタ」というが内容的にも分量的にもちょうどよく、これを読み進めることにしました。 初めは読みながらコードを写経していましたが、複雑なロジックについては理解した

    「Go言語でつくるインタプリタ」をRustで実装しました。 - Sansan Tech Blog
  • 末尾再帰をループにできないRustプログラムの例 - 簡潔なQ

    概要: 生存期間の関係で、ループでは書けないが末尾再帰では書けるアルゴリズムの例を挙げる。 単方向リンクリスト 次のような単純なリンクリストを考える。 struct List<T> { root: Option<Box<Node<T>>>, } struct Node<T> { value: T, next: Option<Box<Node<T>>>, } backの実装 単方向リンクリストの末尾要素の取得は O(n) である。これは次のように書くことができる。 impl<T> List<T> { fn back(&self) -> Option<&T> { let mut node = if let Some(ref b) = self.root { b.as_ref() } else { return None; }; while let Some(ref b) = node.next

    末尾再帰をループにできないRustプログラムの例 - 簡潔なQ
  • 1