各プログラミング言語の特徴

目次

1.言語の仕様
2.変数の型
3.プログラム構文の違い
4.命令セットとコンパイラ、プログラミング言語の関係
5.各プログラミング言語のプラットフォームへの依存性
6.各プログラミング言語による実装
7.GUI

以下の各プログラミング言語について、
 ・言語の仕様
 ・変数の型 
 ・プログラム構文の違い
 ・命令セットとコンパイラ、プログラミング言語の関係
 ・各プログラミング言語のプラットフォームへの依存性
 の各項目についてまとめました。

(比較したプログラミング言語)
 ①C、C++
 ②Java
 ③C#
 ④Python

1.言語の仕様
①CとC++
 C17  C言語の標準規格ISO/IEC 9899:2018
 C++20 C++ の標準規格 ISO/IEC 14882:2020
②java
 主にJava Community Process (JCP) によって決定される。JCP は、Java言語仕様、Java仮想マシン (JVM) 仕様、Java Standard Edition (Java SE) APIなどのJava標準の開発を監督するコミュニティ主導の組織
 仕様は、JSRs(Java Specification Requests)に記述されています
(参考) 
 List of all JSRs
 https://www.jcp.org/en/jsr/all

③C#
ECMA-334(Ecma International、以前の欧州電子計算機工業会)
ISO/IEC 23270
JIS X 3015
(参考)
 バージョン7.0
  ECMA-334:2023 (2023年12月)
  ISO/IEC 20619:2023 (2023年9月)
  リリース時期2017年3月 .NET Framework 4.7 Visual Studio2017 version 15.0
  https://ja.wikipedia.org/wiki/C_Sharp

④Python
 Pythonソフトウェア財団(英: Python Software Foundation; PSF)がサポート
 Python Enhancement Proposals (PEP): PEP は、Python の新機能、改善、または変更を提案を行うための文書
(参考)
 Python Software Foundation; PSF
 https://www.python.org/psf-landing/

2.変数の型
 変数はデータを格納する領域、型は格納できるデータの種類をコンパイラやインタープリタに知らせる役割を持ち、バイト長、領域の扱い方などが決められています。
 ここでは、オブジェクトの概念ができる前からある基本データ型とオブジェクトの概念に基づく参照型の分け方で整理します。
①C言語
(1)変数の主な型の一覧

(注1)型で使用できる範囲はコンピュータによるが32bitマシンの例を示す

    サイズはsizeof演算子で調べることができる (例)sizeof ( char )

(2)記憶クラス
 C 言語の変数はその宣言の場所と方法によって、その変数の通用範囲とメモリの割り当て方法(自動記憶域のスタック領域と静的記憶域のスタティック領域)が決まります。
 代表的な変数の性質(記憶クラス)には以下のものがあります。

①’ C++
 変数の型に関するCからの主な変更点を下記に示します。
・bool 型の変数には値 true と falseを設定できる。Cの_BOOLでは、値は通常、整数(偽の場合は 0、真の場合は非ゼロ) を使用。
・文字列型の追加。Cでは通常、文字列は文字の配列(char*char[])を使用。
・クラス型とオブジェクト指向機能のサポートにより、ユーザー定義型の作成が可能となった。
・テンプレートが導入され、任意のデータ型を処理できる関数とクラスが作成できる。
・参照型が追加され、C のポインターを使った関数の引数の操作に代わる方法を提供。
・列挙型クラスの作成ができる
(1)C++言語の変数の主な型の一

(注1)型で使用できる範囲はコンピュータによるが32bitマシンの例を示す
サイズはsizeof演算子で調べることができる (例)sizeof ( char )

(2)記憶クラス
 (C 言語と同じ)
new演算子で作成する配列、クラスのオブジェクトはヒープ領域上に割り当てられま
 す。そのオブジェクトへのポインタ自体は他の変数と同様に記憶クラスに従ってメモリに保存されます。

(参考) 
・[C++] new演算子による配列のメモリの動的確保
https://qiita.com/toshi_machine/items/c0682b7ae6c951fcadf8

・C++の基礎 : new/delete 演算子
http://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/newdelete.html

②java
(1)java言語の変数の主な型の一覧

