コンテンツにスキップ

プログラミング言語とその環境

人気の言語

Most Popular Programming Languages 1965 - 2019

  • AltJS(代替Javascripts)として、NodeやTypescript,React,Vue
  • 古くから、C,C++/Java/perl/shell/
  • CLIなら、C/go/Rust,Python,shell
  • GUIアプリケーションでは、.NET,C#,最近ではElectron
  • モバイルなら、Swift,Java,Dart
  • Webなら、php/perl/Node/Java(J2EE,JSP)
  • 最近では、Python3/Go/Rustなど

様々な言語

機械語(ネィティブコード)

  • 0101 0101 0001 0101 0100 1010 1010
  • 4C6A 85A1 E34D 055F 13D3 3234 221A

アセンブリ言語(低級・低水準言語)

2つの値を足すCASLⅡのサンプルプログラム

http://www.chiba-fjb.ac.jp/fjb_labo/casl/casl2.cgi

HelloWorldプログラム

https://www.officedaytime.com/dcasl2/pguide/chapter1f.html

; 「Hello, World!」の文字列を出力するプログラム
MAIN     START
         OUT    BUF,LEN         ; 文字列を出力
         RET                    ; 実行を終了
BUF      DC     'Hello, World!' ; 文字列
LEN      DC     13              ; 長さ
         END

C言語(高級言語)

#include <stdio.h>

main( )
{
  printf("hello, World!\n");
}

様々なHelloWorld

引用:Hello World Collection

  • Perl
# Perl
print "Hello World!\n";
  • Python3
# Python3
print("Hello World")
  • COBOL
       * Hello World in COBOL

*****************************
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
MAIN SECTION.
DISPLAY "Hello World!"
STOP RUN.
****************************

コンパイラ/インタプリタ

  • 高級言語を機械語に変換する必要がある。
名称 内容
コンパイル言語 ソースプログラムを入力 -> コンパイル(翻訳) -> 機械語 -> バイナリプログラムを出力 -> バイナリプログラムを実行
インタプリタ言語 ソースプログラムを入力 -> インタプリタ(解釈) -> 機械語 -> そのまま実行
ハイブリッド ソースプログラムを入力 -> コンパイル(翻訳) -> 中間言語(バイトコード) -> インタプリタ(解釈)-> 実行
  • 広義のコンパイラは、高レベル同士でも行う。
  • AltJS(Javascriptの代替言語)からJavascriptに変換するときなど。
  • MarkdownをHTMLに変換するとき
  • LaTeXを変換する

トランスコンパイラ(他にトランスパイラ、ソース・トゥ・ソースコンパイラ、などとも)は、あるプログラミング言語で書かれたプログラムのソースコードを入力として受け取り、別のプログラミング言語の同等のコードを目的コードとして生成する、ある種のコンパイラである。一般に、コンパイラが「比較すると高水準な言語のソースコード」を入力とし、「比較すると低水準な言語の目的コード」を、コンパイル結果として出力するものであったのに対し、トランスコンパイラは同じ程度の(抽象化の)水準のコードをコンパイル結果として出力する。

トランスコンパイラ - Wikipedia

Java

class HelloWorld {
  static public void main(String args[] ){
    System.out.println( "Hello World!" );
  }
}

特徴

  • オブジェクト指向プログラミング
  • クラスやメソッドという概念を習得できる
  • ガーベッジコレクション(ゴミ拾い)
  • メモリ上の不要になったゴミ(Garbage)を自動的に開放する。
  • メモリ管理(C言語におけるポインタ管理)を行わなくてよい。
  • クロスプラットホーム
  • 予めバイトコードに翻訳する
  • JVM(Java Virtual Machine)を用いて実行するので、様々な環境で実行できる。
  • 特定の環境に依存するプログラムでないなら、WindowsでもMacでもLinuxでも動く。
  • また、ソースプログラムをそのまま解釈するより早い。
  • 汎く使われている言語
  • 2000年代から汎く使われてきた言語。
  • Javaプログラムを採用している企業も多い。
  • C言語に近い文法
  • C言語の文法に近いので、C言語に近い文法を習得しやすい。

必要なもの(環境)

これだけあれば、できます。

  • 動かすPC
  • OS
  • JavaのコンパイラとかJVM
  • 文字がかけるもの(エディタ/IDE)

WindowsではなくLinuxでやろう。

  • GUIではなく、コマンドライン(CLI)を使おう。

  • 情報大仕様PCの人

  • Windows 10なので、WSLが使える。

    • 軽量のLinuxコマンドラインの環境
  • VirtualBoxが入っているので、仮想マシンが使える。
    • Windowsの中でLinuxのOSを起動させる。
  • Teratermが入っているので、SSH(リモート接続)が使える。

  • ネットワーク・サーバー・WEB開発を目指している方へ

  • 仮想環境でLinuxを動かすのではなく、実際にマシンで動かすことを強く薦めます。
  • 特にネットワークやサーバーを動かす人はLinuxの知識は常識です。
  • WindowsよりもLinuxのほうがシンプルなのでLinux上で勉強した方が効率が良いと思います。
  • Linuxが動く中古PCなどは5万円前後で入手できます。安いときは、2〜3万円でイイモノが手に入ります。

