メディア

第15回 プログラム言語はなぜいろんな種類があるの? 何を使えばいいの?宮崎 仁のQ&Aでよく分かるマイコン基礎の基礎

» 2015年11月27日 00時00分 公開
[PR/EDN Japan]
PR

機械語、アセンブリ言語はハードウェアに依存する

Q:プログラミングの練習を始めようと思うのですが、プログラム言語がたくさんあるので、どれを選べばよいのか分かりません。

A:確かにプログラム言語はたくさんあって、迷ってしまいますね。幾つかに整理して考えてみましょう。

 コンピュータが直接理解できる言語はそのコンピュータに固有の機械語だけです。機械語は0と1の符号だけで表現され、人間には書くことも読むことも難しいものです。機械語は内部回路の動作に直接対応しており、別の機種との互換性がありません。機械語を理解するには、ハードウェアの細部まで理解する必要があります。

 これではあまりにも大変なので、人間が理解しやすい文字や数字、記号を使って、さまざまなプログラム言語が作られてきました。プログラム言語で書かれたプログラム(ソースコードと呼ばれます)を、翻訳ツールによって機械語(オブジェクトコードと呼ばれます)に変換後、コンピュータで実行します(図1)。

photo 図1 アセンブリ言語と高級言語の違い
ユーザーが記述したプログラムを機械語に変換する道筋が異なる

 最初は、機械語の命令の1つ1つを文字列記号(ニーモニック)に置き換えたアセンブリ言語が作られました。アセンブリ言語のソースコードを機械語のオブジェクトコードに変換する翻訳ツールをアセンブラと呼びます。

 アセンブリ言語は機械語よりはずっと楽ですが、言語としての使いやすさはあまり考慮されておらず、記述の効率が悪いのが難点です。機種によって異なる点や、ハードウェアの理解が必要な点も機械語に似ています。特定のハードウェアに依存し、言語としての抽象度が低いという意味で「低水準言語」と呼ばれます。


Q:アセンブラというのは聞いたことがあります。難しいというのも耳にしたことがあります。初めて勉強するには不向きですか?

A:プログラミングを初めて勉強するには不向きですね。プログラミングをマスターしていて、ハードウェアの仕組みを基本から勉強したい人にはよいと思います。

使いやすい高水準言語は、目的によって変わる

Q:アセンブリ言語以外には、どのような言語があるのですか。

A:ハードウェアを知らなくても、文法に従って誰でもプログラムを書けるように、ハードウェアに依存しない抽象的なプログラム言語が作られるようになりました。これらを総称して「高水準言語(高級言語)」と呼びます。高水準言語は多くのコンピュータで利用できますが、そのかわり個々のコンピュータの細部まで使いこなせるわけではありません。特に、ハードウェアの細部を直接制御するような仕事は、一般に高水準言語ではできません。高水準言語が得意とする仕事は、抽象的に定義されたデータを処理することです。

 高水準言語では、プログラム全体を事前に機械語に変換してしまうコンパイラ方式と、1命令ずつ機械語に変換しては実行するインタプリタ方式が用いられています。プログラム全体を通して実行する場合は、コンパイラの方が高速です。結果を確かめながら1ステップずつ対話的にプログラミングしたり、プログラムを修正したりしながら実行するには、インタプリタが便利です。両方の特長を備えた中間的な方式もあります。

 高水準言語は、人間にとっての使いやすさを工夫して作られています。ただ、どんな言語が使いやすいかは、人によって、そして目的によって変わります。日常言語に近い記述ができるプログラミング言語は、熟練していない人が読むのには楽です。しかし記述量が多くなるため、書くときの効率は悪くなります。仕事でたくさんのプログラムを書く人には、簡潔な言語が好まれます。

 仕事の内容による違いもあります。例えば最も初期の高水準言語のうち、FORTRANは科学技術計算に適した言語、COBOLは事務処理に適した言語と位置付けられます。その後、コンピュータが広く普及していろいろな仕事に使われるようになると、特定用途向けの言語よりも、汎用性が高く何にでも使える言語が広く普及するようになりました。その代表がC言語です。

 C言語は、もともと代表的なOSの1つであるUNIX開発の過程で、UNIXを記述するために作られた言語です。OSはコンピュータ全体をきめ細かく管理、操作することが必要なため、当初はアセンブリ言語で開発されていました。しかし、それでは開発効率が低く、OSのソースコードを読んで理解することも難しいので、低水準の記述から高水準の記述まで柔軟に使える新しい言語としてC言語が作られました。C言語は汎用性が高く、かつ効率よく書ける言語として、70年代後半からUNIXとともにミニコンやワークステーションに普及し、その後はパソコン(MS-DOSやWindows)やマイコンでも広く使われるようになっています。

 C言語の大きな特長としては、ユーザー自身が関数を作って自由に言語を拡張できること、分かりやすく構造化されたプログラムを書きやすいこと、ポインタを使ってコンピュータの持つメモリを自由に操作できることなどが挙げられます。90年代後半には、C言語は最も多く用いられる実用言語であるだけでなく、ソフトウェア技術者が最初に学ぶべき共通言語と見なされるようになりました。


