見出し画像

🎶蔵出しパターン#1 全行なめる


こういう本を読んだらソースが読めるようになるかと思ったが、現実は厳しくて、ソースを読むというか構造体やアルゴリズムを理解する方向性にいった。聞いたところによるとカーネルもほとんどはそういう写経でいわゆる縦横無尽にソースを闊歩して歩くというのとは事情が異なるようだった。

天翔ける龍の閃きのごとく願わくば呼吸するようにコーディングしたいと思うが、地頭に限界があるので、せめて仕事につなげたいと考えるが、嫌みを食らわないように仕事したふりする以外にそうそうお利口なことをする必要がない。

UMLやEE的な世界に位置すると思われたデザインパターンが、ビジネスロジックやらロジカル思考とかいったものとは別に、建築用語から始まってsmalltalkで完成をみると知ったのは最近だが、宣言や規定といった概念を持ち出さなくても、時々クエリやら正規表現が想定と違う動きをすることはある。そういうときのために「全行なめる」というイディオムを覚えておくといいのかもしれない。しかしなぜ”なめる”というのかは分からないが、外来語になおすならばシーケンシャルに処理するとなるのだろうか。


この本にも書いてあるが、世の中にはストリームと呼ばれる抽象的な世界があって、そこでは大抵シーケンシャルに次のデータを取り出せる仕組みがある。配列やフロントエンドに親しんでいる人は少しぴんとこないかもしれないが、少し上等にするとnextSiblingみたいな表現が大抵のファイル関係の関数やらメソッドには存在する。readnextみたいな感じとか、もはやnextともつかないでreadとかだけでもうそれはストリームの中の次のデータを取り出すというぐあいに。

全行なめるのは、あらかじめNode的なものが木構造でたいていはすべてつまっているhtmlの世界とはちょっと違う。データが少ないとほとんど気づかないが、数万行とか下手して数億行(ってあるか)とかになると、そもそも今自分が何行目にいるのかどうやって判断しようかとという気持ちになってくる。

それでCでもjavaでもpythonでもなんでもいいからこのあたりのことをうまいこと書いてある本で冒頭の本があったような気がしたが探してもアドバンスのほうしか出てこない。何か書いてあるか見てみる。

https://amzn.to/335agOT


前半が怒涛のgrep解説でその後リングバッファが出てきて最後は非同期処理の説明になる。全行なめるの話とはあんまり関係がなかった。

普通のLinuxでもそういった話は出てくるが、なんでバッファのことを気遣いながら少しずつ進化系を覚えるのかが動機付けできなかったのでここでは示さないが、とにかく入出力みたいなところの項目でreadとなっていたら次行に行ってくれるような処理をつかって全文を頭から尻まで読むみたいなことを全行なめるというということで納得してもらえたらよい。

rosettacodeに行けばだいたいみんなが知っている言語のサンプルがあり、さすがにpythonの例はシンプルだった

with open("foobar.txt") as f:
   for line in f:
       process(line)

withで囲んでforでインデントするのがpythonの書き方なのか、違和感はあるが別の書き方もできる。

import fileinput
for line in fileinput.input():
   process(line)

Javaは気合いれすぎてて、望んだサンプルではなかった、javascriptに至っては断り書きがないがnode.jsのサンプルみたいだった。



お願い致します