関数からの戻り値のオーバーヘッドが気になったので調べてみた

モチベ

Rust では以下のようなコードはコンパイルでエラーになります。

fn func1() -> &'static String {
    &String::from("test")
}

fn main() {
    println!("{}", func1());
}

コンパイル結果

error[E0515]: cannot return reference to temporary value
 --> src\main.rs:2:5
  |
2 |     &String::from("test")
  |     ^--------------------
  |     ||
  |     |temporary value created here
  |     returns a reference to data owned by the current function

エラーの通り、関数内で作成した値の参照を返すことは基本的にできません。 なので、値を返したければ、値そのものを返すようにしないといけません。

fn func1() -> String {
    String::from("test")
}

fn main() {
    println!("{}", func1());
}

↓実行結果

test

ただ、値を返すとなるとコピーのオーバーヘッドが気になるところですよね。 ネットでも同じようなことを気にされている方がいらっしゃいました。

Function returning a String, does it copy the value? - help - The Rust Programming Language Forum

回答者の方は、「値返しの場合はCopyやcloneは発生せずMoveが発生するだけだから、そこまで気にするオーバーヘッドは発生しないから気にしなくていいよ」 という回答をされていますが、とはいえMoveが発生するということは新しくメモリを確保してそこに移動するってことなので、ある程度はパフォーマンスの低下が発生するのでは?と思ったのでした。

調査

簡単なタプルを作って、関数の戻り値のアドレスがどう変化するのかを見てみました。

#[derive(Debug)]
struct MyStruct(i32, Vec<i32>, i32);

fn dump(title: &str, x: &MyStruct) {
    println!("{}", title);
    println!("  x      : {:p}", &(x));
    println!("  x.0    : {:p}", &(x.0));
    println!("  x.1    : {:p}", &(x.1));
    println!("  x.1[0] : {:p}", &(x.1[0]));
    println!("  x.2    : {:p}", &(x.2));
    println!();
}

fn func1() -> MyStruct {
    let x = MyStruct(2, vec![1], 4);
    dump("in func1()", &x);
    x
}

fn main() {
    let mut x = MyStruct(1, vec![2], 3);

    dump("first x", &x);

    x = func1();

    dump("second x", &x);
}

結果↓↓↓

first x
  x      : 0x64f7bf278
  x.0    : 0x64f7bf498
  x.1    : 0x64f7bf480
  x.1[0] : 0x12a4c1591f0
  x.2    : 0x64f7bf49c

in func1()
  x      : 0x64f7bf218
  x.0    : 0x64f7bf4d0
  x.1    : 0x64f7bf4b8
  x.1[0] : 0x12a4c159210
  x.2    : 0x64f7bf4d4

second x
  x      : 0x64f7bf278
  x.0    : 0x64f7bf498
  x.1    : 0x64f7bf480
  x.1[0] : 0x12a4c159210
  x.2    : 0x64f7bf49c

結果から分かることは、

  • 関数から戻り値は別の場所にムーブされている
  • 構造体内のベクタ変数の実態はムーブされず、ベクタ変数への参照のみがムーブされている

推察

ここから察するに、『関数からの戻り値はシャローコピーのみが発生している』ということですかね。 ディープコピーじゃないからパフォーマンス的にもそんなに気にすることじゃなくて メモリ的にも優しいよって話なのかもですね。

ベクタ型内の要素をループ内で借用してループの外で使う場合はベクタ変数を借用してループを回そう

今回のソースコード

struct A {
    val: i32,
}

fn main() {
    let mut a_list: Vec<A> = vec![];
    for i in 1..10 {
        a_list.push(A { val: i });
    }

    let mut inner_elem = &A { val: 0 };

    for a in a_list {
        match a.val {
            3 => inner_elem = &a,
            _ => {}
        }
    }

    println!("{}", inner_elem.val);
}

上記のようにベクタ型変数の要素をループの中で借用してループのスコープの外の変数に束縛するとコンパイルエラーが発生します。

   |
