.blog

脱よわよわエンジニアを目指すブログ

Go の文字列結合が遅い理由 ― Count and Say で学ぶ高速化の要点

概要

  • LeetCode の “Count and Say” 問題で、Go 言語における string[]byte の性能差が顕著に生じた。
  • 自前で書いた RLE(Run-Length Encoding 風)実装では 8 ms、公式サンプルでは 0 ms。
  • この差を生んだ原因は、文字列のイミュータビリティとメモリ割り当ての仕組み、数値変換コストだった。
続きを読む

hatena.go #2 に参加しました

hatena.go #2 にオンラインで参加しました。

connpass.com

hatena.go とは次のイベントです。

はてなではMackerelやはてなブログをはじめ、さまざまなサービスでGo言語を利用しています。また、Goサブ会というチーム横断組織で定期的にGoにまつわる知見を交換しています。 このイベントでは、実際にはてなでGoをプロダクション運用して得た知見をお話しします。

【読書感想】プロジェクト駆動の情報整理術―『SECOND BRAIN 時間に追われない「知的生産術」』

『SECOND BRAIN 時間に追われない「知的生産術」』では、情報管理と知的生産を効率化するための中心的な手法として、CODEとPARAという2つのメソッドが紹介されています。以下に気になった箇所をメモしておきます。

str.toyokeizai.net

続きを読む

【TypeScript】クロージャ・カリー化・部分適用bindの違いを整理する

以前Zennで「クロージャというよりも bind で束縛した感じの…カリー化に近いのでは?」というコメントをいただきました。
コメントをきっかけに改めてコード例と構造の違いをまとめました。

TL;DR

  • どれも「関数を返す関数」で外側で一部の値を固定する技法
  • 技術的にはすべてクロージャを利用している
  • 設計パターン的には以下のように分類:
    • クロージャ:値や設定をスコープに閉じ込める仕組み
    • カリー化:n引数関数を1引数ずつ返す関数の連鎖に変換
    • 部分適用:多引数関数の一部の引数を先に固定し、新しい関数を返す
続きを読む

【JavaScript】遅延実行と即時実行の違い

コールバック関数を渡すべき処理に関数呼び出しを渡してしまい意図した動作にならない。開発中によく間違えたので、備忘録代わりにまとめます。

TL;DR

  • 「関数を渡す」= 遅延実行、「関数を呼び出して結果を渡す」= 即時実行という違い
  • 関数そのものを渡すか関数の呼び出し結果を渡すかで実行されるタイミングが異なる
  • 必要なときに関数を実行するなら関数を渡す。今すぐ実行したいなら関数をコールする
続きを読む