人気のプログラミング言語、Cが4年ぶりに1位に返り咲く 117
ストーリー by soara
Sun-set Java 部門より
Sun-set Java 部門より
あるAnonymous Coward 曰く、
人気のプログラミング言語を示す TIOBEプログラミングコミュニティ指数で、Cが 4年ぶりに 1位に返り咲いたそうだ(TIOBE Software、本家/.記事)。
TIOBEプログラミングコミュニティ指数は各言語のエンジニア数、扱うサードパーティベンダ数などから人気のプログラミング言語を毎月算定している。Cのシェアはここ 10年ほど 15~20%と安定していたとのことで、この度 1位に返り咲いたのは Cの人気が急上昇したからではなく、Javaのシェアが減少したためとのこと。Javaは長期に渡りシェアが減少傾向にあり、代わりに JVM上で動作する言語のシェアが伸びているとのこと。JavaFXなどは 20位以内突入も目前だそうだ(今回の算定では 22位)。
群雄割拠と言う感じ (スコア:3, 興味深い)
結構偏るものかと思ってましたから、トップでも20%行かないというのは意外でした。
よく、メジャーな言語・マイナーな言語とかいう評判がありますが、トップがこの程度なら、
どの言語もメジャーと自称して良いような気がします。
Re:群雄割拠と言う感じ (スコア:2, 興味深い)
Tcl/TkやBourne shellのProgramming Communityなんてものが本当に存在するのかね?
結局この世に万能プログラミング言語などは存在しないから、いったん現実の開発に使用された実績のあるプログラミング言語は(特定のアプリケーションに特化したものほど?)死にもせず消え去りもせず生き続けるということだ.
Re:群雄割拠と言う感じ (スコア:3, 参考になる)
ここの [tiobe.com] のFAQ が参考になるかしら。
Re:群雄割拠と言う感じ (スコア:1, 興味深い)
Re:群雄割拠と言う感じ (スコア:1)
System-Cならともかく、普通のCやjavaとかとおなじ土俵のプログラム言語
として比較する物じゃ無いと思うんだけどなぁ
Re:群雄割拠と言う感じ (スコア:2, 興味深い)
VHDLによる hello world [wikipedia.org]
…VHDLのコード例が「Hello World」と「フィボナッチ数列」というWikipediaのエントリは、VHDLの説明として間違っているとしか思えません…
Re: (スコア:0)
異国はともかく日本では偏ってる、ということだったりして。
Objective-C (スコア:3, 興味深い)
Re:Objective-C (スコア:1)
最近、ジリ貧なソフト会社がiPhoneに飛びついた結果じゃないですかね。
Re:Objective-C (スコア:1, おもしろおかしい)
>最近、ジリ貧なソフト会社がiPhoneに飛びついた結果
Microsoftのことかーーー!!
Microsoft、iPhoneアプリに参入
http://www.itmedia.co.jp/news/articles/0812/15/news024.html [itmedia.co.jp]
Cも急上昇ですよ (スコア:2, 参考になる)
C: +2.59%
Java: -1.29%
明らかに、Cの人気が急上昇してるんだが。
JVMはJavaだけのものではないんです (スコア:2)
プラットフォーム非依存性やらガベージコレクタやらはJVMの機能であって、表層のJava言語はどうでもいいってみんな気づき始めてるんでしょうかね。
Scalaにスイッチしても失うことは何もない(むしろ型推論なりlambdaなりが手に入る)んだから、JVM上の言語でJavaを特に選ぶ必然性はないわけで。
言ってないことに反論するなよ
違った切り口で考えてみる (スコア:2, 興味深い)
WEBの仕事が減って、組み込みの仕事が増えたんだろう。
C一筋10年 (スコア:2)
オールドタイプにはプロンプトで動くCプログラミングが一番落ち着く。
エディタ?もちろんnoteapdです。
一番でかくても800行くらいだから、なんとかなります。
簡単なテストプログラムなのでそんなレベルです。
ちなみに学生の時にCプログラミング実習で配布された
Borland Cコンパイラを使っているんだが、
ライセンス的に大丈夫なのだろうか?
# 他に多用しているのはバッチ(!?)
# あと、ごくたまにVB.netも使うかも。
# でも本業はハードウェア
不人気の言語 (スコア:1, 興味深い)
を教えてもらったほうが参考になる、
Re:不人気の言語 (スコア:3, おもしろおかしい)
本当は使いたくないんだけど、諸般の事情により使わざるを得ない言語という基準でおk?
COBOLのことかー!!
Re: (スコア:0)
PHPとVB6(VB.net含む?)も捨てがたい。
世代的にはCOBOLやCより数段新しいはずなのに、あの設計の古くささはどうよ。
Re: (スコア:0)
カローラと同じカウント方法 (スコア:1)
#VBAをVBとしてカウントしたら面白そうだ
Re:カローラと同じカウント方法 (スコア:1, 参考になる)
亜種の扱いに付いてFAQに書いてあります。
例としてBasicが取り上げられており、
・Basic には Visual Basic、QBasic Microsoft Basic などが含まれます。
・VB.NET もしばしば Visual Basic と呼ばれるため、Visual Basic のエントリに含まれます。
・言語の集合の評価は、個々のエントリの最大値を取る(合計ではありません!)ことで計算されます。
とのことです。
したがって理屈の上では
>亜種も含めてカウントしてたらそりゃ数値上は上位にくるだろう
こうはなりません。
>#VBAをVBとしてカウントしたら面白そうだ
上位100位までに「VBA」らしきエントリが無いことから、5位の「(Visual) Basic」に含まれていると思われます。
Forthも38位に… (スコア:1)
なんか勇気づけられたw。
#存在が忘れられていないという点で
masamic
JavaFXってどこで使われてるの? (スコア:0)
Re:JavaFXってどこで使われてるの? (スコア:2, 参考になる)
http://javafx.com/samples/ [javafx.com]
ダメだ (スコア:2, おもしろおかしい)
プロ向けじゃないな(キリッ
Re:ダメだ (スコア:1, おもしろおかしい)
最近のhello worldは複雑怪奇
http://d.hatena.ne.jp/toyoshi/20100208/1265587511 [hatena.ne.jp]
仕事にしてないから、あえて言ってみる (スコア:0)
#そうさ化石級の扱いのpascalさ
Re:仕事にしてないから、あえて言ってみる (スコア:1, おもしろおかしい)
意外な結果 (スコア:0)
逆に、JavaScriptやPL/SQLなどのように、一般的に使われていると思い込んでいた言語が、さっぱり不人気なのはもっと驚いた。
世間様はCでWebアプリを作ったり、日次バッチ処理を作っていたりするんだろうか?
Re:意外な結果 (スコア:1, 興味深い)
Java から C へ移ったわけではないと思いますよ。
Web アプリを書くのに Java 以外の言語の利用が増えていたり、Java でもフレームワークの普及で開発規模が抑えられるようになっていたりで、動員される人数が減っていても不思議じゃないですね。
ターゲットが Windows サーバ方面だと、C# と .Net Framework に移ったところもあるようです。
組み込みではアセンブリ言語から C 言語への移行がようやく落ち着いてきた感じなので、当分は C が廃れることはないでしょう。
asm イメージが描ける Portable Assembler としての C ですから、代替できる言語がないのです。
Re:意外な結果 (スコア:2, 興味深い)
価格がこなれてきて、今まで、コンパイラの使用を想定していないアーキテクチャの
組込みプロセッサを採用していた分野にまで、それなりのプロセッサがおりてきた
っていうことじゃないでしょうか?
本当に高機能が必要ない部分にまではおりてこないでしょうが、
他社の製品との差別化のためにプロセッサを少し高性能なものにして、
ソフトウェアで機能を追加するっていう分野は増えてるんじゃないでしょうか?
Re:意外な結果 (スコア:1)
> 世の中のデファクトがCになってしまっているから、非技術的な理由で他の言語はどうやっても受け入れられないだけ
それは今回C言語が「返り咲いた」理由としてはおかしいと思いますよ?
ずっと1位だった理由というなら納得がいきますが……
Re:意外な結果 (スコア:3, 興味深い)
RAM 16 ~ 24 bytes
Renesas 4203
1 word が 4 bits で
RAM が 64 words
Texas Instruments TMS370
RAM 128 bytes ~
Re:意外な結果 (スコア:1)
門外漢なのでよく分からないのですが、実質としてプログラム込みの単機能の部品扱いではないのですか?
BASE言語とかDOH-Cとか…_| ̄|○(Re:意外な結果 (スコア:1)
かなり胡散臭い(と言うか何というか)使い方しないと駄目ですけど、処理ルーチンをC文法で記述する事は今でも出来るのでは…?
アセンブラでガシガシ書くよりはソースコードの可読性が上がってデバッグが楽になる…筈。但し、制約条件を外れると動かないコードになったりコンパイルが破綻したりしますが…
# まぁ、頭が最適化されてたらアセンブラに勝る物はないのですが、
# 比較的複雑な制御シーケンスを最初からアセンブラで記述するような時代でもない気がする。てか、もうやりたくない…
ワークRAMの大きい小さいは瑣末な事でしょう…スタックが使えない(><)とか言っても、ごくごく小さなRAM領域のマップを抽象化したり定数やミドルウェア的な部品化されたサブルーチンの類を多数(あくまでも比較的)リンクしてROMに焼き込む方が数段ややこしい訳で(デバッグ工程では特に)。
そういう用途に、C言語というのは本来的には使いやすい筈なんですけどね。(実際、15年近く前の某国内大手マイコンメーカでは、4bit MPUにたいしてCスタイルの開発環境を用意してはいた…タダでも高価な開発環境の某社の中でも突出して高価なので、アセンブラしか使ったことはありませんでしたが)
今時はGCCのようなリッチ過ぎる仕様の物が主流なのでわかりにくいかもしれませんが。
Re:意外な結果 (スコア:2, 参考になる)
ユーザ側です。
startup code 以外もっぱら C なんですが、生成コードを意識するために、プロジェクト初期に asm 出力してチェックしてます。
以下のような C ソースで asm 生成コードを確認して所要クロックを数えるのはお約束です。
unsigned short cond;
if (cond) hoge();
if (cond!=0) hoge();
if (!!cond) hoge();
あと、コンパイラの更新で生成されるコードサイズが変わってしまい、
EEPROM に収める配置を見直す事態になって泣きつかれたこともあります。
C というより Macro Assembler を使ってる気分。
Re:意外な結果 (スコア:1)
私の高校時代にはCの勉強をするために、コンパイラの吐くasmを見たものだが...。
当時はオプティマイズなんて全然出来てなかったので、どういうプログラムを書くとどういうコードが出るかよく分ったんだよね。
ところで、-O2ではなく-O0 (すなわちオプションなし)の方が良くない?
小さい関数だとstack frameの生成がなくなるから-O2の方が分りやすいということかな?
Best regards, でぃーすけ
Delphi ってどこで使われてるの? (スコア:0)
Delphi ?
VB6 代替で Win32 Native アプリの開発?
ニッチすぎてこのランキングそのものが誤差じゃないかという疑いが。
Re:Javaは長期に渡りシェアが減少傾向にあり、代わりに JVM上で動作する言語のシェアが (スコア:0)
なんで変な置き換えをするんだろうね。
今回の調査を見てもC#は減少していませんよ。
Re: (スコア:0)
Re:Javaは長期に渡りシェアが減少傾向にあり、代わりに JVM上で動作する言語のシェアが (スコア:2, すばらしい洞察)
普通に考えると、
と読めばいいだけでは?
Re:Javaは長期に渡りシェアが減少傾向にあり、代わりに JVM上で動作する言語のシェアが (スコア:2, すばらしい洞察)
だったら、どう書けばいいか教えてあげた方が建設的じゃないかな?
Re:オブジェクト指向言語は (スコア:1)
まずは、あなたのいう「ピュアなオブジェクト指向」の定義から始めた方がいいよ。
たぶんオレオレ定義だから。
Re:オブジェクト指向言語は (スコア:1, 参考になる)
わかってて住んでる世界が違う(定義がちがう)話をしているなんていけずなACですね。
世間ではオブジェクト指向言語って、ピュアオブジェクト指向ではなくて、データ隠蔽とかデータ・手続きのカプセル化とかその程度のハナシだというのも、わかってて言ってるでしょ。
アカデミア (と一部のソフトウェア工学者が対象としている「実世界」) とプラクティショナーの会話が成立しない、っつーのがこの分野の不幸の一つだと思う。
# 社会人学生なのでどっちの事情もちょっとわかる
Re:オブジェクト指向言語は (スコア:1, 興味深い)
そういうハナシも認識はしていますが、せっかくのオブジェクト指向がデータ抽象化に退化しちゃっているのも、オブジェクト指向が向いていない領域がある証左だと思います。
たとえばJavaではオブジェクトがあるから構造体は不要として排除していますが(そういう意味ではピュアなオブジェクト指向っぽい)、不便だと思いませんか?
よりモダンなC#にもDにもGoにもあります。
Cでマクロと分割コンパイルでプラガブルモジュールを実装することはよくあります。
#ifdef WIN32
#define drawLine WIN32_drawLine
#else
#define drawLine SDL_drawLine
#endif
といった感じ。
もっと単純に、リンクするファイルを差し替えてもよいですね。
Javaだと継承とファクトリーになるでしょうか。
interface Graphics{ drawLine(); };
class W32Graphics implements Graphics{ drawLine(); };
g = GraphicsFactory.make("W32Graphics");
g.drawLine();
無理があると思いませんか?少なくともCのほうがシンプルで明快です。線を描く責任の主体、コードの差し替えをする責任の主体としてオブジェクトをでっち上げる必要がないわけですから。
Re:オブジェクト指向言語は (スコア:1, 参考になる)
べつにGraphisクラスでも構いませんが、実行時に何らかのオブジェクトが描画主体のGraphicsオブジェクトを生成するする必要があります。(大文字にしてしまいましたが、意図としてはファクトリーオブジェクトです)
Cではソースに手を入れなくてもコンパイルオプション-DWIN32などで切り替えられます。もちろん動的に変更することはできませんが、同一のソースで異なるプラットフォーム用にコンパイルしたいいうことであればこれで十分でしょう。
ここでの違いは、プラットフォームの切り替えの責任を誰が負っているかです。
JavaであればGraphicsFactoryオブジェクトであり、Cであればコンパイルする人です。純粋なオブジェクト指向は「コンパイルする人」というメタなものの扱いが苦手だということがおわかりかと思います。
また、描画主体はJavaではGraphicsオブジェクトであり、Cでは実行している環境を陰に指定しています。
私はCスタイルを好みます。なぜなら外部環境で決まるものまでオブジェクト世界に持ち込みたくないからです。メタな「それ」は「それ」として陰的に扱いたいのです。
デザインパターンのかなりの部分はバッドノウハウですから、毒されるという表現は非常に的確です。
Re:オブジェクト指向言語は (スコア:1)
>ピュアなオブジェクト指向は、個別のオブジェクトに責任をかぶせる形で分離、定式化できる問題以外は苦手ということです。
得手不得手は相対的なものだから、
それはオブジェクト指向(言語)より得意にするものの例を挙げないと意味ないよ。
「鳥は地面を走るのは苦手なのです」というのは、
たとえば「馬やチーターより苦手」って話だけと、
「鳥は宇宙を飛ぶのは苦手なのです」というツッコミに対する返事は、
「それを得意とする生物なんて発見されてない」ってことになる。
>ファクトリーやビジターパターンなどは本質的にはただのフックであり、オブジェクトとは無関係なものです。
すげえ屁理屈。
Re:オブジェクト指向言語は (スコア:2, 興味深い)
モノではなく系の性質を扱いますので、非オブジェクト指向的になりがちです。
イテレータやコルーチンの歴史はサブルーチンと同じくらい古く、手続き型の世界ですね。
数値演算ならDSL的なFortranやMatlabがあります。COBOLもAdaも現役です。
また、ステートフルなオブジェクト指向では宣言的プログラミングとの相性は悪いです。
> すげえ屁理屈。
反論できないが気に食わないのでレッテルを貼るという行為はやめにしませんか。(あなたの性格なら反論できる時は必ずします)
それにしても何がそんなに気に入らないのでしょう?オブジェクト指向が優れたパラダイムであることを否定した覚えはありませんが。(万能であることを否定したまでです)
Re:オブジェクト指向言語は (スコア:2)
> モノではなく系の性質を扱いますので、非オブジェクト指向的になりがちです。
うーんと、適当なことを言って煙に巻きたいのかもしれないけど、
まずはあなたのいう「非オブジェクト指向的」の定義を出した方が良いよ。
「モノではなく系の性質を扱いますので」って、それとオブジェクト指向と一体なんの関係があるのかと。
#「ひょっとして、ぜんぜん分かってないんじゃない?」
#だからまずは「オブジェクト指向がなんであるのか定義しろ」と。
>(あなたの性格なら反論できる時は必ずします)
#たとえば「悪魔の証明」なんかは証明するのが一方的に難しいよ。
Re:オブジェクト指向言語は (スコア:1)
>>(あなたの性格なら反論できる時は必ずします)
もう一つ。
人の性格について決めつけは良くない。
この書き方は相手がウソを付いてるように見せかける効果があるけど、
世の中には「悪魔の証明」というものもあるので、決してフェアな書き方ではない。
Re:ランキングの計算の元になってるのは何? (スコア:1)
C,Javaはネットにサンプルコードが多い(議論などに使われる)。
Objective-C,Goは、話題になったからとりあえず使ってみた人が多かった。
そんな気がする。