16 |             3 => inner_elem = &a,
   |                               ^^ borrowed value does not live long enough
...
20 |     }
   |     - `a` dropped here while still borrowed
21 | 
22 |     println!("{}", inner_elem.val);
   |                    -------------- borrow later used here

こういう場合は、ループを回すおおもとのベクタ変数を借用して回すと解決します。

struct A {
    val: i32,
}

fn main() {
    let mut a_list: Vec<A> = vec![];
    for i in 1..10 {
        a_list.push(A { val: i });
    }

    let mut inner_elem = &A { val: 0 };

    for a in &a_list {
        //   ^ ここの & が無いとコンパイルエラーが発生する。
        match a.val {
            3 => inner_elem = &a,
            _ => {}
        }
    }

    println!("{}", inner_elem.val);
}

【読書感想ブログ】ラブカは静かに弓を持つ【ネタバレあり】

ラブカは静かに弓を持つ | 安壇 美緒 |本 | 通販 | Amazon

以前紹介させて頂いた「5A73」同様、こちらも千原ジュニアYouTubeのチャンネルでカモシダせぶんさんが紹介されていた書籍です。

JASRACヤマハ音楽教室が裁判で争っているのはご存じでしょうか?(私は知りませんでした)

ヤマハ音楽教室の講師が生徒に教える場合に演奏することは公衆の面前での演奏に該当するため音楽教室側は著作権料をJASRACに支払わなければならない。ということらしいです。私としては、トンデモな難癖な気持ちもありますが、現状最高裁まで判断が持ち越されているぐらいには意見が分かれているようです。これでJASRAC側が勝ってしまったら色々なところに波及しそうな気がしますね。できればヤマハ音楽教室側に勝ってもらいたい気持ちがありますが、著作権料を徴収することで生活できている人たちもいることを考えると複雑な気分ですね。

ということで、そんなJASRACヤマハ音楽教室の抗争を題材にした話(もちろん名前は変えてあります)なのですが、主人公はJASRACの社員。上司に命令されて音楽教室に生徒として潜入して講師が無断で音楽を演奏してる証拠を集めるように言われます。要は潜入調査(スパイ)ですね。スパイものってなんか惹かれるものがないですか?007であったり、SPYxFAMIRYだったり。(SPYxFAMIRYは違うかw)

なんしか、私は、ばれるの?ばれないの?どうなっちゃうの~っ!?ってドキドキしながら次の展開を読むことができるので気になって一気に読んじゃいます。

主人公はチェロの生徒として2年間潜入するわけですが、講師の人もいい人で、同じ講師に教えてもらっている生徒の人たちとも飲み会で仲良くなっていきます。その中で、教室に通うことが楽しくなっていってしまう主人公は、自分がこの人たちを騙しているんだという罪悪感と戦いながら、毎回レッスンではボールペン型のボイスレコーダーにレッスンの内容を記録して上司に提出することになります。

こういう二面性を持ったまま生きることってなかなかに辛いことだと思うんですよね。私ならすぐに心がすり減ってしまいそうになります。人間って基本正直者な生き物だと思うんですよね。嘘をつくぞ!と気合を入れないと嘘は付けない。ましてや、好意を持っている人に嘘をつき続けないといけないとなると正気ではやってられないんじゃないか?と思います。

主人公がレッスンに通い始めて数ヶ月経ったある日、音楽教室内で発表会をすることになり、その曲を決めることになります。主人公は自分では決めれないので、講師の人に選曲をお願いするのですが、選ばれた曲が昔の映画『戦慄きのラブカ』の劇伴として使われていた曲。映画『戦慄きのラブカ』はスパイ映画らしく、今の主人公ともかぶるところがあるというのがにくい演出ですよね!!

また、この作者のクセなのか、心の描写が特徴的な部分がいくつかあって、例えば、主人公はチェロにちょっとしたトラウマがあって、チェロを見ると動機が激しくなってしまうのですが、その描写が「心臓が耳の横までせり上がって来たかのように、ボン! と音が大きく弾けた」という表現になっていて、心臓の鼓動を表す表現に「ボン!」という表現はなかなか使わないなぁと思ったのが印象的でした。この小説内でも度々「ボン!」は使われていて、単純に作者が好きなだけなのか?とも思っていますが。。。

