くどはむと猫の窓スマートフォン用の表示で見るくどはむと猫の窓この広告は、90日以上更新していないブログに表示しています。Rust最近Rustを触っています。GCに頼りきって生きてきた身なので、普段通りのコードを書いていたところ高階関数を実装しようとしたところで見事にエラーに遭遇しました。未来の自分と、同じようなエラーに出くわした方のためにメモとして残しておこうと思います。バーション1.3.0です。Rustは結構頻繁に破壊的な変更が起きるようなので将来ここに書いてある内容は通らない可能性あり。簡単のために「"ほげー!"という文字列を返す関数」を返す関数hogeを実装するという目的で話していきます。}}以下のように怒られました。^~このあたりで上記のような書き方を見たのでこれでいけるものと思っていましたが、バーションアップの過程でダメになったようです。}}これは以下のようになにやら長文で怒られました。compile-timeSizedというトレイトを実装した型ではないということと、コンパイル時に固定サイズを決められない(持ってない)というメッセージです。どちらもコンパイル時に必要なサイズが分からないよということですね。一応(関数)型としては認識されてそうです。関数の引数や返り値はスタックに積むのでコンパイル時に各変数などに対してそれぞれどれだけのメモリサイズを確保していればよいかを分からなければなりません。i32とi64では割り当てられるサイズが違います。Sizedというトレイトはi32のように型だけではサイズが分からない型が、「どれだけのメモリサイズを確保していればよいか分かっているよ」ということを示すトレイトらしい。上のエラーメッセージを再度確認します。Stringな関数型はまず型からどれだけのメモリサイズを確保していればよいか分からない。Sizedトレイトも実装されていないのでスタックに詰めない。コンパイラの気持ち、分かってきた(嘘)スタックがダメならヒープに積め(置け)ばいいじゃないじゃあこの返り値である関数をヒープに置けばよいのではないか。ここで使えるのがBoxです。ヒープに置いていることを示すポインタ型のようです。Boxを使うとこのようになる。runするとほげー!いけました。所感的なこれで簡単な高階関数はできましたが、そんなカジュアルにヒープに置いていいのか?Box使っていいのか?ということが気になりました。GCに頼りきってきたせいでこのあたりの塩梅がよく分かっていない、自信がないのは本当にダメなとこですね...。僕の中で高階関数を使うといえばパーサーコンビネータが一番に出てくるので、Rustで有名なパーサーコンビネータを調べたところcombineというのが出て、その中でもちょろちょろ使われているよう。github.comRustは本当に色んな機能があるので、多分これ以外にも実装方法があると思います。「これは良くない」「こっちの方がいい」とか「こういうやり方もある」なんかがあったら是非教えてください。前回のプログラムを改良してサーバ/クライアントが送信するメッ...2014-11-05【Golang】jsonの内容をデコードする前回のプログラムを改良してserverのIPとポート番号をハードコ...2014-11-03【Golang】Socket通信するプログラムを書いてみた最近Go言語を勉強しています。kudohamuid:kudohamukudohamuといいます。プログラムについて勉強中の情報学徒。未熟者なので皆さんから色々教えていただきたいです。(9)月別アーカイブ参加グループプログラミングはてなブログをはじめよう!kudohamuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。