Humanity

Edit the world by your favorite way

リストについて

昨日に引き続き、またまたネタを日記ブログから持ってくるパターン。 何となく読んだり見たりしている内に頭に思い浮かんだものを書き出した文章の練習みたいなもの。 データ構造としてのリストだったり、もっと抽象的な数珠繋ぎとなった何かについて書いてたり、まとめるために書き出した文章の割に話がまとまっていない。

要素が隣接している必要がない

リストと配列は様々な点で違う。 まずリストは各要素がメモリ上で隣接している必要がない。 つまりリストは配列のように連続的なメモリを取れない状況でコンテナを実現する方法でもある。 細かい要素の確保と廃棄が頻繁に起こるソフトウェアで、あまりメモリが潤沢でない組込み環境を想定する。 また廃棄と確保のサイズが同一のものだとする。 すると廃棄した後の確保が(メモリのコンパクションを行わずとも)確実に行える保証ができる。 具体的に言うと、あるクラス・構造体 A を廃棄した後、A を再び確保しようとした時に必ず確保できる。 よってコンパクションのオーバーヘッドを避ける事ができる(けど割り当てる時には空いてる場所を探すんだからコンパクションを行った方が効率が良いような気がする…)。

もちろんランダムアクセスには弱いので、そこは工夫する必要がある。 例えば循環リストにして頭と尻を繋げれば、最悪 n/2 の時間で目的の位置に辿り着ける。 ただ、輪っかの反対の位置のポインタを保存してすぐ飛べるようにしたり、要素数に比例してポインタの数を 2個、4個、8個 … と増やしていったりと工夫すれば、ほぼ対数時間で(二分探索的に)目的の位置に飛べるような気はする。

要素のようなリスト

次に、これはデータ構造としてのリストとは別だが、要素のようなリストというものが考えられる。 どういう事かというと、例えば関数のリストがあったとして、先頭の関数を呼べば後続の関数が順番に呼ばれるという関数が作れる。

それは構造的にはリストと同じなのだけど、コンテナではなくただの要素(関数)として扱える。 コールグラフから見ればリスト、データ構造としては関数。 関数とリストを組み合わせる事で、ただの要素かと思ったら入り口で何個も連なった要素の先頭ポインタだった、という事ができる。 再帰も同じ構造。

Lisp のコンスセル

今度は Lisp のコンスセルのデータ構造の話。 Lisp のセル1つは CAR 部と CDR 部に分かれていて、ポインタ2つだけで表せる。 Lisp のリストの値というのはリストの先頭のセルなので、メモリ上ではポインタ2つの構造体1つ分で表せられる。 ELIS という Lisp マシンではメモリ・レジスタと呼ばれるものでセル1つ分を表せるらしい。 セル1つはアトムかリストを(参照ではなく)保持する。 つまりアドレスによるメモリの間接参照ではなく、セル1個分の構造体をメモリ・レジスタ上に記憶する。 この構造体の大きさはマシンによって異なるが、大体の内容としては「タグ + データ部」で、タグは「アトムかセルか」「型情報」「ガベージコレクション用の情報」等の情報を保持する。 また、データの呼び出し幅を広げて CDR 部を一気に読み取ってメモリ呼び出しを減らす等、正に Lisp を効率的に実行するためのアーキテクチャといえる。

コピペに関する懺悔と感謝

最近細かいネタが無いので日記ブログから引っ張り出して無理矢理エントリにしてみる。

  • 共通ライブラリを作ると「ライブラリ側で想定していなかったので…」という事態が起こり得るが、頻繁に仕様変更が起きる現場だと、強い心がないと共通ライブラリは作りたくないという気持ちになってしまう(追従するコストが大きい)。
  • まず言い出す事に対する心理的障壁も当然ある、が…
  • 新しいコードが沢山生まれる一方、古いコードも沢山生まれてしまうのでそれをメンテナンスしないといけない
    • このコードもう使ってない画面のコードなんですけど…
    • しかし残したまま誰かがそれをコピペして新しいコード書き出してしまったらアウトなのでしぶしぶ修正
  • コピペなら持ってくれば動く。コピペ最高。結婚したい。
  • かくして世界はコピペだらけになった
  • 似たような画面から似たような HTML, CSS, JS を持ってくるだけの簡単なお仕事です
  • バグがあった場合の横展開で死ぬ…かと思いきやそんなになかった(個人の感想です)
    • あってもプロジェクト内ソース全検索で何とかなる(した気になる)
    • 深刻なバグの場合は検索結果のリストと対応を書いた温かみのある Excel ファイルを作ると謝罪の気持ちが感じられて良い
    • フィクションです
  • 共通化はむしろ CSS の方がつらい
    • 肥大する common.css
    • Chrome DevTools がなければとっくに廃業してる
    • FLOCSS?SMACSS?何それ美味しいの?

ろんぐらいだぁす!読んだ

最近ロードバイクを譲り受けて、自転車沼にズブズブと浸かり始めている。

で、丁度いいので、ろんぐらいだぁす!という今現在アニメ化されている原作漫画を Amazon で探してみたら Kindle の読み放題のサービス(もうすでに名前を忘れた)で最新刊以外読み放題の対象になっていた。

ろんぐらいだぁす!: 1 (REXコミックス)

ろんぐらいだぁす!: 1 (REXコミックス)

解約のタイミングをずっと逃し続けているのだけど、最近もククルカンという漫画が読み放題の対象だったり、何かと助かっているので今の所はそれなりに満足している。*1

ククルカン 1巻

ククルカン 1巻

そんな感じで一気に読んだのだけど、結構良かった。 というのも自分にとってはちょうどピンポイントで興味がある事だったからだけど。 なにせズブの素人なので手っ取り早く知識を得たい。 その点ろんぐらいだぁす!は自転車乗りにとってのあるあるネタ(とグルメ?)がメインな感じなので助かった。 まぁあるあるネタが実際に使えるかは別として、自分は早く「自転車乗り」の仲間入りしたかったので、ニーズに絶妙にマッチした。

ノリはまぁ Comic REX に乗ってる正統派(?)萌え系な感じだよねという感じで自分にとっては慣れたものだった(高校生の頃部室に Comic REX がたんまりあったので暇潰しに読んでいた)。 けど慣れてない人は抵抗を感じる人もいるかもな…な感じだった。

ちなみにアニメの方はなんか大変そうな感じになっているらしい。


内容をちょっと紹介すると、前述したように自転車乗りのあるあるネタが基本多くて、初心者がステップアップする段階的な雰囲気を掴めるので良かった。 最初はこんな失敗をしがちみたいなネタが沢山あって、多分これからいくつか踏み抜いていきそうな気がした…

あとツーリングスポットが沢山紹介されているのも良い。余裕ができたら行ってみるのもいいかも。ナイトライドはちょっとやってみたい。

それと、行った先の美味しい物も大体紹介されているんだけど *2、そもそも自分は外食をほぼしない(というかファストフードや牛丼屋以外の店に一人で店に入るのに抵抗がある)根っからの引きこもり気質なので、現時点では「良いですね」位の感想しかなかった…まぁ、現時点では。

*1:こっちの内容は、まぁキャラがかわいいので読んでたけど、途中で打ち切りになったらしく、検索で出てきた他の方のレビューの「この作者さんは話を広げすぎる」というのを見て確かに…という感じだった

*2:担当さんに毒された結果なんだろうなぁ…