プロが教える店舗&オフィスのセキュリティ対策術

C,C++,VB,Java これらの各言語の特徴や開発にあたって注意しないといけない点などを教えてください。

■背景
現行のシステムには様々な開発言語が用いられていますが、時々なぜこのシステムを開発するのにこの言語を使ったんだろう?と思うことってありませんか?
私は試行錯誤すればどの言語でも大抵のことはできると思っているせいか、いまいち言語の特徴が明確にできません。
上記の言語を比較してそれぞれどのようなことが言語の特徴となるのでしょうか?
よろしくお願いいたします。

A 回答 (3件)

C言語……元々UNIXを開発する為に作られた。

OS開発言語。俗に「高級アセンブリ」等と呼ばれる。開発当時のレベルでは「プラットフォーム間の差異を吸収する」移植性の高い言語だった。
これは元々UNIX自体が特定の「動作可能/保証するプラットフォームを持たなかった」為である。「移植性の高いOS」を作るための「移植性の高い言語」が開発目的の一つだった。
Algol等の「構造型プログラミング」の考え方を基盤としている。そして元々日常ユースは想定されていないし、「大きくて複雑なプログラム」を書く為のモノでもなかった。
UNIXの開発思想は「一つの目的の為の小さなプログラム」の集合体だった筈だが別のプラットフォームで大きくて複雑なプログラムを書く事に使われ初め当初の使用目的と大きく乖離していった。一つの背景に、貧弱なマシンでスピードを稼ぐには「C言語しか選択肢が無い」と言う状況が続いた為と思われる。
なお、C言語のコンパイラの最適化は他の言語を上回るケースが多く、現在ではOSの他に、Lisp、Perl、Python、Ruby等の「言語を書く為の言語」として使われるケースが多い。元々、プログラミング言語はアセンブリ言語で組み立てられるケースが多かったが、現時点その分野も前述の特徴の為、C言語に置き換わってる。

C++…基本的にはC言語にSimulaと言う言語の特徴を付け加えたモノ。最初はObjective CとかC with Classes等と呼ばれた。ただし、ここで言う「オブジェクト指向」は元々オブジェクト指向、と名乗ったSmalltalkの概念とは(被る分もあるものの)大幅に異なる。

Squeak(Smalltalk):
http://squeakland.jp/

また、厳密には「オブジェクト指向」を表す定義も存在しない。ただし、C++がポピュラーになるにつれて「C++型の」オブジェクト指向が受け入れられた。
C++は必ずしも「より良いC」は意味しない。元々のデザイナーであるStroustrupによる冗談も存在する。

http://hp.vector.co.jp/authors/VA000092/jokes/st …

VB……本家BASICとはかなりかけ離れたMicrosoftのプロプリエタリ言語。ただし、「Windowsで動くソフトを作る」分には最強の能力を発揮する、と思われる。また、BASICとしては最高、との評もある。
「VBのオブジェクト指向は本格的ではない」等と言った批判もあるが、前述のように元々「オブジェクト指向」自体の定義が曖昧な為、割に見当違いの批判だと思われる。
ただし、C言語やC++みたいに移植性は念頭に置いてない。また、本家BASICともコードの互換性はほぼ無い。

Java……一言で言うと改良版C++。開発者のジェームス・ゴスリングもそう述べている。提供元はSun Microsystems。
あまりに低レベル(アセンブリに近い)なC言語特有の操作(具体的にはポインタ)を止め、メモリ管理をガベージ・コレクション(ゴミ集め)に任せてる。これでプログラマがメモリ管理に頭を悩ます事が無くなった。
また、登場した70年代と違い、C言語の「移植性の利点」が薄れてきた事もあり、もう一段階上のレベルでの移植性を達成するように作られている。かいつまんで言うと、OS上の「Java仮想マシン」で動く言語、と言う構図になっている。言い換えると「コンピュータ上で動くコンピュータ」で動くアプリケーションが作れる、と言うのが特徴。プラットフォームの差はその「仮想マシン」で吸収される。
従って、CやC++等と違い、Javaのソースはネイティブコードにはコンパイルされないで仮想マシン上で動く中間コードへとコンパイルされる。
移植性はピカイチだが、反面、Java製のアプリは「コンピュータ上で動くコンピュータ」上で動く為、スピードの面で言うとCやC++で作成されたアプリに劣る、と言う欠点も持ち合わせている(ただし、色々なエミュレータなんかを見ても分かるように、近年はハードウェアの進歩により、そこまでスピードは問題では無くなって来た)。
    • good
    • 2

>移植性はピカイチだが、反面、Java製のアプリは「コンピュータ上で動くコンピュータ」上で動く為、スピードの面で言うとCやC++で作成されたアプリに劣る、と言う欠点も持ち合わせている(ただし、色々なエミュレータなんかを見ても分かるように、近年はハードウェアの進歩により、そこまでスピードは問題では無くなって来た)。


GUIのみ各OSにネイティブ化するSWT
Javaのプログラム自体をJavaVMのコードではなくて各OS用にネイティブコンパイルできるgcj
    • good
    • 1

上記の言語は、ほとんど知らないDelphiユーザーなのですが。



メーカーで言語の指定がある場合もあると、親戚のプログラマーが言ってましたよ。
きっと自社でチェックしたいのでしょう。
で、当時の人たちがやめてしまうと、「なぜ?この言語で?」って事になるのかと。

>どの言語でも大抵の事はできる
は、私もそう思います。
昔は、処理速度で分けられていましたが、高スペックのおかげで、気にならなくなったと思います。
最近は、”習得のしやすさ”、”動作環境(どのOSで動くようにするか)”、”開発効率”で、特長づけた方がいいと思います。
OSとか、ドライバーとか、特殊なソフトなら話しは別ですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!