それ以外にも、美人社員が序盤に言い寄ってきて不思議に思っていたのですが、後半でまさかの絡みがあって「そうきたか~!!」という感じでした。あまり、ネタバレを言うのもアレかと思うので、どういう展開になったかは皆さんで読んで確かめてみてもらえればと思います。

まとめ

やはり、本好き芸人のカモシダせぶんさんがオススメされる小説なだけあって、序盤から楽しめる作品でした。人を騙すことと人間の信頼関係について思いを張るとともに、人間は基本的には正義感も持っていて、誰も騙したいから騙しているわけではないのだろうなぁということを思ったりしました。できるだけ嘘をつかない人生でありたいものですね。

【読書感想ブログ】ショートショート実験室

ショートショート実験室 | 田丸雅智 |本 | 通販 | Amazon

ショートショート実験室」というからには短編集なのだということはわかるけど、「実験室」とはどういう意味なんだろう?作者の実験的な技法なりを用いた短編集なのだろうか?そういう興味本位からこの本を手に取りました。最初の物語は「二酸化炭素バスターズ」。ある男性が朝散歩に出てみると、大きな掃除機のようなものを背負って何やら吸い込んでいる男性と出会う。掃除機の男性に話を聞くと地球温暖化対策の一環で大気中の二酸化炭素を吸っているのだと言う。いくつかの問答の後、散歩中の男性も二酸化炭素バスターズに入りたいというのだが。。。

1、2編読んでなるほど環境問題を取り上げて風刺を利かせたファンタジー小説であり、こういう風に環境問題に取り組んでみたらどうだろうか?という実験も兼ねているのだろうなと思い至りました。なかなかこういった発想で物語を夢想したことがなかったので、面白い切り口だなぁと思いながら読み進めることができました。

あとがきを読んで知ったのですが、作者の田丸雅智さんは現代のショートショートを代表する作家さんらしく、多くの短編作品を世に出されている方のようです。Amazon にも多くの書籍が販売されていました。

www.amazon.co.jp

また、noteでショートショートが書けるカードゲームなんかも発売されているようです。

www.amazon.co.jp

いろいろチャレンジングなことをされている方で、興味深い人だなぁと思いました。

話を「ショートショート実験室」に戻しましょう。全短編にはちゃんとオチがあって、そのオチが「ははぁ、なるほどなぁ」と思うものもあれば「ん?これはどういう意味だ?」というものもあり、短編を読んでから次の短編を読む間に少し時間を設けて「うーん」と考えてしまうこともありました。例えば、「砂モデル」という短編がありまして、砂がパーツのプラモデルが駄菓子屋で販売されていて少年がそれを購入し一生懸命組み立てた後、できたと思って寝て起きたら砂になってなくなっていて、おばあちゃんに聞いてみると、波にさらわれてしまったんだねと言われてしまいます。少年はなぜかその儚さに魅了されて何度も砂モデルを買っては組み立て、買っては組み立てしていたが、少年の心はいつぞやからか砂モデルからは離れていき、少年は大人になる。大人になったある日、その少年は物置の奥からまだ組み立てていなかった砂モデルを発見する。久々に組み立ててみるかと箱を開けると、パーツは一つも見当たらない。あるのは波にまかれて舞い上がる黄色い砂だけであった。。。そういう話なんですが、皆さんはオチの部分をどういう解釈をされますか?私は地球温暖化によって海水の水位が高くなってしまって当時の砂浜だったところが海水に満たされるまでに水位が上がってきてしまって組み立てる前に波にさらわれてしまった。というオチに思えました。こういうオチなのかな?と考えるのもこの本の面白いところかもしれませんね。皆さんも、ショートショート実験室を読んでオチを楽しむとともに、環境問題についても考えてみてはどうでしょうか?