Windows10のノートPC上でLinuxを動かす。

WSL - Windows Subsystem for Linux(設定時インターネット必須・オフライン作業OK)

Windows10の最新の状態であることを確認してください。Win8.1など旧いバージョンではできません。

  • WSL1 ... Windows上で、WindowsとLinuxを変換する機能を有する。軽量だが、機能に制限がある。Javaをコンパイルするぶんには、問題ない。
  • WSL2 ... Windows上で、超軽量の仮想マシンを実行させる。VirtualBoxよりは確実に軽い。

  • コントロールパネル>プログラムと機能>機能の有効化 からLinuxに関する機能を有効化し、再起動してください。

  • Microsoft Storeから「Ubuntu」や「CentOS」をインストールする。

OFFICE365に動画を上げたので参考にしてください。

VirtualBox(最も汎用的な方法・ただし多くのメモリが必要)
  • Oracleが提供するVM型の仮想化ソフトウェア
  • 仮想化技術としてVM型のほかにDocker(libcontainer)やcgroups(LXC)などで有名なコンテナ型がある。
  • 競合として、VMWareがある。
  • サーバー仮想化などはVMWare ESXiなどが使われる
  • 大学指定ノートPCではGUIでLinuxが動くので扱いやすいが、GUIがあるぶん重い。
  • 起動する手間がかかる。
SSH(最も手軽な方法・インターネット接続必須/推奨)
これがいいかな〜って方法でやってみよう。
  • とりあえず全て実践して見るので、見ていてください。
  • コマンドの操作を覚える必要があります。またLinuxの基本的な使い方について身につける必要があります。
  • Linuxのつかいかた

エディタを決めよう。

  • 恐らく1年生のプログラミングの授業ではEmacsというソフトウェアを使います。
  • Linuxのコマンドライン上で動くメモ帳のようなソフトウェアの代表格として、EmacsのほかにVIMやnanoがあります。
  • 高機能なGUIのエディタとして、VSCodeAtomSublimeTextなどがありますが、最初から高機能なものに頼ると身につかない(また授業の課題の際にも困るので)ので、初学者はシンプルなEmacs,VIM,nanoなどを選ぶと良い。

私はvimmerなのでvimで見せます。
開発においては、効率化のために頼っても構いませんが、最初に体系を学ぶときに覚えていないと他の言語を覚えるのにも苦労します。
例えば、英語やラテン語を覚えれば他の言語でも似た構文は覚えやすくなりますが、最初の英語を覚えないと苦労します。
プログラミングにも同様のことがいえます。Javaを体系的に覚えていれば、Javaの基になったC言語も比較的わかり易くなると思いますし、C言語から同様に派生した様々な言語も取り込みやすくなります。

Javaの環境を揃えよう。(自分の環境の場合)

# CentOS 7 の場合
sudo yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
# Ubuntu 18.04 の場合
sudo apt install openjdk-8-jdk

最新のJavaは11ですが、大学で使われているのはJava 8です。
プログラミング入門においては、そんなに差はないので8のままでいいです。

やってみる。

大学のサーバーに入ったら、白と黒の画面出てきたと思います。まず少し、Linuxを弄ってみましょう。 Linuxの弄り方

HelloWorldを作ってみる。

  • HelloWorld.java
/*
 * HelloWorld.java - "Hello World!"を表示する
 * @author Yuuto Nakagawa
 */

public class HelloWorld {
    // mainメソッド
    public static void main(String[] args){
      // "Hello World!"を表示する
      System.out.println("Hello World!");
    }
    // mainメソッドここまで
}
// HelloWorldクラスここまで

注意:

  • ファイル名のHelloWorldとクラス名は同一にしなければいけません。
  • インデント(行頭空白文字)を揃えてください。
  • 揃えないと、プログラムの階層的な構造がわかりにくいのでめんどくさくても揃えてください。
  • TABキーを使うか、半角空白を入力してください。全角空白だとエラーが出る可能性があります。
  • 半角空白の大きさは、4個が一般的かと思います。好みによって、6や2になることもあります。

HelloWorldをコンパイルしてみる。

$ javac HelloWorld.java
  • エラーが出たら、ちゃんとエラーメッセージをみましょう。
  • プログラミング学習はトライ&エラー&調べるチカラです。
  • 正常にコンパイルが終わったら、HelloWorld.classというファイルが出来ているハズです。
  • このファイルがコンパイル済みの(中間言語に訳された)ファイルです。

HelloWorldを実行してみる。

$ java HelloWorld
Hello World!

最終更新日: 2021年4月30日