スポンサーリンク

【IT】Linuxを生み出したリーナス・トーバルズが考える「優れたコード」とは何か? [田杉山脈★]

未分類
スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク

1 :田杉山脈 ★:2020/12/09(水) 22:10:29.77 ID:CAP_USER.net
プログラミングをする上で、コメントをきちんと残したり、わかりやすい変数名をつけたりして「読みやすいコード」を目指す作業は重要です。しかし、「読みやすいコード」と「優れたコード」の間には、時として構造上の大きな違いがあるのも事実。そんな「優れたコード」に対するLinuxの開発者リーナス・トーバルズ氏の考え方について、エンジニアのmkirchner氏が説明しています。

トーバルズ氏は2016年のTEDインタビュー内で「連結リストの実装方法」を例とし、自身の「優れたコード」に対する考えを説明しています。連結リストはデータを線形につなげたリストのことで、データを扱う構造のひとつ。具体的には「4」や「12」といった値そのものと「次の値」を示すポインタで構成される「ボックス」を順番につなげたものが連結リストです。

連結リストをC言語で実装したコードは以下。値そのものである「value」と次の値を示すポインタ「next」で「IntListItem」構造体が作られており、IntListItem構造体からボックスが生成されます。「IntList」構造体はリストの先頭を表す変数「head」を持っています。

この連結リストからあるボックスを消去する処理について、スタンフォード大学の計算機科学講義「Computer Science 101(CS101)」で紹介されていたコードが以下とのこと。

上のコードが行っている処理はこんな感じ。まずはコードの以下の部分で「消去したいボックス」をリストの先頭から探索します。連結リストはリストの先頭からしか値をたどることができないので、まずリスト先頭のボックスのアドレスを「cur」ポインタに格納し、「prev」ポインタはNULLで初期化。curポインタが消去したいボックスのアドレスと一致するまで、curポインタを次のボックスのアドレスへと移しながら照合していきます。

先ほどの処理のイメージを図で表したものが以下。ちょうどprevポインタとcurポインタがリスト後部のボックスへスライドしていくようなイメージです。

以下ソース
https://gigazine.net/news/20201208-linked-list-good-taste/

110 :名刺は切らしておりまして:2020/12/31(木) 15:32:15.43 ID:hoHtvhPp.net

他人が読みやすいコードと
かこういう他人への気配りって日本人てマジで日本人の得意分野やん。
なんで外人ばっか幅きかせて日本のITがないがしろにされてんだ?
日本のIT技術力もシナチョンがパクらなければもう少し付加価値とか
イノベーションいけてたと思うんやけどな…

17 :名刺は切らしておりまして:2020/12/10(木) 00:52:43.63 ID:O7Ah3Gqc.net

一見よくわからなかったけど、構造体のアイテムの「次(next)」ということで、
「前(previous)、現在(current)と次」と見てしまうけど、

”見方を変えれば”、

nextのポインタを見ているだけなので、直接ポインタのポインタとして、
ネクストが指す値をテストすればいいってことかなあ。

まーしらんkど

87 :名刺は切らしておりまして:2020/12/12(土) 01:59:40.91 ID:eZSNfslH.net

git じゃなくて github な
あくまでgitのサービスだから

7 :名刺は切らしておりまして:2020/12/09(水) 22:39:50.63 ID:LT0kIIel.net

>>5
Linux EoLになる
Linusはもう何もやってない
10年以上前から広報担当しかしてない
KernelのメンテナンスはRedHatがやってるし、非採用バージョンもRedHatがブランチを出してる
そもそも、debianが超優秀なのでLinusは用済み

34 :名刺は切らしておりまして:2020/12/10(木) 07:38:39.14 ID:AhpOjTnP.net

結構凡庸な気がするな

98 :名刺は切らしておりまして:2020/12/12(土) 22:35:09.45 ID:VFxib3Nx.net

>>97
Linuxが普及って?

50 :名刺は切らしておりまして:2020/12/10(木) 10:36:03.01 ID:zguu7azS.net

なるほどふむふむわかったわかった

113 :名刺は切らしておりまして:2020/12/31(木) 22:48:40.67 ID:GszFZNdP.net

>>58
今はメモリが使いきれんからな
だからPythonみたいな言語が出てきた

56 :名刺は切らしておりまして:2020/12/10(木) 12:27:51.84 ID:C9U28Mos.net