最近本を読むようになって、僕は短編集が性に合っているのかなぁという気がします。寝る前に数ページ読んで、眠くなったら寝る。そういう本の読み方をしているので短編集はそのサイクルにちょうど合うからなんでしょうね。今後も田丸雅智さんのショートショートは読んでみようと思います。それではまた。

【読書感想ブログ】おもろい話し方 ~芸人だけが知っている受ける会話の法則~

今回読んだ本

おもろい話し方 芸人だけが知っているウケる会話の法則 | 芝山 大補 |本 | 通販 | Amazon

この本を選んだきっかけ

友達とのバドミントンとの帰りにふらっと立ち寄った本屋さんに平積みされていて「おっ」と思ったので手に取りました。基本的にコミュニケーションに関する本は気になるので、平積みされていると手に取ってしまいます。

簡単な感想

作者の「芝山大輔」さんはネタ作家としても活躍されている方ですが、昔はあの「フワちゃん」とコンビを組んでコントをされていたこともある元・芸人です。そんな芸人のノウハウを知っているからこそ、おもろい話し方とはどういうものかがわかりやすく書かれています。特に第4章の「すべらない話の秘伝レシピ」が興味を惹かれました。普段から「ちょっとおもしろい瞬間」にアンテナを張っておくことが大事で、「ギャップを感じた瞬間」「誰が言うてんねんと感じた瞬間」「〇〇すぎる人に注目」「自分の失敗をメモ」それらちょっと面白い瞬間を集めて「ちょい盛り」して話すのがいいらしいです。ちょい盛りの方法やネタの添削も載っているので勉強になります。

まとめ

これからはネタ帳を持ち歩いて、ちょっとおもしろい瞬間をメモしていくのも面白いと思いました。それを精査してどこかで話せる自分だけの「すべらない話」ができるといいなぁ~。

【読書感想ブログ】 5A73 【ネタバレあり】

今回読んだ本

5A73 | 詠坂 雄二 |本 | 通販 | Amazon

この本を選んだきっかけ

いつものようにYouTubeを見ていると、おすすめに「千原ジュニアYouTube」の動画が出てきて、ふとその動画を見ると「カモシダせぶん」というお笑い芸人との対談の動画でした。「カモシダせぶん」は無類の本好きで自宅に3000冊の収蔵していたのですが、火事に合いほとんどの本が焼失したというエピソードを持つ芸人です。その芸人が千原ジュニアにお勧めする本の中の一つにこの本「暃(5A73)」があり、幽霊文字をテーマにしている本ということで仕事がら文字コードを触ることがあることから興味を持ちました。

簡単なあらずじ

とある自殺志願者から紡がれる自殺の連鎖。すべての死体にはタトゥーシールで「暃」が刻まれていた。調べても読みも意味も分からないこの文字に何の意味があるのか?二人の刑事はその関連性を追うことに。様々な調査の末、ヘッドフォンの男がすべての自殺者に関連していることを突き止める。ヘッドフォンの男は犯人なのか、それとも。。。?

面白かったところ・感情が動いたところ

  1. やはりまずは「暃」という意味も読みもない文字を題材にして話が進んでいくというところが面白かったですね。二人の刑事が自殺者に刻まれたこの文字がどう関係しているのかを調査していくのですが、上の文字の「日」と下の文字の「非」がどちらも「ヒ」と読めるからそう読むのか?とか、「日に非ず」という意味で「ヨル」と読むのではないか?とか「罪」に似ていることからそういった意味で使われたのではないか?とかいろいろな案をだしあっている刑事たちを見ていると、こちらまで「どういった意味が隠れているのだろうか?」と色々考えてしまいました。それがきっと作者の思惑だったのかなと読み切った今となっては思いますが、そうやって読みながら色々勘案するのはミステリー小説の醍醐味だなと思います。

  2. 章立ての構成も面白く構成されていて、刑事2人の捜査の章と各自殺者の章とが交互に章になっていて少しずつ謎が紐解かれていく様子がきちんと描かれていて、見ているこちらを飽きさせないように作られていました。自殺者はそれぞれ死んでいった順番に登場するのではなく、二番目に死んだ「湯村文」から始まっていて、一番目に自殺した「尾倉陸久」と出会うところから始まり、尾倉の自殺現場を湯村が発見してそこに書かれている「あの文字」を発見し、そこからどんどん「あの文字」を次の自殺者にバトンのように受け継いでいくというストーリーになっています。また、なぜ自殺者は「あの文字」を体に書いて自殺していくのか?という謎も最後の最後までわからない構成になっていて、大変読みごたえがありました。

  3. 最後の結末がほんとに予想だにしないというか、賛否両論ありそうな結末だったなと思います。読み終えた後にこの本のレビューサイトを観ましたが「こんなのミステリー小説じゃない」という人もいて、「確かになぁ」と思う反面。こういう「ミステリー小説があってもいいんじゃないか?」と心の中では思えるいい作品だったのかなと思います。

