
ジェームズ・ゴスリン曰く、未だ人類はポインタの不具合に囚われているのか 91
ストーリー by nagazou
今すぐには人類に叡智をさずけられません 部門より
今すぐには人類に叡智をさずけられません 部門より
ZDNet Japanの記事に、Javaの生みの親であるJames Gosling氏へのインタビュー記事が掲載されている(ZDNet Japan)。その中で同氏はJavaを開発の前に、家電メーカーなどを視察したという。日本では東芝やシャープ、三菱、ソニーなどの企業を見て回ったようだ。その中で家電業界とコンピューティング業界では思考が全く異なる点に気がついた。
それは、コンピューター業界ではパフォーマンスをのために信頼性を犠牲することは認められる風潮があったが、家電企業は決して安全性を犠牲にはしないということだった。この考え方はJavaの設計に取り入れられ、Javaのセキュリティの考え方にもつながっているという。
同氏によれば、1990年代の初めには、セキュリティ上の脆弱性が生まれる一番の原因がポインターであったことは分かっていたという。しかし、今年になって重大度の高いセキュリティバグの約70%は、メモリの安全性に関する問題(ポインタの誤り)に由来すると発表されたのを見て、
それは、コンピューター業界ではパフォーマンスをのために信頼性を犠牲することは認められる風潮があったが、家電企業は決して安全性を犠牲にはしないということだった。この考え方はJavaの設計に取り入れられ、Javaのセキュリティの考え方にもつながっているという。
同氏によれば、1990年代の初めには、セキュリティ上の脆弱性が生まれる一番の原因がポインターであったことは分かっていたという。しかし、今年になって重大度の高いセキュリティバグの約70%は、メモリの安全性に関する問題(ポインタの誤り)に由来すると発表されたのを見て、
「Chromeは要するに巨大なC++のコードだが、そのセキュリティ上の脆弱性の60~70%が、ばかげたポインターの問題だった。30年経っても何も変わっていないのかと思わざるを得なかった」とGosling氏は述べた。
としている。
指摘の通り、安全な言語を使うしか解決策はない (スコア:1)
イケてる技術者はいっぱいいる。俺は分かっている。俺はポインタを正しく操作できる。
それはあんただけの場合で、まあ百歩譲って本当にそうだとしよう。
しかし組織的な開発、特にオープンソースコミュニティでは正しくポインタを操作することは不可能なんだ。
だからこれだけ脆弱性が毎月のように指摘されている。思い上がりも甚だしい。
そして安全性よりパフォーマンスを重視しているのは、Chromeが本質的にはユーザーデータを重視していないからだ。
そりゃデータは重要な金のなる木だとは思ってるさ。でも一個ずつは多少漏れようが壊れようが、Googleにとってはどうでもいいんだ。
そして早くWebを見せることが広告のストレスを下げ、早くカートの中のものを買えるから重視するんだよ。
Re:指摘の通り、安全な言語を使うしか解決策はない (スコア:1)
ナゾの人「なんでもいいけどポインタは使えるようにしといてね」
Go言語もしれっとポインタがあって泣ける (スコア:1)
「クソみたいなバグを出すぐらいなら、多少パフォーマンス落ちてもいいからポインタ使うのやめろや。レシーバの引数は値渡しでいいだろ」
と職場で言うことが出来ないチキンが私です
Re:Go言語もしれっとポインタがあって泣ける (スコア:5, おもしろおかしい)
ポインタを値渡ししときますね
Re:Go言語もしれっとポインタがあって泣ける (スコア:2)
GoslingとGolangはチョットニテル。
Re:Go言語もしれっとポインタがあって泣ける (スコア:1)
ポインタやめろ言う人とポインタ使う人比べると、いざポインタ使うにしても前者のがバグ少ないんやろなあと何となく思う。
Re:Go言語もしれっとポインタがあって泣ける ← なにいってだこいつ (スコア:0)
Go言語ってのは自他共に認める「21世紀のC言語」なんですが。
Re: (スコア:0)
ひょっとして「シー言語」の後継は「ゴー言語」っていうギャグ?
その次は「ロク言語」?
Re: (スコア:0)
Rock言語かな?
それともLock言語かな?
商標登録を急ぐんだ。
Re:Go言語もしれっとポインタがあって泣ける ← なにいってだこいつ (スコア:1)
動作環境が潰れても永遠に転生して動作し続ける
Re:Go言語もしれっとポインタがあって泣ける ← なにいってだこいつ (スコア:1)
実装されたと思ったらプラットフォームがつぶれるじゃないですかヤダー
Re: (スコア:0)
GoでOSは書けないからCの代わりにはならんよ。
Re: (スコア:0)
自は認めてるかもしれんけど、他は認めてなかろう?
あえてCで書きたいって用途は全く書けないやつじゃん。
そもそもの話が、現代的なプログラム論が理解できない/付いてこれない人を活用するための言語っていうコンセプトなのだから、21世紀というよりは20世紀に取り残された人用なんだけどな。
# 21世紀のPascalと言われたら、納得できそうな気はする。
Re: (スコア:0)
GO言語のコンセプトは「シンプル」「効率的」「信頼性が高い」であって現代的なプログラム論が云々は筋違いでは…
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
// ならレシーバの引数の参照渡しはともかく、ポインタ型を宣言できるのはやめろやと心底思うけど
どっちが楽しいかっつーと (スコア:1)
「コード送ってくれたらどんどん取り込むぜ、問題あったら直しゃいいだけだし君だけの責任じゃなくレビューした奴含めてみんなの責任だから臆さずに参加してくれ!」
みたいなゆるいプロジェクトのが楽しいのよねー
30年経っても変わらない?お約束ですから! (スコア:1)
ヽ( ・∀・)ノ┌┛ガッΣ(ノ`Д´)ノ
1990年代の初め (スコア:1)
メモリ管理の容易さや動作の安定化(危険な操作の排除)が主眼だったはずで、セキュリティとして焦点をあてていただろうか疑問。
SUN発の言語なので否定はしづらいけど、セキュリティ問題としてポインタの存在をとらえていたって言われると吹かし過ぎじゃないかと思えてもにょる。
単にバグの温床とみなしていただけなんじゃないだろうか。
当時の家電において、バグがセキュリティ問題として特別視される状況があり得るかなぁ
十把一絡げにバグっていわれて終わると思うんだけど
Re:1990年代の初め (スコア:1)
// JavaRingどこへ行ったかなー
Re:1990年代の初め (スコア:1)
初期のセットトップボックス・PDAターゲットの頃はセキュリティでなく堅牢性がターゲットだったと想像した次第。
Webをターゲットとした時点で堅牢性はセキュリティにも有利に働き、言語の利点として謳うようになった
→セキュリティを最初から考慮していたと思い込む、の流れに思える。
言語としては結果は同じなのでそこは問題じゃないんで、Gosling氏がドヤァしてる記事が気に障るんだろう。たぶん。
Javaも一緒だろ (スコア:0)
何でそんなにドヤれるんだか。
あくまでも明示的なポインタが無いだけで
ポインタ渡しのオブジェクト型引数を直接操作してデータ破壊とか日常茶飯事だと思うのだが。
Re:Javaも一緒だろ (スコア:1, すばらしい洞察)
ばかげたJavaによる多くの不幸は10年たっても何も変わっていない
ポインタに文句を言う前にJavaをどうにかするか滅ぼすかすべきだろこの人は
Re: (スコア:0)
人を貶すだけでドヤってる君よりかはマシさ。
Re:Javaも一緒だろ (スコア:1)
ブーメラン刺さってますよ
Re: (スコア:0)
メモリ上のアドレス位置を任意に操作出来てしまうよりずっとましだよ。
Re:Javaも一緒だろ (スコア:2)
それってMMUのことかい?
現代のコンピュータでは普通に実装されていて、普通に機能していますよ。
というかそれがないと現代のソフトウェアはまず動作しない。
それ以外の方法でメモリ上のアドレス「位置」を任意に操作するって結構難しいぞ
Re: (スコア:0)
イミュータブル教徒かな?
なら攻撃すべきはJavaにとどまらず、ほぼ全てのOOPだよね
Firefox (スコア:0)
Rustで書かれてても脆弱性はありますしおすし。
Re:Firefox (スコア:1)
っ .NET
Re: (スコア:0)
そうだNimを使おう!
C言語は標準で境界チェックすればいい (スコア:0)
パフォーマンスは落ちるが標準で境界チェックして、
コンパイルオプションやら、コード内で、境界チェックしないことを明示した場合だけ
パフォーマンス優先して境界チェックやめればいい
Re:C言語は標準で境界チェックすればいい (スコア:1)
記述の面倒くささの代償で得られる性能捨てるならマジ要らんだろw
そして色んな面倒臭さを放置するJavaより地道に潰してくれるC#使うわ。
Re: (スコア:0)
っ D
Re:C言語は標準で境界チェックすればいい (スコア:1)
安全な公園には作れない遊具がある
お説ごもっとも (スコア:0)
まあ確かに、未だにC/C++でブラウザを実装するなんて馬鹿げているとは思う。
でも、それならなんでHotJavaを放置したのさ?
HotJavaの最後の更新は2004年だぜ。
GoslingちゃんはまだSUNにいたでしょうが。
Re: (スコア:0)
10年後、20年後も使われていてマスとなる規模のプログラマがいて、
ライブラリが最新の状態に保たれていて、
などとすると、意外と選択肢はせまいよね
Javaとかいつ使えなくなるかわからんし
G
【今はバッテリーが重要】リソースを潤沢に使える時代は終わりました (スコア:0)
昔は、CPUが高性能化し、メモリやストレージが安くなると、リソースを潤沢に使えるようになって、高級言語でのプログラミングが捗るようになると信じられていましたが、そうはなりませんでした。
スマホや小型のノートブックが普及し、バッテリーでの駆動が一般的になったからです。
少しでも重い処理をしてCPUに負荷をかけたら、バッテリーがどんどん無くなってしまうのです。
今も、大昔と同じく、少しでもCPU資源等を消費しないコーディング技術が求められるのです。
だから、これからも、低級言語を使いこなせる能力も、ポインタどころかアセンブラの知識も必要です。
Re: (スコア:0)
ネタで書いてるのかマジなのかよーわからんな。
Re:【今はバッテリーが重要】リソースを潤沢に使える時代は終わりました (スコア:2)
いまならシングルボードコンピュータ使うときに必要かと。
人間が機械側に寄っていけば貧弱なシステムでも最大限活用できる用途なら
寄せて行かない手はない。
金貰って (スコア:0)
仕込んでるんじゃないの?
家電企業は決して安全性を犠牲にはしない (スコア:0)
コンピューター業界ではパフォーマンスをのために信頼性を犠牲することは認められる風潮があったが、家電企業は決して安全性を犠牲にはしないということだった。
しかしまあ、その後のコンピューター業界の隆盛と家電企業の退潮を見ると、どっちが正しかったのか分からないとしか言えない。
安全性 = 信頼性 ではない (スコア:1)
玩具業界にいたものでですが、
安全性 = 信頼性 ではないと思います。
たとえば、幼児用のネックレスなど壊れやすい方が安全な場合もあります。
安全性は犠牲にしてはいけないけど、信頼性は価格や機能との兼ね合いで犠牲にしても良い場合もあります。
Re:安全性 = 信頼性 ではない (スコア:1)
安全に壊れる、というのは信頼性が高いというんだと思う。
コンピュータープログラムの例でいえば、不正なメモリーアクセスにあった時に、そのことをレポートしつつ動作を停止するのは安全に壊れていて、ちゃんと動いているふりをして情報をお漏らしするのは危険な壊れ方といえる。C/C++では、注意深くないとすぐに危険な壊れ方をするプログラムになってしまうのは、ブラウザーとかJava VMのような大規模なソフトを書くのにはやっぱり向いていない言語なんでしょうね。
Re: (スコア:0)
「加減しろ莫迦」あるいは「時と場合によるだろ」ということなのかも。
Re:家電企業は決して安全性を犠牲にはしない (スコア:1)
それでもなお、ゲームの歴史はバグやバグ技の歴史と表裏一体だったよ。それこそ、ROMカセットの時代から…
Re:家電企業は決して安全性を犠牲にはしない (スコア:1)
昔は昔で動作は単純で容量も少なかったからバグの総量は大きくなりにくいけど、
とにかくメモリが(ROMもRAMも)少ないからレジスタやメモリ(ワークエリア)共用当たり前で
バグ自体は発生しやすい状況でしたね
[Q][W][E][R][T][Y]
ポインタもランタイムやドライバも無しで (スコア:0)
メモリやハードウェアチップやCPUの特殊レジスタ等にアクセスできるようになればポインタを卒業します
ノイマン型である限り (スコア:0)
いつまでも変わらない
Re: (スコア:0)
同意、というかチューリングマシンである限りやってることは同じなんだからどんなに工夫してもメモリ参照周りで不具合が起こりうる
それにチューリングマシンではある種の問題を解くことができないので新たなコンピューターが必要
ポインタ問題は現在計算機の計算原理の根本な方法に端を発しているので完全には解決不可能
Javaでブラウザを書けということか (スコア:0)
そういえば昔そんなのあったような…話変わりますけど、JavaにWebStartってないんだそうですね。
Re:Javaでブラウザを書けということか (スコア:2)