(2)記憶クラス
 javaは、ガベージコレクションによりメモリを自動的に管理するため、Cの場合のようにメモリを明示的に割り当てたり割り当て解除したりする必要ありません。java では、new演算子でオブジェクトを作成すると、メモリがヒープ上に自動的に割り当てられます。オブジェクトが参照されなくなると、ガベージ コレクターによって自動的に割り当てが解除されます。

③C#
(1)C#言語の変数の主な型の一覧

(2)記憶クラス
 ガベージコレクションによりメモリを自動的に管理するため、C の場合のようにメモリを明示的に割り当てたり割り当て解除したりする必要はありません。C#では、new演算子でオブジェクトを作成すると、メモリがヒープ上に自動的に割り当てられます。オブジェクトが参照されなくなると、ガベージ コレクターによって自動的に割り当てが解除されます。

④Python
(1)Python言語の変数の主な型の一覧

・データ型を調べる時は、type()を使用
・Pythonは「動的型付き言語」で変数を作成するときは型の限定までは行わず、実行時にデータ型が判定される
・各データ型にはそれぞれ固有のメソッドがある

(2)記憶クラス
  メモリがヒープ上に自動的に割り当てられ、ヒープの管理は Python メモリマネージャ (Python memory manager)が行う

(参考)
Python/C API リファレンスマニュアル>>メモリ管理
https://docs.python.org/ja/3/c-api/memory.html

3.プログラム構文の違い
 変数の書き方など、ソースファイルを作成するときのスタイルについて、各プログラミング言語でまとめました。

表.各プログラミング言語とコーディングスタイルの一覧

(注1)プログラムのフォーマット
 空白 (スペース、タブ、改行) がプログラムの動作に影響を与えないものをフリーフォーマットという。特に「インデントの入れ方」と「中括弧{}の位置」については、可読性を高めるためのスタイル例を下記に示す。
・インデントは空白文字4文字を基本とする
・中括弧の位置はK&Rスタイルに準じる。
各言語のコーディングスタイルに準じるようにする。

UpperCamelCase:単語の先頭を大文字にする(PascalCase)
 lowerCamelCase:先頭は小文字、以降の単語の先頭を大文字にする
  単語の先頭を大文字にするのは、単語間の区切りを表現するためで、
  最初の単語も大文字にするのがパスカルケース(アッパーキャメルケース)、
  最初の単語は小文字にするのがローワーキャメルケース
 snake_case:全て小文字としてアンダースコアで連結する

4.命令セットとコンパイラ、プログラミング言語の関係

5.各プログラミング言語のプラットフォームへの依存性
表.各プログラミング言語のプラットフォーム(動作環境のこと)への依存性

6.各プログラミング言語による実装
 ソフトウェア開発を要件定義、外部設計、および内部設計、実装(コーディング)、テストと分けたとき、内部設計までの各フェーズでは主に問題の理解、システムアーキテクチャの定義、ソフトウェアの機能、外部システム及びユーザーとのインタフェースを設計することに重点が置かれ、プログラミング言語を前提にしないことが重要と考えます。
 実装のフェーズでは、設計仕様を実際のコードに変換する必要があり、プロジェクトの要件、パフォーマンス、既存のシステムとの互換性、開発チームのスキルセットなどを考慮して適切なプログラミング言語を選択することになります。

7.GUI
 GUIについて、プログラミング言語、及びOS(windows、Linux)で使われているツールについて

(1)Qt
 Qt はクロスプラットフォーム環境で使用でき、主に C++開発で使用されます。
 C#でもQt for C# (QtSharp)を使用することでクロスプラットフォーム GUI アプリケーションを構築できます。

(2)WPF(Windows Presentation Foundation)
 WindowsでのC#開発で使用。WPFはマイクロソフト社が開発する.NET Framework3.0以降に含まれるユーザーインターフェースサブシステムのこと。

(3)GTK
 GTK+(The Gimp Toolkit+)はC言語用のGUIツールキット、Gtk# (GtkSharp) は、GNOME などの Linux デスクトップ環境で使用される一般的なオープンソース GUI ツールキットである GTK+ ツールキットの .NET バインディング。