takashi kono's blog

コーヒーとキーボードと共に何かを記録していくブログ

はじめてUNIXで仕事をする人が読む本 の備忘録 08 UNIX プログラミング環境

はじめてUNIX で仕事をする人が読む本 の備忘録 08

お世話になった本

この連載ブログを書くにあたり、お世話になった本がこちら。LPICと被っているところもありますが、実務での使い方なんかも扱っており、良書だと思います。

第2部 プログラミング環境編

第8章 UNIX プログラミング環境

第2部ではUNIX におけるプログラミング環境について解説を行うらしい。

UNIXプログラミング環境の特徴

ツールボックスアプローチ

プログラミング環境には、大別して2つの種類がある。
一つは、統合開発環境。機能は豊富だが、重い。しかし、このように全ての機能を1つのソフトウェアでまとめる方法をキッチンシンクアプローチと呼ぶそうだ。

もう一方は、単機能のソフトウェアを組み合わせて使う方法。必要なものだけ揃えればよかったり、一部だけカスタマイズしたらよくなる。しかし、各ソフトウェアの仕様を一通り理解する必要がある。このように、単機能で実現可能なことを複数の組み合わせで実現したりする方法をツールボックスアプローチという。

UNIX の環境では、ツールボックスアプローチの発想に基づいている。

プログラミング可能なシェル

シェルでプログラミングがかけて幸せだよね。

「1行プログラム」が書ける

わざわざ、エディタを開いて、#!/bin/sh とかしなくても、プロンプトでいきなりコードを書ける。これが早くていい。可読性は捨てることがある。
この技をワンライナーと呼ぶ。

これを芸の道にまで発展させた人たちを、シェル芸人と呼ぶことがある。

オンラインマニュアルがある
  • man
  • GNU info
  • -h, --help

man があるかどうかは、man -k <keyword>で探せる。もし、名前がフルでわかっているなら、これでもいい。man -f passwd

主なコマンドの配置

Ubuntu
コンパイラ GNUコンパイラ /usr/bin/gcc
中略
インタプリタ perl /usr/bin/perl
Python /usr/bin/python
PHP /usr/bin/php
Ruby /usr/bin/ruby
シェル sh /bin/sh
bash /bin/bash
中略
zsh /bin/zsh

代表的なプログラミング言語

注意:コードの書き手によって異なることがあります。

  • C
    • 演算子、データ型、制御構造が豊富
    • 移植性が高い
    • ハードウェア寄りの処理の記述も可能
  • C++
    • C言語の上位互換
    • 言語仕様が豊富。そのため、使いこなすのが難しいとされている。
    • STL (Standard Template Library) を使用したプログラミング
  • Java
  • Perl
    • テキスト検索や抽出に向いている
    • 表記形式はC言語に似ている
    • CGI の開発に使用されることが多い
  • Python
    • 最近は、機械学習とかAI でも使われている
    • 言語仕様が小さい
    • インデントによるブロック構造
  • Ruby
  • Lisp
    • 関数型言語
    • 前置記法
    • 括弧を使用したリスト表現で構成
    • リストで表現されたプログラムはデータとしても扱える
  • アセンブリ言語
    • おおむね機械語と1対1に対応。
    • テキストで機械語相当の処理を記述できる。

開発ツール

  • オンラインマニュアル
  • バージョン管理ツール
  • コンパイラ
  • make
  • リンカ
    • なにこれ?
  • デバッガ
    • 大事

コンパイラ

コンパイル対象の言語で書かれたソースファイルから、実行可能なバイナリを生成するプログラム。
中には、このコンパイラを自作して楽しむ人もいる。

make

ファイルの依存関係やコンパイル、リンクの手順を記述したファイル(Makefile) に基づいて、自動的にこれらの処理を実行するツール。

デバッガ

プログラムの不具合の原因究明に使用するツール。

ソフトウェアデバッガ

OSの支援によりユーザプログラムのデバッグを行うためのツール。
ブレークポイントの設置など。

ハードウェアデバッガ

組み込み開発環境では使えない。そのような場合に、ICEやJTAGデバッガが使用される。
これらのデバッガは直接CPUに対して馳tら着かけることでデバッグを行う。OSが存在しなくても使用できる。

C言語による開発実例

skip

Javaによる開発事例

skip

LL言語による開発実例

Perl

バージョン

 perl -v

This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
(with 34 registered patches, see perl -V for more detail)

Copyright 1987-2012, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

sample.pl

$ whereis perl
perl: /usr/bin/perl /usr/share/man/man1/perl.1.gz

$ vim sample.pl
$ cat sample.pl 
#!/usr/bin/perl

print "Hello, World!\n";

実行権限をつけて実行

$ chmod u+x sample.pl
$ ./sample.pl 
Hello, World!

#!/usr/bin/perlはこう書き直すことも出来る。
#!/usr/bin/env perl こうすると、環境変数PATHに応じて実行されるべきperlコマンドが決定されるので、絶対パスを記述する必要がなくなる。

移植性はよくわからない。なぜなら、100個スクリプトがあって、全てこれで統一されていればいいが、1つだけフルパス指定だった場合、環境移行して、パスが変わったら使えないのが出てくる。可能性がある。


以上で、第8章 UNIX プログラミング環境を終わります。
次回は、第9章 バージョン管理システムに行きたいと思います。