この本のテーマ

「暃」この文字、あなたならどう読みますか?それがこの本のテーマだと思いました。

自分の体験談や、社会で起こっていること

JIS規格に収録されている漢字の総数は約1万。色々な古い文献で使われている漢字を一つ一つ拾い集めて「これは一緒」「これは違う」というように手作業で割り振って最終的にこれで行きましょうとなったのがJIS規格です。やはり人の手で振り分けるわけですから間違いがあるのは当然で、幽霊文字が12文字のみというのは逆にすごいことなのではないかと思います。私はテストエンジニアですが、10000件テストして、テストミスが12回で抑えられるか?というと不安しかありません。逆にたった12文字で抑えられたことは偉業なのではないかと感じます。写真に写りこんではならない何かのように、この世のものではない何かがJIS規格に紛れ込ませた何か、そういう妄想を掻き立てるのも致し方がないと思わせる異様さがあります。

自分の意見

この文字をネットで調べると「ヒ」という読みが出てきます。そして「杲」の誤植なのではないか?ということも記載されていて、Wikipediaにはこの文字は幽霊文字であるとしっかり書かれています。ただ、ここで調べ終わらずに、いろいろな妄想を膨らませて、この作中の登場人物のように「こういう解釈もできるよね」「いやいや、こういう解釈はどう?」みたいにいろんな人と話しながら自分たちで意味づけしていくのも面白いのかなと思いました。昨今はインターネットで調べるとすぐに答えが出てくる時代ですが、その時代にあって、こういうある種の謎めいたものはまだまだ眠っている気がします。そういう謎が掘り起こさて日の目を見る機会が与えられるというのはとても興味深いのではないでしょうか?

ちなみに私は「暃」がダンスしている人に見えます。にしきのあきらがよく切る腕にひらひらがついているような服で踊っているような。そいういう情景が見えます。

【読書感想ブログ】雑談の一流、二流、三流

今回読んだ本

雑談の一流、二流、三流 (アスカビジネス) | 桐生 稔 |本 | 通販 | Amazon

この本を選んだきっかけ

私はよく『中田敦彦YouTube大学』を観ているのですが、その中で紹介されていた本で、中田のあっちゃんの説明も面白く勉強になったので、実際に自分でも読みたくなってこの本を手に取りました。

簡単なあらずじ

作者の桐生稔さんは高校の時は成績優秀で自分でも優秀だと思っていたそうですが、新卒で入社三ヶ月で左遷されてしまいます。左遷先の飛び込み営業の仕事をこなしていくうちにみるみる営業成績が伸び、最終的にはエリアマネージャーとなり、その後、コミュニケーションスクールを立ち上げて、全国展開するまでになっていらっしゃいます。

最初は営業成績が良くなかったところから、コミュニケーションスクールを経営するまでになったこの方だからこそ、コミュニケーションを苦手としている我々にわかりやすく雑談の何たるかを説くことができる。そんな本になっていると思います。

また、各章が雑談のはじめ方から終わり方に順番に対応していて、各項目も「3流はこうする、2流はこうする、では1流は?」というフォーマットになぞらえて構成されているので大変読みやすく構成されています。