Q:やはり、C言語を最初に勉強するのがよいのでしょうか。

A:C言語自体はかなり古い言語であり、実用言語としては物足りない部分も多くなっています。ただし、その後に登場した新しい言語でも、C言語とよく似た記述方法のものは多いので、最初にC言語を勉強するのはよい選択だと思います。特に、マイコンボードのようにハードウェアを理解してプログラミングすることが必要な用途では、実用的なソフトウェア開発にもC言語が適しています(図2)。

photo 図2 簡単に使える入門向けマイコンボードの例
TI(テキサス・インスツルメンツ)の低価格マイコンボード「MSP430™ バリュー・ラインLaunch Pad」

Q:C++というのも、C言語の一種なのですか。

A:C言語から派生した新しい言語の1つです。C++は、C言語をベースにオブジェクト指向という別の概念を盛り込んだ拡張言語として、80年代前半に登場しました。オブジェクト指向の部分を使わなければC言語とほぼ同じ記述ができますし、C++コンパイラの多くはC++のソースコードもC言語のソースコードも翻訳することができます。ただし、C++もC言語もそれぞれ別個に仕様が決められた言語であり、互換性が保証されているわけではありません。


Q:オブジェクト指向という言葉もよく聞きますが、難しそうですね。

A:プログラムではさまざまな種類のデータを処理します。データとそれを処理するプログラムをまとめて管理すると便利だということが分かってきました。オブジェクト指向は、それを実現する手段として取り入れられてきました。オブジェクト指向の言語では、データの集合の属性(プロパティ)と、それに対する手続き(メソッド)を合わせたものをひとまとめに管理します。

 さらに実際の処理プログラムをクラスライブラリとして用意することで、ユーザープログラムからは、ライブラリの一部を呼び出すだけで必要なデータ処理を簡単に実現できます。最近の言語はオブジェクト指向を取り入れたものが多く、JavaとC++がその代表的なものです。


Q:Javaもよく聞く名前ですね。

A:Javaは、どんな環境のどのようなコンピュータでも同じプログラムを実行できることと、オブジェクト指向の効率良いプログラミングを特長としています。ソースコードを、ハードウェアに依存しない中間コードにあらかじめコンパイルしておき、実行時に機械語に変換します。90年代前半に、それまでの言語のもつ利点を生かし、欠点をなくすことを目標に開発されました。

 Javaはサーバやパソコン、携帯機器、インターネットなどさまざまな用途、環境で用いられており、現在では最も多く使われている言語の1つとなっています。その点では、初心者でもJavaから勉強を始めれば実用上も役立つ可能性が高く、オブジェクト指向の考え方を最初から身に付けられる利点があります。しかし、その分取っ付きにくい面が多いのも確かです。


Q:入門向けのマイコンボードを買ったので、プログラムを作ってみたいのですが、その場合はC言語から学習するのが良いのでしょうか。

A:そうですね。MSP430のようなマイコンを活用するのが目的であれば、学習用としても実用としてもC言語が最適であり、コンパイラの入手も容易です。最初はC言語から学習を始めて、パソコンや携帯機器のプログラミングに興味が出てきたらC++やJavaに、マイコンのハードウェアに興味が出てきたらアセンブリ言語に進むのがよいと思います。


【関連リンク】

※MSP430、MSP432はTexas Instruments Incorporatedの商標です。その他すべての商標および登録商標はそれぞれの所有者に帰属します。


Copyright © ITmedia, Inc. All Rights Reserved.


提供:日本テキサス・インスツルメンツ株式会社
アイティメディア営業企画/制作:EDN Japan 編集部/掲載内容有効期限:2016年3月31日

設計に役立つヒント集

宮崎 仁のQ&Aでよく分かるマイコン基礎の基礎:
第24回 割り込みっていろいろあるのですか?どんな種類があるか教えてください。

今回は、外部割り込み、内部割り込み、ソフトウェア割り込みについて詳しく解説しています
全文を読む


電源IC選択のヒント集
電源IC 使用時の注意点をわかりやすく説明しているほか、使用時に発生する可能性のあるさまざまなトラブルとその対処法についても紹介しています。ぜひご利用ください。ダウンロードには myTI アカウントが必要です。
Part 1をダウンロード
Part 2をダウンロード


アナログ回路設計式一覧ポケット・ガイド
日本語版 PDF

英語版で高い評価を受けてきたポケット・ガイドの日本語版が完成しました。基板レベルやシステム・レベルの回路設計でよく使われるアナログ設計式を紹介しています。ダウンロードには myTI アカウントが必要です。
ダウンロード



facebook & twitter

製品情報、セミナーや展示会などのイベント情報をお知らせしています。

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.