タグ

ブックマーク / keens.github.io (7)

  • Rustのコードチェックを強力にする3つのツール | κeenのHappy Hacκing Blog

    κeenです。 Rustaceanのみなさんは普段書いてるRustのコードを検証するのに cargo check や cargo test などのツールを使っているかと思いますが、それらを強力にするツールの miri 、 MIRAI 、 kani をそれぞれ紹介します。 Rustにはいくつかコードの正しさや行儀のよさを検査する方法がありますね。 cargo check や cargo test 、 あるいはビルドしたバイナリを走らせて検証したり色々手を尽くしているでしょう。 ですがこれらだけだとあらゆる種類のバグを拾いきれる訳ではないのもみなさん承知の通りだと思います。 既存の方法だと手が回らない所があるので他のアプローチでコードを検証してくれるツールがあると嬉しいですよね。 そういったツールを3つ紹介します。 先に注意しておくと、これらのツールはまだ成熟しきってはおらず使いづらい点、使い

    Rustのコードチェックを強力にする3つのツール | κeenのHappy Hacκing Blog
  • 関数型プログラマからみたRust | κeenのHappy Hacκing Blog

    C++からRustに入った人あたりから「関数型言語から来た人のRustの感想を知りたい」とたまに言われるのでいつかブログ書こうか。 — κeen (@blackenedgold) 2017年4月3日 イントロ 私はRustをやる前にはCommon LispやSMLを主に使っていましたが、仕事ではScalaを使っていましたし他にもOCamlやSchemeやClojureやATS2やHaskellなどを書くこともありました。 私を含めた多くの関数型言語経験者人が一度は Rust for functional programmers を読んだことがあるかと思います。 このように関数型言語と比較して書かれるといかにも似た言語に見えるので私は興味を持ちました。そこで私は実際にRustに触れ始めたのです。 構文 let があるのでおよそOCamlなどに似ているという印象を受けました。 デフォルトでイミ

    関数型プログラマからみたRust | κeenのHappy Hacκing Blog
  • 安全なシステムプログラミング言語Rustへの招待 | κeenのHappy Hacκing Blog

    # 安全なシステムプログラミング言語Rustへの招待 ---------------------- [IIJ Labセミナー](https://iijlab-seminars.connpass.com/event/152079/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [@blackenedgold](https://twitter.com/blackenedgold) * Github: [KeenS](https://github.com/KeenS) * GitLab: [blackenedgold](https://gitlab.com/blackenedgold) * [Idein Inc.](https://idein.jp/)のエンジニア + 2年半くらい仕事Rustを書いている

  • マクロクラブ Rust支部 | κeenのHappy Hacκing Blog

    マクロ・クラブのルール マクロを書くな それがパターンをカプセル化する唯一の方法ならば、マクロを書け 例外: 同等の関数に比べて、 呼び出し側が楽になるならば、マクロを書いても構わない κeenです。レーシックを受けようとしたら角膜が薄くて手術拒否されました。予定が狂って時間が空いたのでブログを書きます。 冒頭のルールはプログラミングClojureに出てくるマクロの書き方の指南です。 Rustのマクロって色々できるんだよという記事を書くにあたってマクロに一日の長があるLispの知見を引用されていただきました。 ルールにあるとおり、マクロは関数と違ってRustの第一級オブジェクトでないので扱いづらいですし体がコピーされるのでコードサイズも膨らんでしまいます。 よく考えながら使いましょう。とはいってもRustの構文はLispに比べると複雑ですし型やパターンマッチなどLispに存在しない構文要

    マクロクラブ Rust支部 | κeenのHappy Hacκing Blog
  • RPythonについて軽く | κeenのHappy Hacκing Blog

    κeenです。これは 言語実装 Advent Calendar 201713日目の記事です。 RPythonやPyPyについて勘違いしてる人向けに誤解を解こうかと。あんまコードは出てこないやつです。 いきなり話が逸れますが、PyPyとRPythonの話前に二村射影を知っておくと理解が深まるかもしれないので触れて起きます。 二村射影と部分評価 詳しくはWikipediaを見て下さい。 ここでは直感的な話をします。 第一: インタプリタとExecutable インタプリタは抽象的にはソースコードと入力データを受け取って出力データを出しています。 +---------+ +--------+ | in/data | | source | +---------+ +--------+ | | +-------------+ | interpreter | +-------------+ | +--

    RPythonについて軽く | κeenのHappy Hacκing Blog
  • require, ASDF, quicklispを正しく使う | κeenのHappy Hacκing Blog

    κeenです。最近のCommon Lispのパッケージ管理はql:quickloadしか知らないという方も多いのではないでしょうか。しかしそれだけでは機能が足りないこともあります。Common Lispには様々な管理システムがあるので整理しましょう。 provide, require 同じファイルを読み込まないための原始的なシステムです。Common Lispの標準の機能です。(require 'foo)がファイルをロードし、ロードされたファイル内で(provide 'foo)しておくと2回目以降の(require 'foo')はファイルを読まずにすぐさま返ります。 ここで問題なのがrequireがどこのファイルを捜しにいくかは処理系依存なところですね。なので生のrequireは使えないと思っておいた方が良いでしょう。 ASDF 3 Another System Definition Fa

    require, ASDF, quicklispを正しく使う | κeenのHappy Hacκing Blog
  • 割と処理系ポータブルなCommon Lisp実行可能ファイルを作る | κeenのHappy Hacκing Blog

    κeenです。Lisp Advent Calendarはもう枠埋まっちゃったので普通にブログで。 コマンドラインから実行可能なLispファイルをそれなりに多くの処理系で動くように作る話。 この話はCIMの生い立ちとも関連するんだけどシェルからLispを使いたいときは #!/usr/bin/env sbcl --script ... なんて書いてた人も多いんじゃないかと思うんだけどこれは色々問題がある。 envは環境に依っては/usr/local/bin/envだったりする envは環境に依っては複数引数を取れない。“sbcl –script"という名前のファイルを捜しにいく sbclでしか動かない この問題の扱いは一応解決策がある #!/bin/sh #| exec sbcl --script "$0" -- "$@" |# ... 3行目の#|がシェルのコメントでありLispのブロックコ

    割と処理系ポータブルなCommon Lisp実行可能ファイルを作る | κeenのHappy Hacκing Blog
  • 1