面白かったところ・感情が動いたところ

  1. 私はやはり話の始め方や広げ方、盛り上げ方の点が苦手なので、そのあたりが特に気になりました。例えば、朝のエレベーターでばったり会った同僚との会話とかは、「今日は暑いですね」とか天気の話題になりがちですが、そうではなくて「相手に焦点を当てた会話をする」というのが一流らしいです。今なら「お盆何かしましたか?」とか「昨日何食べました?」みたいな会話から始めたほうが会話の始まりがよさそうな気がします。そういった感じで、会話の広げ方も自分のことをメインで話したりするのではなくて、相手を中心に話を広げると会話が広がるようです。
     
    基本的に自分は自分に一番の興味がある。
     
    という考えが基本にあるようです。

  2. 私は基本話の引き出しが偏っているか引き出し自体が少ないです。例えば、釣りについてしゃべっているとして、あまり釣りをしないのですぐに会話が途切れてしまいます。そういった場合は「ネタ連想法」というのがおすすめらしいです。釣りの例でいえば、「魚と言えば刺身ですが、お寿司のネタだと何がお好きですか?」とか「海釣りとかされるんであれば船舶免許とかお持ちなんですか?とるの難しくないですか?」みたいな会話にシフトさせることができそうです。「〇〇と言えば△△」という連想力を鍛えておくことで雑談力が上がりそうですね。そういう意味では親父ギャグが大体ダジャレなのは似たワードを連想して雑談力を鍛えている人たちがサラリーマンには多いってことなのかもしれないですね。
     
    雑談力を広げるなら親父ギャグを極めよ
     
    ということが言えそうですね。

  3. 最後に思ったのは「ポジティブであれ」ということ話してて否定的なことしか言わなかったり相手を貶めるようなことを言う人とは会話してても楽しくないですよね。なので、相手が否定的なことを言ってもできるだけ褒めてあげること。褒めるところがなくても、以前と比べてよくなっているところを褒めるといったようにできるだけポジティブに会話を勧められるようにしましょうというのが大筋にあるように思いました。現代社会において叱ったり怒ったりすることはよくないとされているだけに褒める技術は雑談の領域でも重要になってきているんですね。

この本のテーマ

この本はずばり一流の雑談をする方法について書かれています。当たり前ですが。

自分の体験談や、社会で起こっていること

私は雑談が苦手です。例えば「bamchohさんは休みの日とか何されてますか?」とか聞かれても、「いやー特に何もしてないですね~。基本寝てます」とか最悪の答えをしてしまいます。会話を広げるつもりがないんだなと相手に思わせていたんだろうと今更ながらに反省しています。あと、何か面白いことを言わないといけない。スベりたくない。という気持ちから何も言えなくなる時もあったりしますが、「雑談」はそういうものではなく、「雑」なトークをするだけでいい、普通の話をすればいい。というのが少し心を楽にしてくれます。

この本の最後にも記載されていますが、ITが進化して、スマホで色々なことができるようになってしまい、家族間、友達間のリアルなコミュニケーションが減ってしまって、雑談の重要性も低くなっていっている現代において、ある場面ではやはりまだまだリアルなコミュニケーションは重要な位置にいると考えられます。ネット越しにビデオ通話で会話しても、やはり実際あって話してみるのとは全然違った印象を受けるものです。面接の場しかり、商談の場しかり、いろいろな場面でリアルなコミュニケーションは重要なのです。

自分の意見

基本僕は会話の中で聞き役になりがちです。しかも、相手にあまり興味を持たないため、会話もすぐに終わってしまいます。会社でも普段は一人で仕事をすることが多くコミュニケーションも最低限です。昔は飲みニケーションということで、飲み会が少なからずありましたが最近ではコロナの影響もありそういう場も少なくなりましたね。そういう意味でも雑談力というのはあまり必要とされなくなってきているのかもしれませんが、いざという時のために雑談力を鍛えておくということはやはり自分の宝になるのではないでしょうか。