スポンサーリンク

【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/

66 :名刺は切らしておりまして:2020/12/10(木) 18:41:56.97 ID:iWCKGdvR.net

Cの教科書に普通に載ってる話だと思ったけど

11 :名刺は切らしておりまして:2020/12/09(水) 23:35:57.63 ID:IA5LH6VM.net

ポインタのポインタ

58 :名刺は切らしておりまして:2020/12/10(木) 12:45:56.34 ID:60bG552F.net

ポインタのポインタとか使わなきゃいけない時点で糞
このようなコードを書いていい気になってるのは古いプログラマ
C言語は時代遅れだ

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

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

48 :名刺は切らしておりまして:2020/12/10(木) 09:55:55.46 ID:PggGVhVa.net

ここ見てるだけでもいろんな優秀度について書かれてるから、まあ勉強になるね。

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

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

69 :名刺は切らしておりまして:2020/12/10(木) 22:55:56.89 ID:rVJ/ONiJ.net

さすがにリーナス相手にマウント取ったら恥かくのに気付く
程度の知能はあるらしい

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

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

46 :名刺は切らしておりまして:2020/12/10(木) 09:50:37.60 ID:PggGVhVa.net

すんません。素人ですが、書いてある内容gigazineの大半のユーザーがわかるんだろうか?
そういう意味でこの記事は優れた記事ではない。
そして、ここに書いてある内容は何が優れたコードなのかの基準がよくわからないのでなんとも言えない。
個人的にはリーナスの例示のコードは美しい音楽を聞くようで素敵。
基準がないから主観でしか判断できないよね。

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

MISLA-C準拠

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

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

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

carとcdr

40 :名刺は切らしておりまして:2020/12/10(木) 08:19:49.14 ID:W/n0YzIZ.net

>>1
その前に、M1版MacBookAir買ったリーナスさんちーっす。

107 :名刺は切らしておりまして:2020/12/17(木) 10:56:40.76 ID:EDt31okk.net

>>34
凡庸、というだけの度胸はないが、まあ、普通だと思う。

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

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

29 :名刺は切らしておりまして:2020/12/10(木) 02:09:02.59 ID:kFAZ8Rs4.net

>27
自分はそれで脱落したけど
頭いい人は逆に分かりやすいのかな…

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

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

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

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

22 :名刺は切らしておりまして:2020/12/10(木) 01:16:38.48 ID:JpU5m4mP.net

たまには変数名 x,y,z,zz,zzzとか言うのをデバッグしてみろ

83 :名刺は切らしておりまして:2020/12/11(金) 17:33:22.07 ID:63dqwuEe.net

>>82
あったよ
OSなんて無数にある

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

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

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

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

24 :名刺は切らしておりまして:2020/12/10(木) 01:28:54.63 ID:fwJx6gro.net

NULLぽしてるから優れたコードではない

6 :Go Toトラベルは創価学会の仕業:2020/12/09(水) 22:38:37.27 ID:3uPNT3yj.net

Go To トラベルもGo Toイートも、Go Toキャンペーンは創価学会の仕業です

詳細に関しては下記URLに投下されたレスに書いてありますので
詳しくお知りになりたい方は、そちらを参照ください
https://asahi.5ch.net/test/read.cgi/newsplus/1607413063/35-40

この話を簡略化すると、こういう事なんです

まず、公明党は、地域観光の振興政策に非常に力を入れてきました
これらの事は公明党の過去のマニフェストを閲覧すればわかる事です
また、公明党は国交大臣のポストを長期間握っており、国交省利権を持っています
観光行政にかかわる観光庁は、国交省の外局で、観光関連も国交省利権の一つです
創価学会からJTBに対し、公明党への選挙支援要請が行われた問題も
そのような関係から発生しているのです

そのような関係で、学会員が営む企業や事業所が、観光業、観光関連業に参入したり
同じく学会系の企業が、観光業、観光関連業に参入し、公明党議員が国交大臣という事で
この業界の振興に力を入れている事もあって、儲けさせて貰っている等もあるのでしょう

JTBの選挙支援の話が何故漏れたかと言うと、従業員が怒ったからです
宗教政党の公明党など支援できるか―創価学会が引き起こしてきた問題の数々を考えたら
そのように思い、拒絶する人達が出るのは当然です
しかし、国交大臣が公明党である以上、公明党と創価学会に歯向かえば
国交省と仕事で付き合わざるを得ない企業や団体は、どんな不利益を被るかわかりません
だから、嫌々、あるいは半ば無理矢理、票を出し、支援していたという現実があるのです
(また、仕事を貰ったり、便宜を図って貰えば、企業は学会員用の採用枠も設けます)
(財務[≒お布施]をするのは学会員なので、学会にとってはこの点でも得なのです)

そのような関係がある中で、観光業や観光関連業が苦境に陥っている中で
公明党が何もしなかったら、どうなるでしょう
あいつら苦しい時に何もしてこなかったと言われ、二度と票を貰えなくなります
そうなると党の存亡にかかわる重大な危機になるので、そうして出てきたのが
Go To トラベルキャンペーンなのです

