2014年現在、C言語の意義はどれぐらいある? 141
ストーリー by hylom
コンピュータの仕組みを知る上でも知っておいて損はないが 部門より
コンピュータの仕組みを知る上でも知っておいて損はないが 部門より
headless 曰く、
本家/.「How Relevant is C in 2014?」より。
1972年にC言語が作られて以降、数多くのプログラミング言語が生まれ、消えていった。Cプログラマーを対象にした求職情報の件数は突出しているとはいえず、RedditのCコミュニティーのユーザー数はC++の半分程度にとどまっているものの、C言語は2014年のTIOBE Indexですべて1位を獲得するなど、現在も高い人気を保っている。
David Bolton氏によれば、リビジョンの古いC言語を新しいCコンパイラーがサポートしている点、C言語で書かれた多くのソフトウェアが現在も使われており、インターネットの基盤にもなっている点、学習が容易な点など、複数の要素によりC言語が21世紀の現在も大きな意義を持ち続けているのだという。
「C言語を知ることで、C++やObjective-C、Perl、Python、Java、PHP、C#、D、Goといった、Cから派生したブロックの書式を持つ高度なプログラミング言語を容易に理解できるようになる」とのこと。皆さんはどう思われるだろうか。
初学者にとって (スコア:2)
-- 哀れな日本人専用(sorry Japanese only) --
数値計算業界 (スコア:1)
数値計算プログラムのユーザーサブルーチンが
C言語のみ対応とか、Fortranのみ対応とかもある。
思想さえしっかりしていれば近代的なコード風に書くことできるでしょ?
と指摘されれば否定できないが、コンパイラサポートがあった方が
エラーチェックができて助かる。
Re: (スコア:0)
PythonやJavaがいくら速くなったといっても、やっぱりまだFORTRANやCでカリカリチューニングした方が速いし…。
んでも、最近はPythonに浮気中。
「馬車馬ルーチンはそのうちCに書き換えるぜ!」と思いながらも、「書き換えてチューニングする時間×時給換算した私の給料よりも、新しい計算機買ったほうが安い…」となってとん挫する。
Re:数値計算業界 (スコア:1)
> PythonやJavaがいくら速くなったといっても、やっぱりまだFORTRANやCでカリカリチューニングした方が速いし…。
間違い。
下手な人が作ったプログラムより、コンパクトで、最適化された高級言語の方が、早い。
本当に、カリカリチューニングできるのはほんの僅かで、本人はその気でも、、、、
アセンブラ化して、スピードアップしたソースを Cで書換えて、さらに高速化した事もある。
混在するとメンテナンス性が劣化する。
(どういうコードが出力されるか、意識はしてたが、、、CPU依存か)
あっ、、と、数値計算の世界では、専用ライブラリをどう使うか、が問題だったでしょうか?
門外漢なので、ゴメン。
Si! (スコア:1)
Re:Si! (スコア:1)
本家はダジャレ系とかで楽しんでますね。
1ゲットしたSiくんに対して「Cの話してんだから0番目だろ」と突っ込んでました
Re:Si! (スコア:1)
余談ですが、正確な綴りは sí です(アクセント記号がつきます)。
si だと if という意味になります。
svn-init() {
svnadmin create .svnrepo
svn checkout file://$PWD/.svnrepo .
}
Re:Si! (スコア:1)
組込み業界 (スコア:0)
ではまだまだ現役だと思うけど
ミドルウェアとかドライバとか・・・
レジスタを直接叩くとか他言語(javaとかPHP)で出来るのかな?
Re:組込み業界 (スコア:2)
できるか出来ないかで言うと、
Common Lisp は アセンブリを書けますし ( http://g000001.cddddr.org/2011-12-08 [cddddr.org] )
Java Bytecode 上の黒魔術はVMでアセンブリを書くようなものです。 ( https://github.com/brettwooldridge/HikariCP/wiki/Down-the-Rabbit-Hole [github.com] )
C はやはりOSとのインターフェースを弄るのに時々必要です。
資産が大きすぎますので、どうしても自分で描き直したい時を除き、Lisperは結構 libffi からC関数を叩きます。
C++は中途半端なので使いませんが、最近は Clasp というものが出てきました。 http://www.infoworld.com/article/2687997/application-development/clasp... [infoworld.com]
布教終了。
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re:組込み業界 (スコア:2)
それをいうなら、asm ディレクティブもGCCの拡張だったと記憶しているのですが...
しょせんレジスタうんぬんはハードウェア依存の内容。
ハードウェアの違いを吸収するためにプログラミング言語はあるんですから、言語仕様にそれを求めるのはお門違いでしょう。
だからこそ「できるか出来ないかで言うと」って言ったんですよ。
CLのなかでのアセンブリ環境ですが、
一応, sbcl と cmucl (この2つは同じ系列),
Clozure CL ( https://groups.google.com/forum/#!topic/comp.lang.lisp/k6J8J3b1V5k [google.com] ),
Allegro CL (商用, 解説記事 http://g000001.cddddr.org/3625311600 [cddddr.org] )
で使えるみたいです。
sbcl と clozure cl はx86上のフリー処理系のメインですから、ほとんどの環境で利用できると考えてよいのでは。
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re:組込み業界 (スコア:1)
組込制御するのにオブジェクト指向とか無くてかまわないし
規格がキッチリ定まってて過去の資産があるから科学技術計算のFORTRANと同じでいつまでたっても死なないよ
古い時代の「効率重視」の言語だから今のトレンドにそぐわないところは多々あるが非力なプロセッサで使うには文句言ってられん
Re:組込み業界 (スコア:1)
いや、組込みも様々。
ローレベルだったら、アセンブラに近い記述が必要なので、せめて Cと思うけど、
UIに近い階層とか、外部 I/F の上位階層だと、オブジェクト指向の手口が使えた方が楽。
あいだを取り持つのがちと面倒だけど、それは使い分けでしょう。
それに最近は、組込みも大規模化してるから、切り口を明確化するにも良いかも。
非力なプロセッサで、キリキリと組むの、最近、縁無いな。来ないかな。
と、言うより、業務系の仕事はつまらない。 UIばっかりで。
技術計算系でもいいけど。
Re: (スコア:0)
OSがCだもんね。あと、Cが使えないC++プログラマがいるのかいなと
Re: (スコア:0)
STL/boostを使うという風に徹底すれば、生ポインタとか生メモリとかは見なくても済みますよね。
OSのフレームワークとか使おうと思うと、ポインタと無縁ではいられませんが・・・。
Re:組込み業界 (スコア:2)
そうですね。
Cはマシンに近いだけ、マシンでの動作を教えるには便利ですが、
実際に「同じことをする」ならC++の方が楽ですから。
やらなくなった方法は忘れていきます。
それに、はじめからC++だけを教わった人はCでやる方法はわからないですね。
勝手が違いすぎて、学習しようにも頭を悩ませるでしょう。
Re: (スコア:0)
システム記述用を目的の1つとして作られてて、設計がよく合致できてるよね
自身のランタイムや多言語のグルーとしても使われるあたりで証明になってるんじゃないかな
他の言語を学ぶ時の橋渡しになるかは知らんけど、
このハード叩くだとかのシステム分野ではずっと残るのじゃないかな
プロセッサと人間をつなぐもの(Re:組込み業界) (スコア:0)
高級アセンブラとしてのCの立場は、プロセッサが高級言語をバイナリ実行するようにならない限りなくならないのでは?
巷のアプリで高級言語使えるのは環境としてのソフト(OS・ライブラリ)ががんばっているからでしょ。
プロセッサが高級バイナリを実行できるようになるか、環境を新たに作る必要がなくなるまでは生き延びるよね?
Re:プロセッサと人間をつなぐもの(Re:組込み業界) (スコア:1)
そういうのが発展してたらCが必要なかったのかな?
やめてください (スコア:0)
C言語しか出来ないSIerもいるんですよ!
Re: (スコア:0)
(^^;
Re:やめてください (スコア:1)
概念は理解できても、使いこなせない人は多いよ。
どう見てもCの関数のようなクラスを作る人とか
オブジェクトにせず配列で添え字をポインタのように使う人とか
一応動くんだけど、全然オブジェクティブじゃない頭の人。
Re:やめてください (スコア:3)
それは、オブジェクティブでないのではなく、
オブジェクティブだがその言語のオブジェクト機能を使っていないだけですよ。
オブジェクトの概念さえあれば、たとえCからstructがなくたってオブジェクト思考プログラミングは可能です。
コンピューターがメモリのアドレスを元にして動いている限り、結局、structなんて配列の糖衣構文。
もちろん迷惑なことに変わりはありませんが、その人がオブジェクト指向を理解していないわけではありません。
ただたんに、言語の機能と頭の中のイメージが繋がっていないだけ、使い方を知らないだけです。
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re:やめてください (スコア:2)
いままで、何度カルチャーショックに出会った事か。
本人が、オブジェクト指向使ってるという意識なのが、もっと大変。
ツールがサポートしてるってのと、その概念を理解してるってのは別物。
ちゃんとオブジェクト指向でコードを書くだけでも、結構、品質上がるのに、、、
壊してくれる方々。
# ちょっと面倒だから、ってすぐにグローバル作っちゃダメ。
# とにかく変数を作って初期化も勘弁。
# ......
Re:やめてください (スコア:1)
うん、ベースクラスから、派生してなんかやってるのと思ったら、
単に、継承しただけで中身空っぽ。。。が、、、。
独自機能が必要になった時、と言うけど、その頃は、
また、継承したクラス作ってきっと機能追加してる。
だって、動いてる機能(関数)には手を入れるな、が基本ルールだもの。
その派生クラス、どこで使われているか、分からないし、、。
Re:やめてください (スコア:1)
いや、Cっぽい関数っていうのは、たいていの場合オブジェクト指向じゃなくなるよ。
Re:やめてください (スコア:2)
あ、なるほど、神クラス的なやつですか、読み違えました。
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re:やめてください (スコア:2)
hello worldを書いてみることを目的にする人にとって、それができたら言語を使いこなしたといえるのか?
Re:やめてください (スコア:1)
アセンブリ言語が使える人ならCは理解できてもC++が苦手というのは結構あるんじゃないでしょうか。
(・ω・)ノシ
ABI互換性 (スコア:0)
基本的にプログラミング言語はプログラマーからみた振る舞いは定義しても、コンピュータでどう実装されるかまでは定義しない。
GCとかポリモーフィズムに必要な型情報は基本的にコンパイル時or実行時一回きりの使い捨てで再利用できるようになってない。
Cも定義はされていないが、ハードに近いおかげで関数も構造体もアーキテクチャが同じなら大抵同じ構成になるから、OSやライブラリはCで実装するのが無難。
Re:ABI互換性 (スコア:2)
以前に書いた日記 [srad.jp]で、その辺の面倒な事があったなー、と。
64ビットな構造体の返し方が、CとC++で異なっているという。
Re:ABI互換性 (スコア:1)
C言語が必要ないというのなら (スコア:0)
とりあえず、libcやglibc、CRTやMSVCRTを全削除すればええんやで(ニッコリ
そしてCライブラリの無くなったその不毛な大地で、高度なプログラミング言語(笑)とやらを好きなだけ使えばええんや。
# Cライブラリ無くして動作する、高度なプログラミング言語(笑)とやらがどれだけあるのか見物だwww
Re: (スコア:0)
Delphiとか?
Re: (スコア:0)
デルファイも演算子とかはC/C++で定義されていますよ
Re: (スコア:0)
ぴゅう太
Re: (スコア:0)
つ Go
Re: (スコア:0)
本家の問いかけ方と違っちゃってるから。向こうは(あんたの日常や仕事に)どれだけCが関わってる?って聞いてると思う。
直接関わってなくても重要な一部となってて意義があるということは当然ありうるんで。
あ、あなたがおかしいと言ってるのじゃないよ。意義と言われたらそう答えて何もおかしくない。
質問内容変えたいなら、丸ごと本家コメント引用で済ませないで何か書いて欲しいよと思いました。
pythonやruby の静的型版を作ってよ (スコア:0)
そういうのあれば、C言語が必要な場面、
もう少し減るのでは???
Re:pythonやruby の静的型版を作ってよ (スコア:1)
RPythonで書いて、PyPyでコンパイル...はちょっと違うか
# 制約がるのはまあ > RPython
M-FalconSky (暑いか寒い)
Re: (スコア:0)
角を矯めて牛を殺す。。
#それなんてjavaや?
「はじめてのC」を超える入門書が必要だ! (スコア:0)
といいつつ、最近arduino IDE使う羽目になった(´・ω・`)
Re:「はじめてのC」を超える入門書が必要だ! (スコア:1)
明日のHaskell
ALGOLの子孫 (スコア:0)
Perl, Python, JavaはALGOLの子孫じゃないの?
Cは高級アセンブラだと思ってた
Objective-CはSmalltalkの要素を取り入れたCか
呪いあれ (スコア:0)
C言語ができるから、見た目が似ているJavaやC#ができるつもりだとかぬかしているプログラマーは、
全員死んでしまえ。
人類に害悪しかもたらさない。
Re:呪いあれ (スコア:2)
「JavaやC#ができるから、Cもできるはず」なんてのたまう奴は聞いたことないなぁ。
それどころか、「このプロジェクトC#だと思ってたらCだって。でもC#できるならCもできるよね」なんてマネージャや営業が言おうものなら、
「バカですか?ライオネルリッチーが来ると思ってたらライオンが来たってくらい全然違うんだけど。」と返されるのがオチ。
Re:カーネル記述言語 (スコア:1)
PL/IはメインフレームのOSで使われた(今もかな?)という話は聞いたことがありますが, Pascalは何かに使われたのでしょうか? もともと教育用なので, OSの様な大規模システムには向いていませんし, ハード操作を含むIO周りが貧弱で実用にはならないと思いますが.
Pascalの後継にあたるModula2なら, Lilithシステム [wikipedia.org]で実績がありますけど.
Re:カーネル記述言語 (スコア:1)
Apple Lisaや初期のMacintoshなんかは数えていいのじゃないかな
http://en.wikipedia.org/wiki/Pascal_(programming_language) [wikipedia.org]
http://ja.wikipedia.org/wiki/Pascal [wikipedia.org]
Re:カーネル記述言語 (スコア:1)
p-systemは?
http://ja.wikipedia.org/wiki/UCSD_p-System [wikipedia.org]
Re:D言語 (スコア:1)