人気のプログラム言語TOP 10 を解説せよ 155
ストーリー by reo
半分ぐらいしか触ったことありません 部門より
半分ぐらいしか触ったことありません 部門より
ある Anonymous Coward 曰く、
はてなブックマークで「プログラミング言語人気TOP10の簡易解説」というページが話題になっている。
TIOBE のプログラミング言語ランキングトップ10 (ただし VB は除く) のプログラミング言語の特徴、短所 / 長所を解説したものだが、(このような記事にはよくあることだが) ツッコミどころや不足している説明もやや見られる。百戦錬磨のプログラマが集う /.Jer のみなさんなら、これらの言語をどう紹介するだろうか ?
CはCでも・・・ (スコア:5, おもしろおかしい)
世の中はCでできている。WindowsだってLinuxだってアメンボだって、みんなみんなCでできている。
プログラミング言語だってCでできている。PythonだってRubyだってオケラだって、みんなCでできている友達なんだ。
アメンボとオケラのCは炭素では?
Re:CはCでも・・・ (スコア:3, おもしろおかしい)
> 世の中はCでできている。
そう。人間だって。
あ、Cの「結果」か。
Re:CはCでも・・・ (スコア:1)
あれは追放されてからだったと思うけどね。
Re:CはCでも・・・ (スコア:1)
「Run C」は実在する!
http://aucfan.com/aucview/yahoo/b117428582/ [aucfan.com]
#いいリンクが無かったので怪しいオークションサイト
Re:CはCでも・・・ (スコア:2)
一部のオケラはCじゃなくて四位 [netkeiba.com]でできているんです。
#わけのわからんのを2着に持ってきやがって・・・
Re:CはCでも・・・ (スコア:1, すばらしい洞察)
世の中にはポインタの加算でなにが起きるか理解できてないのが結構いますから。
Re:CはCでも・・・ (スコア:2, 興味深い)
わからんでもないけど、この文脈だと「ポインタの加算」は「ポインタ値への数値加算」でいいと思うんだが。
...人間には優しくないからこそ、分かりやすいほうに倒して会話しないとドッチボールになっちゃうし
M-FalconSky (暑いか寒い)
Re:CはCでも・・・ (スコア:4, 興味深い)
> ポインタ同士の演算はコンパイル通らないから
ポインタ同士の"引き算"ならコンパイル通りますよ。
Re:CはCでも・・・ (スコア:1)
同じ型なら引き算は通る(比較も通るけど)。結果は「(ポインタ-ポインタ)/型サイズ」だったような。
Re:CはCでも・・・ (スコア:1)
いや、Cのポインタにおいて、型のサイズは重要ですよ。ヒントどころじゃない。
たとえば、int *ptr1,*ptr2、sizeof(int)==4なら、
ptr2=ptr1+1;
としたときに、アドレスで見るとptr2はptr1に4バイト足した位置を指すようになるわけです。
ここから、逆に、ptr2-ptr1==1 になるようになっていて、演算の対称性が保証されている。
つまり、ポインタ同士の引き算は「(ポインタ-ポインタ)/型サイズ」 [srad.jp]となる。
このようなサイズ情報込みで考えると、「ポインタと整数の加減算」および「ポインタ同士の減算」は定義できても、「ポインタ同士の加算」は定義できません。
(ポインタと整数の加算は交換則が成り立つようになっていて「ポインタ+整数」「整数+ポインタ」どちらも結果はポインタ。
「ポインタ+ポインタ」を、「ポインタと整数の加算」と見なすには、どちらを整数と見なすかという情報が無いし、
ポインタのサイズによっては、どちらを整数と見なすかで結果が変わります。)
#Cの配列アクセス「array[index]」は、「*(array+index)」のシンタックスシュガーなので、「整数+ポインタ」という順番での加算計算できるってことは、「index[array]」って書いても問題ないんですよね。
#「data = 5[ptr]; 」みたいなコードを書くと、「data=*(5+ptr);」と解釈され正しく動作するけど混乱の元。
Re:CはCでも・・・ (スコア:1, 興味深い)
C++0xでも相変わらず未定義です。定義しても並列化などがやりにくくなるだけなので、そんな軟弱な規定はほかの遅い言語に任せてください。
Re:CはCでも・・・ (スコア:3, 参考になる)
言語仕様と実装の問題をいっしょにするのはどうかと思いますが。
間違ったコードはちゃんとコンパイル時及び実行時にエラーとして叩き落とす実装(たとえばFail-Safe C [aist.go.jp])を使えばいいんじゃないでしょうか。Cの言語仕様はこのような実装を禁じていません。未定義とは文字通り「何をしてもいい」ので、コンパイルエラーや実行時エラーにしてもいいのです。
「そんなもん仕事では使わん」と言うなら、Pascalだって仕事で使うことなんかありませんし。むしろ(将来Cで仕事をさせる予定の人間に)過保護な高級言語ばかり使わせていると、間違ったコードはちゃんと言語がエラーにしてくれると思い込んでしまいませんか?
Re:CはCでも・・・ (スコア:2)
#釣り?
なんら、変な所ないのですが・・。
>整数を一旦文字列にしようと思ったらしいですが、スタック壊しながら動いちゃいますから、初学者は何が悪いか気がつきませんよね
盛大な釣り?
閑話休題
Re:CはCでも・・・ (スコア:4, おもしろおかしい)
> 願わくは一生Cのプロジェクトで関わり合いにならないことを祈っておきます。
賛同者は多いとおもいますが、経験的には、その類の願いが叶うことは決してありません。(泣
Re:CはCでも・・・ (スコア:2, すばらしい洞察)
c言語の欠点が、まさにこの問答で現れていると思いますよ。「初学者」と「Cのプロジェクト」参加者との、このギャップを埋める努力を誰がしているのか、と。もしかしてその努力って、初学者の自助努力に大きく頼っていませんか。
初学者が「Cのプロジェクト」参加者レベルまで達するのに必要な学習はどのようなもので、それは独学で可能か?あるいは、間違って覚えたことを修正するのにはどうすればよいか?
客にカネを払わせるに値するプロジェクトの推進には初学者は無用でしょうが、「Cのプロジェクト」参加者レベルの人材が天から降ってくるわけもなく、何らかの形での教育は必要不可欠なわけですよ。まして、フリーソフト(たとえばlhaplusとか・・・ただしこの設例に他意はありません)などは一人でやっているわけで、その人が仮に間違った知識でコーディングしていたら?間違っているが偶然にも動いてしまう場合は?等等
c言語の使い手の雰囲気って、初学者を排除する文化が蔓延しているように見えます。「Cのプロジェクト」参加者レベルとしてはそれでいいのでしょうが、初学者を邪魔者扱いでは、その初学者がいずれ書くであろうプログラムの質はいつまでたっても上がらないでしょう。
Re:CはCでも・・・ (スコア:2)
> sprintf(number, "%d", some_small_integer);
うがぁ;;
笑えないですね;;。
そこで、「%*.」「%.*」「%*.*」とかを教えてあげましょう。
彼も一つのスキルを手に入れられます。
閑話休題
Re:CはCでも・・・ (スコア:1)
>素粒子物理学者:じゃあCは何でできてるの?
そりゃ、暗黒物質と暗黒エネルギーで出来ているんですよ。
Re:CはCでも・・・ (スコア:2)
物質の暗黒面に堕ちたんですね
Re:CはCでも・・・ (スコア:2)
餡子食う麺がどうたらこうたら。
Re:CはCでも・・・ (スコア:1, おもしろおかしい)
gccのブートストラップコンパイラをシェルスクリプトで実装する猛者が現れたら、 そいつに一生ついて行きたいと思います。
良いまとめ記事&C#参考文献 (スコア:3, 興味深い)
さらっと書き流しているけど,勘所は外してないし,変な好き嫌いの情念に絡め取られていないし,バランスの取れた記事だと思いました。ウンチク語りすぎて読みづらくなるよりは,多少ゆるめに書いておいて突っ込み所もつくっておいた方がこうした話題になっていいかな,とも。
で,元ネタにC#の参考文献がなかったので突っ込んでおきます。
超入門者にはMSの田中達彦さんが書いた「ゼロから始めるプログラミング」。アプリを作りながら学びたい人には同著者の「実践プログラミング入門編」(どっちもソフトバンククリエイティブ発行)がいいかと。贈呈本だったんだけど,どちらもコンパクトにまとまってるし,文章も読みやすいし,題材も易しめ。MSの方が書いたってことを差し引いても良くできてると思いました。
# でもLAMPばっかり触ってて,C#の出番がない・・・(^^;)
Re:良いまとめ記事&C#参考文献 (スコア:3, 興味深い)
なぜこの世にたくさんのプログラミング言語があるのかを知らない人が書いた記事だと思った
組込制御だとかCGだとか数値計算だとかの別の世界を知らないアプリケーション屋さんの意見だな
今の世の中はアプリ屋さんだらけだから、アプリ屋さんがアプリ屋さん向けに書いた記事としてはこの程度のものかな?
Re:良いまとめ記事&C#参考文献 (スコア:2)
そうですね。日本でもCG業界やゲーム業界では、RubyとPythonだと、ほぼPython一色といっていいほどPythonの方が多く使われていますね。
Re:良いまとめ記事&C#参考文献 (スコア:1)
それは俺も思った
自分の業務(ネットワーク/OSまわり)に近い視点で言えば、
ライブラリ開発やカーネル開発(依存するものを最小限にすることが求められる)とか、
複数OSをまたいでのシステム管理(移植性が重要)とか、
そこらへんの観点がないように感じたなぁ。
大規模系の開発者からはまた別の観点で言いたいことがあるんじゃなかろうか
# mishimaは本田透先生を熱烈に応援しています
なんか・・・・ (スコア:3, すばらしい洞察)
なんか、
「プログラミング言語人気TOP10の簡易解説」
の記事が
「アンサイクロペディア」
の記事に見えるのは空目?
閑話休題
CかJavascriptか (スコア:2)
学生に「どっちからはじめるべき?」って聞かれてJavascriptはすすめにくい
言語としてのJavascriptはとってもイージーだとは思うけど、XHTML、CSSとセットで覚えないとまともに使えないし
3種のコンピュータ言語同時に覚えろってちょっとどうなのって思ってしまう
Re:CかJavascriptか (スコア:2)
> 学生に「どっちからはじめるべき?」って聞かれてJavascriptはすすめにくい
そなことないよ。
GCあるし、1階級だし、オブジェクト指向もできるし。
> 言語としてのJavascriptはとってもイージーだとは思うけど、XHTML、CSSとセットで覚えないとまともに使えないし
?なんで XHTML、CSSとセット?。
> 3種のコンピュータ言語同時に覚えろってちょっとどうなのって思ってしまう
?3種??3種ってなに?
なんか、JavaScriptを理解してないとしか言えない。
閑話休題
Re:CかJavascriptか (スコア:1)
Windows Script Host で JScript がつかえますよ。
他にも、ECMAScript を採用したスクリプト処理系は結構あるはずです。
Re:CかJavascriptか (スコア:1)
Re:CかJavascriptか (スコア:1)
「まともに」ていうか、そこそこ便利に使い倒そうとした時の
習得に要するコストは、c も js も大差ないような気がします。
ジャバのガーベージコレクションって (スコア:2, おもしろおかしい)
なんでみんな大好きなんだろうか。
確かにちょっとは便利だけど劇的に開発効率をあげるような気はしない。
C++とJavaをどっちも業務に採用しているけれど、どっちが格段に便利という気もしない。
その昔、Perlの文字列処理が便利とか言われたころも、Cとくらべてそれほど違うか?と感じた。
開発にインパクトアクトを与える箇所のコーディングって、開発の初期に完了するもんだから
言語仕様にそれが含まれていようがいまいが、開発の全工程と比較したらたいした手間ではないような気がする。
Re:ジャバのガーベージコレクションって (スコア:5, おもしろおかしい)
何を言うんだ、君は。
萌えだよ、萌え。
.
GCちゃんは動きが可愛いんだよ。
一生懸命、わたわたと空き領域を探している様子と言い、
一つづつ「これは使ってるから捨てちゃ駄目」ってシール貼って回る様子と言い、
連続した使用していない領域同士をくっつけようとしているのに、うまく見つけられなくて困っている様子と言い、
最近割り振った比較的幼いオブジェクト領域は一杯面倒見ようとしておねぇちゃんぶる様子と言い。
「はーい、皆さん。年長さんになったからこっちですよー」とジェネレーション・コンパクションをかけている様子と言い。
このかわゆさを理解できないなんて…
.
まぁ、JVMの一部には、-server をつけると JVM レベルでメモリリークを起こす奴がいて、GCちゃんの努力を水泡に帰す奴があるので注意が必要だけどな。
fjの教祖様
Re:ジャバのガーベージコレクションって (スコア:1)
こうも見えるぞ。
高度成長期でメモリどんどん増えていたころは「よっしゃよっしゃ」で気前良くメモリを割り振り、
足りなくなってくると慌てて「仕分け」で空きメモリを探すも、あまり大きな領域が確保できず、
新しい処理を開始できなくなってくる。
古くからある既得権益と化した領域はなかなか開放できず、
なんとかスワップ(赤字国債)でしのいでいく。
しかし、そのうちカーネル部分がスワップに入ってしまって、
スワップがスワップを呼ぶ始末でにっちもさっちもいかなくなり、
しかたなく reboot。
解決策は、一気に物理メモリを増やす 64bit 化(インフレ策)。
でも、そのせいでシステムのいろんなところが機能しなくなりそうで怖い。
Re:ジャバのガーベージコレクションって (スコア:1)
メモリリークによる被害が広範に起きている現実を見るに, 全く説得力の無い意見だと思います.
Re:ジャバのガーベージコレクションって (スコア:1)
それインタープリターじゃないんですか?
昔の BASIC だとメモリアロケーション周りって単純に配列操作 (dim/redim) 程度だったと記憶していますし、ゴミが回収されるのもプログラム終了と同時ではないですか?
# 割り当て失敗時はゴミ回収以前にメモリ不足で落ちるし。
Re:ジャバのガーベージコレクションって (スコア:1, 興味深い)
文字列処理で本当にガベコレしてたんですよ。
PC-8001mkIIでGRAMにBASICのwork areaを設定して眺めてると、
中々面白かった。
萌えない言語に意味はあるのでしょうか? (スコア:2, 参考になる)
萌えぬなら萌えさせてみよう [fumi2kick.com]ホトトギス
# あー 10 年も前だったのか…
解説不要 (スコア:2, すばらしい洞察)
その人の用途に合いそうな言語を一つ薦めればいい。
必要なら他の言語を習得さぜるを得ないし、
趣味ならその後はじめて、複数の言語の比較が役に立つ。
その場合でも、その気があれば言語の良し悪しなんて、
使えばすぐにわかる。
逆に、使いもしない言語について講釈を聞いても、実感は伝わりにくい。
(ただし VB は除く) (スコア:1, すばらしい洞察)
Re:(ただし VB は除く) (スコア:1)
ヒゴの下はオオスミ…
# わかりにくい
Re:(ただし VB は除く) (スコア:1, 参考になる)
VB.NETは単独で49位にランキングされてますよ。37位のCOBOLよりずっと下にw
Objective-C (スコア:1, 参考になる)
Objective-Cは使ったことがないらしい。そのためかC++とどう違うの?って疑問に答え切れていない感じ。「それはジョブズにしか分からない」ではなく使えば分かるだろうし、長所にも特にObjective-Cならではのことが何も書いていない。
とりあえず1つ挙げるとしたらダイナミックバインディングだろうか。他にも色々と面白いことができる。
Re:気になるところ・変なところはこちら (スコア:1, 興味深い)
Re:気になるところ・変なところはこちら (スコア:2, おもしろおかしい)
http://maps.google.co.jp/maps?q=35.512369,139.483666&um=1&ie=U... [google.co.jp]
ここ? あー、確かにここは「ある意味」遭難しそうだよねぇ…
fjの教祖様
Re:IBMに入信? (スコア:1)
やっぱ PL/I じゃないですか、そこは?
Re:IBMに入信? (スコア:1, 興味深い)
Re:IBMに入信? (スコア:1)
Re:IBMに入信? (スコア:1)
Re:IBMに入信? (スコア:1)
いやいやIBM なら COBOL だってまだ現役 [ibm.com]ですよ?
# ほんとに研修やってくれるのか、これ。
Re:C関係で思ったこと (スコア:2, 興味深い)
C++信者です。
中途半端に親切な言語だと、その親切に頼ったコーディングになってしまうような気がします。
たとえば、GCのおかげでメモリリークを気にしなくて良くなったせいで、後始末を省略する癖が付いてしまったとします。
すると、ファイルを閉じ忘れて放置するとか、DBを切断し忘れて放置するとか、メモリ以外のリークに配慮が行き届かない、コーディングスタイルが身についてしまわないか心配です。
そこでC++の出番です。デストラクタのおかげで、オブジェクトがスコープから外れると、必ずシステムリソースをクローズした上で解放される、といった仕組みを作り込むことができます。(もちろんバグ有りの腐ったライブラリはこの限りではありませんが)
そんなわけで、JavaやC#はfinalizeされるタイミングが確定的ではないので、GCによるメリットより、C++のようなデストラクタによるメリットの方が上だと思っています。
そのほか、C++の素敵なところは、コピーコンストラクタと代入演算子のオーバーライドができる点が、私のお気に入りです。単純にaをbに代入するというようなコード(b = a;)があったとします。コピーコンストラクタと代入演算子の実装次第で、オブジェクトのディープコピーをさせることもできるし、参照カウンタ付きポインタを実装することもできます。JavaやC#はCloneableなオブジェクトを実装するのが面倒という印象があります。
んー、ちょっと苦になるかな。解放し忘れるリスクは否定できないので、やっぱり、スコープから抜けたら確実に解放できる仕組みが欲しいですね。C++なら作業用メモリは、std::vector tmp(n);とかで確保すればいいし。