学会員は、学会員が営む店や学会系企業の会社を積極的に利用する事でも有名です
Go To トラベルもGo Toイートを行えば、学会員が経営する店や企業が潤い
結果的に、公明党と創価学会は感謝され、支持基盤の強化にも繋がります
創価学会がGo Toキャンペーンを推進していたのは、そのような理由がある為です
.
Go To トラベルでは、同キャンペーン事業を1895億円で受託した
「ツーリズム産業共同提案体」に名を連ねる観光関連の14団体から
二階幹事長ら複数の自民党議員に献金が行われたと週刊文春が報道しましたが
本当に積極的にこの件を推進していたのは、上記の理由により創価学会だという事です
.
GoToトラベルは、二階幹事長と官房長官時代の菅氏が主導したと言われていますが
安倍政権時代に学会と官邸との窓口を務めていたのは菅氏です
だから創価学会が推進するGoToトラベルの問題で菅氏の名前が出てくるのは当たり前なんです b50

94 :名刺は切らしておりまして:2020/12/12(土) 10:30:20.58 ID:ei2K8uap.net

タネンバウムに批判されたりとかあったな
30年近く前の話だけど

65 :名刺は切らしておりまして:2020/12/10(木) 14:42:34.04 ID:MbmcFfws.net

>>23,28
昔の MacOS とかでしょ。
Win32 のハンドルはまたちょっと違うと思う。

35 :名刺は切らしておりまして:2020/12/10(木) 07:55:36.64 ID:VdAdyg+r.net

>>27
昔SVGAの15インチモニタに無理矢理50行近く表示して開発してたときは{で一行あいてた方が読みやすかったな

23 :名刺は切らしておりまして:2020/12/10(木) 01:24:31.06 ID:Fzxl3UKe.net

ポインタのポインタは昔一部の界隈でハンドルって言ってた。

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

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

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

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

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

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

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

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

70 :名刺は切らしておりまして:2020/12/10(木) 23:08:40.40 ID:O8C6tWTP.net

CentOSどうすんねん

91 :名刺は切らしておりまして:2020/12/12(土) 07:50:09.86 ID:jquYNH7b.net

>>33
Linusのであってる。
そのコードと場合、もしheadがtargetの時は、headとtargetの比較がされないから上手く動かないでしょ。

105 :名刺は切らしておりまして:2020/12/16(水) 12:33:41.71 ID:pRy1BCFp.net

>>77
scratchの方がいいんじゃね?

何も知らん人にrubyを勧めるのは……悪いとは言わんが微妙じゃね?

104 :名刺は切らしておりまして:2020/12/14(月) 15:19:00.15 ID:vQehMzgp.net

RTを強く要求されない組み込みでもLinuxはかなり普及してる。
家庭用のルーターやファイルサーバの中身なんてLinuxが割と多いし。

30 :名刺は切らしておりまして:2020/12/10(木) 02:45:00.68 ID:/iUNfJqw.net

最初は環境依存Unixをdos/v用にリサイズしただけなんじゃないんか?

カーネルの主要部しか作ってないんじゃないのけ?リーナスさんは

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

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

77 :名刺は切らしておりまして:2020/12/11(金) 01:41:54.54 ID:Op29NcHz.net

>>75
小学 2年生のあうあうあーでもオッケー?

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

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

16 :名刺は切らしておりまして:2020/12/10(木) 00:45:47.58 ID:/1StOwEX.net

童貞・学歴・免許スレは伸びるのにこういうスレは全然伸びないな
テレビと大差ない

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

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

72 :名刺は切らしておりまして:2020/12/11(金) 00:23:26.48 ID:Sgtdk4k4.net

予備知識無くても直感で組めるプログラム言語って無いですか?

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

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

33 :名刺は切らしておりまして:2020/12/10(木) 07:29:14.65 ID:YNcF7Kw8.net

このリーナスのコード間違ってない?
正しくは以下でしょ
while ((*p)->next != target) {

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

>>24

蛾ッ

73 :名刺は切らしておりまして:2020/12/11(金) 00:28:21.26 ID:9kLsbMU5.net

リーナスには直接は関係ないけどCentOS8勘弁してくれよ

67 :名刺は切らしておりまして:2020/12/10(木) 19:48:53.33 ID:M6pDwKgc.net

List,Tree,Graph
このあたりはデータ構造の基本中の基本

32 :名刺は切らしておりまして:2020/12/10(木) 07:01:51.04 ID:ygZtP0QD.net

天才が使用したコードが優れたコード
ゴミクズコーダーはなに使ってもゴミしか生み出さない

103 :名刺は切らしておりまして:2020/12/14(月) 08:39:22.55 ID:qDYiMZWh.net

>>102
でもGoogle信者の人にAndroidはLinuxって言うと否定されるんだよね

コメント

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