パスワードを忘れた? アカウント作成
12248 story

誰も Linux kernel ソースを読んでいない? 196

ストーリー by yoosee
千里のコードも一行から 部門より

tamo曰く、"ITpro は「誰も読まないOSのソース・コード」という記事で、 Linux のソース全体を把握している人がほとんどいない現状を伝えている。 それは「(少しでもソースをのぞけば,誰にでもすぐに見つけられるほど簡単なバグなのに) 誰もがよく使うソフトでさえバグが大量にある」ことからも明らかだという。

この記事で例として挙げられているような問題はコード検査ツールで見付けることができそうだが (参考: Linux カーネル 2.6.16 リリース)、 だからといって、コア開発者と悪意を持っている人たちばかりがコードを読んでいる状態は不健全だろう。 記事によれば「現時点では,詳細にソースを読んでいる人はほとんどいないので,今から読み始めても決して遅くはない」 そうだ。新年度は自分の関心のある部分からソースコードを読むことを始めてみてはいかがだろうか。 ……膨大だけど。"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 実は (スコア:4, すばらしい洞察)

    by Anonymous Coward on 2006年04月07日 23時54分 (#917290)
    ソースコードを読むのって楽しくないんじゃ?
    本当に楽しければ自然に増えると思います。
    • Re:実は (スコア:4, すばらしい洞察)

      by Anonymous Coward on 2006年04月07日 23時56分 (#917292)
      他人のコードを読むのは苦痛である。
      自分のだって時間が経ってからだと辛いのに。
      親コメント
      • Re:実は (スコア:2, 興味深い)

        by Anonymous Coward on 2006年04月08日 0時37分 (#917321)
        意地の悪い私なんぞは他人のコードを貶しながら眺めるのが大好きですが

        少々オフトピック気味なので話を戻すと、gccの-Wall -Werrorを使うようにするだけでも未初期化変数の参照とか、結構見つかりますね。
        親コメント
    • Re:実は (スコア:4, 参考になる)

      by Anonymous Coward on 2006年04月08日 15時23分 (#917596)
      この記事に引掛った人は多いハズ。moci氏の投稿 [srad.jp]とダブりますが、ある程度まともに調べてみました。

      "Membership Reduction" ttab2で検索してみました [google.co.jp]が、 07/31/96の時点でのソースしか出てきませんでした。このソースを利用した形跡はディストリビューション中ではもはや検索に引掛からず、ビルドのテストを2002/09/27にした跡があるのが最新でした。
      Debian/sarge(tracerouteパッケージ)のtraceroute.cではswitch/caseしてました。他の「2006年2月時点」に相当するtraceroute6.c [google.co.jp]でもswich/caseのようです。 もしかして古いコードがカーネルのソースに紛れ込んでることを言ってるのでは、と思いpr_typeも検索してみた [tamacom.com]のですがそれも無し。

      「書き込むため・・・」は記事の著者に先入観があるらしいので置いておくとして、 問題点を整理すると
      • 2006年2月時点でtraceroute6.cに指摘されたバグは無い
      • 相当するtraceroute6.cは1996年のもので、いつまで使われていたのか容易に特定できないほど古いもの
      • 「2006年2月時点での極めて危険なバグ」であるにもかかわらず、問題のソースファイルの場所や環境が明示されていない
      • そもそも「簡単に見付かる」はずのカーネルのバグが示されていない
      あたりだと思います。

      たまたま私はLinuxを使っていて記事の内容と使用感が違い過ぎるので調べてみたわけですが、ソースのバグを示されてもC言語が読めるだけなら多くの人は「これはひどい」ですませてわざわざ元ファイルまで調べないんではないでしょうか。 中身はバグだらけでもセンセーショナルな文章で最後まで読ませて「やっぱりそうか〜」と思わせるあたり、さすがマスコミのライターさんだと思いました。

      この記事にはフリーソフトの欠陥を誇大に吹聴してコミュニティーの無能さをアピールしている (と言われてもしかたないですよね?)所にもう一つ問題があると思うのですが、「カーネルソースを読もう」という記事の主旨は良かったと思います。私も含めて少なからずの人が、カーネルを読んでみようと思ったのではないでしょうか?執筆に感謝、内容に異議あり、でした。
      親コメント
    • Re:実は (スコア:3, おもしろおかしい)

      by Anonymous Coward on 2006年04月08日 1時08分 (#917340)
      「まんがで読むカーネル」とか
      「萌えるLinux kernel」とかあればいいんですかね。
      親コメント
      • Re:実は (スコア:4, おもしろおかしい)

        by Anonymous Coward on 2006年04月08日 10時24分 (#917478)
        社交的なnetタンとか、
        ぶつぶつ独り言を言ってるipcタンとか、
        最初は何の機能もなくて段々物事を覚えていくロボット娘のmodulesタンとか、
        みんなを指揮する委員長キャラのscriptsタンとか、
        メインヒロインのkernelタンとか、
        困ったことがあるとポケットから秘密道具を出すdriversタンとか、
        なんかどこかとリンクしている電波娘のlibタンとか、
        何かあると皆から質問されるインテリキャラのincludeタンとか、
        みんなのたまり場を提供してるけど存在感の薄いfsタンとか、
        ストーリーのきっかけになるような突飛な行動をとるトリックスター的な役回りのinitタンとか、
        遊び道具を出したり片付けたり駒鳥のように働いている真面目娘のmmタンとか

        #若干無理があるな
        親コメント
    • Re:実は (スコア:2, すばらしい洞察)

      by tarosuke (2403) <webmaster@tarosuke.net> on 2006年04月08日 0時45分 (#917328) 日記
      自分の吐くコードより良いなら読んでて楽しいが自分のより悪ければ苦痛でしかない。従って、熟練して良いコードを書くようになると他人のコードを読むのがどんどん苦痛になる。...という事なんじゃないのかなぁ...
      親コメント
      • Re:実は (スコア:4, すばらしい洞察)

        by Anonymous Coward on 2006年04月08日 2時23分 (#917380)
        他人のソースを読まない人は、結局は、自分でプログラムを書けない。プログラム言語とかライブラリのAPIマニュアルさえあればプログラムが書けるとか思っているのはシロートだよ。一方で、おおざっぱな全体構成とか仕様だったら、プログラミング能力がなくても書ける。その橋渡しをするのがプログラマの役割。その技術は、良く出来たソースを読むことでしか得られない。 Linux kernelも何回か読んだけど、indirect callが非常に多いから、単にソースを読むだけではわからない。今は、gdb が接続出来るemulatorがあるから、gdb でtraceしながらkernel を読むのも簡単。昔見たいにserial経由でremote gdb とかしなくて良い。 へたな小説なんかより、ソース読みは面白いよ。GUI系のソースはいい加減なのが多いが。
        親コメント
        • Re:実は (スコア:5, すばらしい洞察)

          by cassandro (6035) on 2006年04月08日 8時42分 (#917427)
          何をか言わんや。

          「他人のソースを読まない人は、結局は、自分でプログラムを書けない」は、その人のレベル次第だと思いますね。コードから何かを学ぶ場合、「こうすれば良い」と「こうしてはいけない」の2つがあると思います。ある程度のレベルに達すると、残念ながら「こうすれば良い」が学べるコードの数は限りなく少なくなって行きます。「こうしてはいけない」は数限りなく見ているので、もうお腹いっぱいです。「プログラム言語とかライブラリのAPIマニュアルさえあればプログラムが書けるとか思っている」人が書いたコードから何が学べるのでしょうか。デスマ突入の秘策とか?

          大体、GNUのコードとかでプログラミング作法を覚えた人は、仕事としてならそれが間違っているのかを理解していない人が多いですし、その間違いを説明するだけで一苦労です。GNUとかのコードとプロダクトグレードのコードでは、コードを書く姿勢も重要となる側面もまったく違うのに。単眼的な見方が染みついているので、他の要素の存在を受け入れないんですね。

          「一方で、おおざっぱな全体構成とか仕様だったら、プログラミング能力がなくても書ける」って、エンジニアリングセンスに欠けた人による設計はたとえ外部であっても、あるいは要求仕様であっても、苦痛のタネですしトラブルの元だと思いますよ。品質に問題ありのプロダクトとか、デスマ日常でもカットオーバーが遅れるとか、そういう事の原因の一端は、シロウトさんの設計によってですね。設計と実装は車の両輪みたいなもので、どちらをシロウトさんに任せられるか、なんて議論は危険そのものだと思いますよ。

          コードを読んで楽しいかどうかは、人の置かれている状況次第でしょう。趣味でコードを読むならどんなコードでも良いけれど(読みたく無ければ止めれば良いし)、仕事でならクソなコードは苦痛そのものですね。出来れば読みたくないのですが。
          親コメント
          • Re:実は (スコア:2, 興味深い)

            by Kazsa (25846) on 2006年04月08日 19時27分 (#917651) 日記
            仕事でクソなコードを読みたくないという意見には同意するけど、仕事ではクソなコードを読まなきゃならないことが多いんですよね。

            人それぞれなんだろうけど、仕事でコードを書く人には、ただテストに通ればいいと思っているんじゃないかというような、非常に汚くてへたくそなコードを書く人もいるんですよね。だからといって、きれいに書き換えることもできないのが、仕事でコードを読む場合のつらいところだったりしますが。
            親コメント
            • Re:実は (スコア:4, 興味深い)

              by cassandro (6035) on 2006年04月09日 10時53分 (#917891)
              人それぞれなんだろうけど、仕事でコードを書く人には、ただテストに通ればいいと思っているんじゃないかというような、非常に汚くてへたくそなコードを書く人もいるんですよね。

               ソフトの規模が大きくなったがために、効果的な教育システムやシステマチックなマネジメントが無い状態で、適性を無視して大量動員を行った結果ですね。

               今日、2006/04/08の朝日の朝刊に「バグ猛威、デジタル製品」の記事が載ってました。内容を読んで見て思ったのは「それは自業自得じゃない?」ですね。単価を切り下げて人集め、糞と味噌の区別もつかない、そんな事をやっていればこうなるのは必然です。記事中でソニー中鉢社長は技術系の人材が欲しいと言っていますけれど、それは必要な事ながら、それで問題が全て解決するとも思えません。糞と味噌の区別もつかないマネジメントが根本問題なのですから。
              親コメント
        • 件の素人なのだが (スコア:5, すばらしい洞察)

          by uxi (5376) on 2006年04月08日 19時58分 (#917664)
          >APIマニュアルさえあればプログラムが書けるとか思っている
          って、思いっきりそう思ってるんだけど、呼びました?

          うぅ〜〜〜ん、、、
          原理や基本概念さえ分ってれば、
          それで全く問題ないプログラム書けるはずなんだけどなぁ、、、
          そもそも、そのためのライブラリであり、APIマニュアルのはずなんだが、、、
          基本的にAPIマニュアルだけで書けないのは、
          大抵の場合マニュアルに不備があるせいじゃないだろうか?
          結局、その場合ソース読む羽目になる訳だが、
          原理や基本概念が分ってないと、結局読めない。
          また、ソースはあくまでも1つの実装に過ぎない。
          本当に大切なのは、ソース読む事ではないような気がするんだけどなぁ、、、

          デザインパターンなんかも
          まさにそこを狙ってる気がするんだけど、
          その辺りどう思います?

          もちろん1実装手段、
          テクニックの実例としては
          ソースは重要だと思うのだけど、
          プログラミング能力って点では、
          ソースは具象的過ぎる、、、
          大切なのはもっと抽象的な概念の部分じゃないかと、、、
          # アルゴリズムとかね、、、
          --
          uxi
          親コメント
  • by Anonymous Coward on 2006年04月08日 0時09分 (#917303)
    というのが出発点ではないかと思うんですが。
    いつでもソースを読めるのはメリットであるものの、
    読まなくて済むならそれでも良いと思います。
    勿論ソースを読む楽しみがあることは否定しませんが、
    件の記事からモチベーションを持たせるのはちょっと
    難しいように思います。

    モチベーションを持たせることが難しいのは、
    件の先生なら解ると思うんですが…
    • by Ooty (29466) on 2006年04月08日 3時44分 (#917397) 日記
      いつでも誰でもソースを読むことができるので、「どうせ誰かが読んで、ちゃんと対応しているだろう」「バグが残っていても、私が見つけられるような簡単なものではないだろう」と思ってしまうのでしょうね。

      [今週見つかった安易なバグTOP10]としてバグの該当部分を具体的に公表すれば、バグ探しにチャレンジしてみようという人が増えるかも。

      # 今度から、バグにぶつかったときくらいはソースコードを読むようにします。

      親コメント
    • by Anonymous Coward on 2006年04月08日 0時37分 (#917323)
      Kernel2.6.16でCellのサポートが加わったのでその周りを読んでいますが、基本的に自分のところで安定しているシステムは読む必要がないのでは?

      ソースを見るときは
      ・うまく動かないとき (バグの発見)
      ・ハックしたいとき:) (好奇心)

      くらいではないでしょうか。

      また全体の把握と言う面では、オペレーティングシステム全体の動作を理解している人は少ないし、求められている人材にもよく聞きます。
      そういったスキルをもったエンジニアだと、
      >カーネルのソースが読めると,たいそう儲かる
      のかもしれませんね。
      親コメント
  • 百科事典 (スコア:3, すばらしい洞察)

    by Anonymous Coward on 2006年04月08日 0時01分 (#917298)
    百科事典やら辞書やらスミからスミまで読むだろうか?

    まあ、それが趣味の人とか活字中毒で本切れの人とかなら読むかもしれないけど
    ほとんどの人は必要なところだけ読むし、中には全く読まない人もいるだろう?
    そういうものになっているのではないの?

    #自分はドライバとか読むことはある
    #あとメモリ管理とかの一部ね。
    • Re:百科事典 (スコア:5, 興味深い)

      by Anonymous Coward on 2006年04月08日 1時59分 (#917368)
      各社の事典を読んで傾向と対策を練るのが仕事でした(その上で書くのも仕事)。ほぼ1年中事典読んでましたね。
      読んでみると、意図的に間違い(というか、論旨を変な方向へ誘導する)を入れて、他社にパクられた場合に証拠とする、みたいなトラップを見つけられて楽しかったです。

      ああ、ちなみにその仕事した後、クライアントは実際にパクった会社訴えたらしいですが。

      # こんな仕事したのは日本でも数名だと思うのでAC
      親コメント
    • Re:百科事典 (スコア:2, 興味深い)

      by Y.. (7829) on 2006年04月08日 2時04分 (#917371) 日記
      おいらの場合
      百科事典は読むかもしれないけど
      ソースコードは必要がない限り読まないかなぁ
      やっぱ、全部読むのはつらいので目次とか索引がほしいところ
      そういうのがあれば自分で興味がある部分だけを読むこともできるし

      おいらの場合だと
      メモリ管理やってる場所どこ?とかドライバはどれ?ってのを探すところで挫折しちゃいそう
      (ホントはもっと根本的にOSってどうやって動いているのってとこから理解しないとダメな気がするけどw)
      親コメント
      • Re:百科事典 (スコア:2, 参考になる)

        by SteppingWind (2654) on 2006年04月08日 13時32分 (#917553)

        はい, GLOBAL [gnu.org]. と言うか, すでに紹介されている [srad.jp]ソースコードツアーも, このGLOBALを使って生成されたものみたいですね. カーネルに限らず, 大規模プログラムを参照する場合の定番ツールです.

        親コメント
        • Re:百科事典 (スコア:2, すばらしい洞察)

          by Y.. (7829) on 2006年04月09日 5時33分 (#917821) 日記
          ん~
          索引とか目次って言っちゃうと伝わりにくいか....
          Linuxのシステムの動作に対して、ファイル名や関数名というページ番号を与えるやつってので伝わるんだろうか?
          もっと言い方を変えるとソースを追う手助けより、ソースを追わなくてすむ手助けがほしい

          ソースを読んでないことが問題視されてるのにこういうこと言うのは変だと思うけど
          実際、ある程度以上の規模になると
          ソースだけを読んで全体像を把握とか、ある種の拷問に近いような気がする
          わりとよくありがちなことでもあるけれど.....
          親コメント
  • 分かりやすいバグ? (スコア:3, すばらしい洞察)

    by Phalacrocoracidae (29780) on 2006年04月08日 0時21分 (#917309)
    元記事より

    >  こうしたバグはカーネルのいたるところに存在するため,少し読めばすぐに発見できるそうだ。だが実際にはほとんどは放置されているという。「え,こんなに分かりやすいバグも放置されてるんですか?」。「そう,それだけソースを読む人が少ない,ってことなんや」。

    分かりやすいバグじゃないと思うぞ。結果として単純なバグかもしれないが、そう簡単に気付くバグじゃないと思う。
    --
    しないさせない!スルー力
    • Re:分かりやすいバグ? (スコア:5, すばらしい洞察)

      by mew (23987) on 2006年04月08日 0時35分 (#917319)
      単純に気づくバグでも、それを直すことで逆にどこかに不具合が出ないとも限らない……ので、直すに直せないものもそれなりにあるかと思います。
      親コメント
    • Re:分かりやすいバグ? (スコア:5, すばらしい洞察)

      by Anonymous Coward on 2006年04月08日 1時03分 (#917338)
      >極めて初歩的なミスを犯している。配列の範囲を超えて書き込むため,極めて危険なバグである。

      書き込んでないじゃん。ライターも分かってないんじゃ?
      親コメント
    • Re:分かりやすいバグ? (スコア:3, すばらしい洞察)

      by Anonymous Coward on 2006年04月08日 3時15分 (#917394)
      カーネルのいたるところに存在するのになんでカーネル以外を例示するんでしょうね? 少し読めばすぐに発見できるのに。
      親コメント
    • by bee (10028) on 2006年04月08日 13時20分 (#917549) ホームページ 日記

      arch/i386/kernel/cpu/cyrix.cなのですが、

      @@ -177,7 +177,7 @@
           ccr4 = getCx86(CX86_CCR4);
           ccr4 |= 0x38;        /* FPU fast, DTE cache, Mem bypass */

      -    setCx86(CX86_CCR3, ccr3);
      +    setCx86(CX86_CCR4, ccr4);

           set_cx86_memwb();
           set_cx86_reorder();

      という感じでccr4に値を設定したのにccr3を書き込んでしまうというのがありますが、こういうのは簡単に気付く部類だと思います。

      親コメント
  • まあ仕事でコード書いたことがあるかどうかわからんヒマ人の大学のセンセのいうことだから多少は割り引いた方がよいかとは思いますが。

    ただ、確かに昔に比べるとソースをじっくりと眺めて机上デバッグを行う・・・という機会はあんまりなくなったなあ、というのは思いますね。
    昔と今とじゃ規模も複雑さも段違いなのでいちがいに比較はできませんけど。

    仕事で定期的にソースレビューをやってますが、やはり結構負担になるケースが多いので、こーいうソースレビューやら解読を楽しく進められるツールとか作れないかなあ・・・とか思うこともあります。

    • by Anonymous Coward on 2006年04月08日 9時35分 (#917446)
      >ヒマ人の大学のセンセ

      残念ながら、そんな人はほとんどいません(--;

      まぁ、プログラマの立場からすると、そう言いたい気持ちはわかるけど、大学の先生って、たとえ情報関係で講義をしてプログラムを教えていても、基本的に彼らはプログラマではないですから・・・いわゆる「仕事」ではコードを書かないでしょう。

      彼らの能力はプログラムではなく、もっと数学に近い分野など理論で生きている人がほとんどだし、「技能」ではなくて「学問」をやっている(じゃない人もいるけど)、そういうのは区別するべきだし、情報系の大学を出たのならば、そういう分野に興味がなくて、実践でコードしか書かなくても、そういう世界があるっていうのを知っておくべき。

      彼らの畑では、やはり彼らは超人的にすごい。若くして*教授になるようなやつは、尋常ではないほどの能力を有している。(長年助手を***とかいう人とか、最後まで助教授のままとか、地方大学でのんびりのんびりやっていて、自分の研究分野でうだつの上がらない人はいるけどね。あと、世代の差とボケの取り方で、おじいちゃん先生はすごいけど、やっぱりおじいちゃんだなーって思うところも確かにある。言葉が明瞭でない人とか、教育に興味がなくてええかげんな人とか。なにかと誤解されやすい人種であるのは事実だ)

      ともかく、大学のセンセが職業的プログラマで仕事をできないのと同じように、職業的プログラマは、大学のセンセの「研究」はできませんし、当然全く太刀打ちもできません。たぶん、互いに互いの職能に興味がないし。似ているからと言ってプログラムでくくってはダメです。

      まぁ、だから、プロ野球の選手がサッカーの選手を「お前は野球が下手だからな」と貶しても仕方がない。ってこと。情報の先生だから・・・と彼らのスキルのレベルをプログラマの視点で見るのがそのそも間違っている。まぁ、プログラマの視点でものを見るのが好みだから、今プログラマをしている訳なんでしょうけど。

      たまにメディアに踊られてとういか、あえて予算獲得のための道化というのもあるが、妙な本を書いたり、妙なことを言うセンセがいて、それを大学のセンセだと思う市民が多いのは事実だけどね。まぁ、そういうセンセもいるし、「声が大きい」センセは結構そういう海千山千のオヤジだったりもするが。
      親コメント
    • ツールというか手法ですがWikiを用いて情報を整理するひらメソッド [hira.main.jp]という物があります。
      このサイト自体Linux Kernelのソースの資料になっています。
      親コメント
  • 今も昔も (スコア:3, 興味深い)

    by Anonymous Coward on 2006年04月08日 8時45分 (#917429)
    記憶が曖昧で、人物や詳細がかなり怪しいので、誰かフォロー願うのだが、

    ケン・トンプソンあたりの最初のUNIXのコードには、彼がそのシステムにいつでも入ることができるバックドアを(半ばジョークで)しこんでいたそうだ。無論ソースは完全にオープンしてある。

    でも、それが見つかって、周知の事実になってそのコードを消したのが、5年後だか10年後だかというお話。ユーザの誰もソースをまともに読んでないじゃん!!

    って話を思い出しました。結局オープンだからと言っても、誰でもいつでもチェックできるから!といって安心だというわけではなくて、何があるかわからない。ということの証明として結構有名な話だったはず。
    • Re:今も昔も (スコア:5, 参考になる)

      by OH!NO (6922) on 2006年04月08日 10時16分 (#917476)
      たぶんこの論文 [acm.org]の話だと思います。が、コードに直接バックドアを仕込むのではなく、コンパイラに細工してバックドアを仕込むという話です。「ソースが安全だからといってそのバイナリは安全かい?」ということ。 だから今回の話とは若干趣旨がずれますねぇ。もう一段上のレベルの信用を論議している話です。
      親コメント
  • Morphy GNU/Linuxはまだですか? (スコア:3, おもしろおかしい)

    by Anonymous Coward on 2006年04月08日 8時51分 (#917431)
    > 「コツさえ分かれば,OSのソース・コードはびっくりするほど簡単に読める」

    愕然とするほど簡単だったんですね?

    > 今から読み始めても決して遅くはないのである。

    そろそろやってみるかと思ったんですね?

    > 1日100行ずつ読んだとしても,136年かかる計算になる。

    1人を136年待たせることは約49674人を1日待たせるのに等しいということですね?

    # つーか、そんな読み方してたら頭に入るものも入らないと思う
  • by Anonymous Coward on 2006年04月08日 0時53分 (#917333)
    カーネルソース読んでますし、必要に応じて手を入れたりコード追加したりしますが(主にネットワークとUSB周り)、年収かつかつ300万です。
  • カーネルの中身すべてを把握する必要がある人なんて、カーネル開発者の中でもほんの一握りだと思うんですが。

    そして、全部読んだとしても数週間〜数ヶ月単位で更新されてしまうわけで、それをまた読んでいる間にまたほかの場所が更新されて……となるわけで。

    まぁ大体の動作を把握することはまったく悪くないですが、それに意味があるのかというと疑問。

    #つぅか実際にカーネルソースを参照しないといけない事態になったとき、ソースを読んでいたからといって即その部分が浮かんでくるかはまた別の問題だし。

    #そして、ソースにバグがあろうとも、その部分が実行されなければバグにはならないということを記事には書いて欲しかったなぁ・・・

  • by Anonymous Coward on 2006年04月08日 22時12分 (#917704)
    たしかに今のコードは誰も読んでいないようだな。

    /*
      * Convert an ICMP "type" field to a printable string.
      */
    char *
    pr_type(register u_char t)
    {
            static char *ttab[] = {
            "Echo Reply", "ICMP 1", "ICMP 2", "Dest Unreachable",
            "Source Quench", "Redirect", "ICMP 6", "ICMP 7",
            "Echo", "ICMP 9", "ICMP 10", "Time Exceeded",
            "Param Problem", "Timestamp", "Timestamp Reply", "Info Request",
            "Info Reply"
            };

            if (t > 16)
                    return("OUT-OF-RANGE");

            return(ttab[t]);
    }
typodupeerror

最初のバージョンは常に打ち捨てられる。

読み込み中...