小ボケに対して意味不明なresされても困る(´・ω・`)

53 :大島栄城 :2020/12/10(木) 11:05:04.11 ID:ttQPI329.net

>>52
Linuxではなく、hp-uxだけどLVM
記憶領域管理、論理ボリュームマネージャ話だろ

プログラムを置く場所ないとどうしょうもないから

LinuxでもLVMもどうせクローンでやってそうだ

21 :名刺は切らしておりまして:2020/12/10(木) 01:15:50.61 ID:J3xH0wAA.net

C言語ではポインタの比較ってしちゃいけないんじゃなかった?
x86みたいなセグメントつきのアドレスだとおかしな事になる。

8 :名刺は切らしておりまして:2020/12/09(水) 22:56:39.27 ID:lalfKSee.net

NULLPO

76 :名刺は切らしておりまして:2020/12/11(金) 01:26:46.19 ID:HrlNdNqL.net

>>75
実際使うとびっくりするような挙動だらけだな

84 :名刺は切らしておりまして:2020/12/11(金) 17:39:53.32 ID:gV0XoZMC.net

>>38
お前がそれ以上のものを作ったことがないなら単なる僻みにしか見えんぞw

3 :名刺は切らしておりまして:2020/12/09(水) 22:24:08.28 ID:eXttlEXM.net

かと言ってメンテ性より効率性に拘りすぎたソースは逆に使いにくい
集団でコーディングする場合は

109 :名刺は切らしておりまして:2020/12/31(木) 15:05:49.46 ID:lsqIT4Op.net

UNIXって死滅しちゃったのかな

100 :名刺は切らしておりまして:2020/12/13(日) 10:43:27.33 ID:tHJUk5lV.net

>>98
サーバ考えりゃ十分普及してるね

59 :名刺は切らしておりまして:2020/12/10(木) 13:55:14.82 ID:q2+zL1Gi.net

リーナスさん、LinuxにAIを組み込まないのですか?

78 :名刺は切らしておりまして:2020/12/11(金) 01:49:08.91 ID:ThyZPUnk.net

>>70,73
Rocky Linuxに希望を託せ

42 :名刺は切らしておりまして:2020/12/10(木) 09:07:58.46 ID:eYmMVUhx.net

>>21
修飾子で明示してやれば何の問題もないけど?

61 :名刺は切らしておりまして:2020/12/10(木) 14:12:00.40 ID:D7B2xVep.net

>>24

蛾ッ

92 :名刺は切らしておりまして:2020/12/12(土) 08:03:27.76 ID:ugZJIdU7.net

Linusって日本語読みだとライナスだよね、ピーナッツで毛布持ってる子どもと同じ

101 :名刺は切らしておりまして:2020/12/13(日) 11:09:37.53 ID:sgpoOZaB.net

>>100
>>97からはジャンル限定ってのがRTOS以外には見えないからなぁ

85 :名刺は切らしておりまして:2020/12/11(金) 19:21:06.97 ID:i4py4T/g.net

MISLA-C準拠

99 :名刺は切らしておりまして:2020/12/13(日) 07:47:02.86 ID:bO76inot.net

>>30
出始めの頃から、カーネルだけじゃん!と揶揄されてたよね。

27 :名刺は切らしておりまして:2020/12/10(木) 01:51:37.22 ID:O/kczejv.net

そんなことより、スペースでのインデントとか、コードブロック開始時の
{ をいちいち改行して1行費やす書き方に辟易している。
コードの文字数や行数で金貰っているのが多いのか?

97 :名刺は切らしておりまして:2020/12/12(土) 22:24:04.40 ID:mPG6ibd1.net

>>96
> 新しい人が新しいものを始める時間はあったのに、まだ無いんだぞ。
2005年くらいまではまだLinuxに対抗する新しいOS作るメリットがあったけども、
それ以降はここまで普及しちゃうとOS部分はLinuxでいいやーって感じではある。
RTOSとか一部除いて。
天才はOS以外のところで力を発揮してほしい。

111 :名刺は切らしておりまして:2020/12/31(木) 18:17:27.82 ID:8pjjuWSW.net

>>110
日本のIT技術力が弱いのはシナチョン関係ねーよ
IT技術はもともと全世界に公開されてるんだから
活用できない日本人が馬鹿なだけ

86 :名刺は切らしておりまして:2020/12/11(金) 22:40:11.22 ID:9w8znf4P.net

このスレのやつらのリーナス過小評価すげえな
凄い人が集まってるんだな
でもsvnディスってgitを作ったりする辺りやっぱり凄い人なんだと思うけどな

64 :名刺は切らしておりまして:2020/12/10(木) 14:34:17.60 ID:4BTWYfMR.net

コードレビューしてくれるAIエンジンもついでにーーー!

13 :名刺は切らしておりまして:2020/12/10(木) 00:14:07.38 ID:MLah/xT2.net

リーナスのコードにある変数pは初期値とループ中で異なるコンテキストの変数
をポイントしてて可読性という意味ではベストとは言えない
単純連結リストではなく各ボックスがリスト内での直前のボックスをポイントする
変数 prev を持つようにするとそもそもループ自体が不要になることでより可読性が高く
コードもシンプルになり処理も早い(メモリー負荷が高まるデメリットはある)
古くは4.1BSDに実装されたTCP/IPスタック内で送受信データを保持するプロトコルヘッダー
とペイロードデータの抽象化構造体の連結リストをモデルにした議論があったよ

19 :名刺は切らしておりまして:2020/12/10(木) 01:02:22.22 ID:tGsCzTXv.net

変数名がpじゃなかったら完璧

52 :名刺は切らしておりまして:2020/12/10(木) 10:57:11.57 ID:C9U28Mos.net

AIは歌は上手いけどプログラムはダメじゃないか?彼女のスキルを完全把握してないけど

114 :名刺は切らしておりまして:2020/12/31(木) 23:30:00.68 ID:u9FaUXfw.net

>>103
そんな人いんの?
何も知らないアホだろ、それ。

2 :名刺は切らしておりまして:2020/12/09(水) 22:18:15.40 ID:RTL5tQs5.net

あんまり条件分岐を作っちゃいけないんだな。それは解る。

43 :名刺は切らしておりまして:2020/12/10(木) 09:16:43.42 ID:WeSqc1yk.net

>>1
CSTL リファレンスマニュアル
http://cstl.osdn.jp

list
双方向リンクリスト。任意の位置での要素の挿入・削除が高速だが、要素のランダムアクセスはできない。

14 :名刺は切らしておりまして:2020/12/10(木) 00:20:04.45 ID:SCHSpxjk.net

carとcdr

93 :名刺は切らしておりまして:2020/12/12(土) 08:23:33.03 ID:jquYNH7b.net

>>80
切っ掛けとしてタイミング良かったというのもあると思う。
同時に、Linuxがここまで大きくなったのは、Linusが何か持っていたからだろうね。

世界中の理解できないレベルのエンジニアから、OSSみたいな何でも言えてしまう場で尊敬を勝ち得たのは生半可なことではない。
彼らと技術的な議論をして、メッキが剥がれなかったのはLinusも本物だからだろうね。

118 :名刺は切らしておりまして:2021/01/03(日) 11:52:52.97 ID:8izqqKLt.net

カーネルだけあってもOSとしては動かないんだぜ、おばかさん

90 :名刺は切らしておりまして:2020/12/12(土) 06:52:02.39 ID:7SIwehje.net

昔、秋葉原のショップがリーナス夫妻を呼んでイベントやった時は
20人ぐらいしか集まらずに静かなイベントだったな
確かTurbo Linuxの発売イベントだった

75 :名刺は切らしておりまして:2020/12/11(金) 00:51:28.61 ID:FpNdM9w2.net

>>72
あるよ
ruby って言うんだ
あまりにも直観的にコードできるので
驚き最小の法則
なんて呼ばれる

38 :名刺は切らしておりまして:2020/12/10(木) 08:13:29.78 ID:QBurfjQl.net

コイツが作ったのはそんな大したもんじゃなかったけどな
「オープン&フリー」という点では画期的だったけど

28 :名刺は切らしておりまして:2020/12/10(木) 02:07:18.53 ID:smidZUMs.net

>>23
Win32APIでハンドルって単語がやたら出てきたのはそのことだったのか

20 :名刺は切らしておりまして:2020/12/10(木) 01:09:03.94 ID:+nAR4sQk.net

>>14
そうで コンス

106 :名刺は切らしておりまして:2020/12/17(木) 10:28:21.26 ID:PfyG4uVs.net

ポインタは誰でも理解できるがもっと噛み砕いて言うとそれはイケアで買い物する
時の商品アドレスである そしてここがイケアと若干違う部分であるが PC内部では
そのアドレス自体が商品棚に置いてあるのだ そしてまたアドレスの商品棚のアドレス
を置いてある棚もある この連鎖はプログラマがその気になれば無限に作れる
意味は無いがw まぁ実質はその辺の深さはパーサの仕様に拠る という感じか

79 :名刺は切らしておりまして:2020/12/11(金) 02:19:41.46 ID:DUCu1g8t.net

>>38
でもgit作って評価を上げたよね

62 :名刺は切らしておりまして:2020/12/10(木) 14:26:12.20 ID:UT/YdDOQ.net

>>2だけが読む価値のあるコメントだった

80 :名刺は切らしておりまして:2020/12/11(金) 12:51:00.96 ID:ezWHgrzc.net

linuxは作ったタイミングがすこぶる良かった
4.3BSDの訴訟問題が大きくて、リーナスも386BSDがあったらlinuxカーネル作ってなかったって言ってたはず
UNIX系のカーネル実装をある程度フルスクラッチで書ける能力のある人がどれだけいるかと言われれば少なくない
しかしそれを実際に実行し、モノにした人がどれだけいたかって所だね

51 :名刺は切らしておりまして:2020/12/10(木) 10:38:29.61 ID:JejNo8QF.net

AIでプログラムは組めるの?

88 :名刺は切らしておりまして:2020/12/12(土) 02:16:52.32 ID:oHgXmQ44.net

?

コメント

タイトルとURLをコピーしました