マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Stadio C++講義
第1章 プログラミングを体験しよう!
第8話 最終話=統合開発環境の解説
何度も予告してきて統合開発環境について解説して
第一章プログラミングを体験しよう!は終わりになります。
VBAはExcelやWordに添付されているプログラミング開発ツールと説明しましたが、
正確にはプログラミング統合開発環境です。
C++に話題を戻します。
・C言語・C++の両言語以外にコンパイラ
(人間が理解できる言葉から0と1から構成されるコンピュータのみが理解できる機械語への一括翻訳をするソフト)
・エディタ(プログラミング専用編集ソフト)
・デバッカ(デバッグをするソフト=プログラムの欠点を修正するのを手伝ってくれるソフト)
・リンカー(各ファイルや各フォルダを有機的に関連付けるソフト)など
さまざまソフトが一本に集められたものが統合開発環境です。
VBやVBA自体も統合開発環境で言語
がbasicなだけで
エディタ・コンパイラ・デバッガ・リンカーなどを持っている点は同じです。
BASICの時代に馬鹿にされたのは、
コンパイル
(コンパイラが人間がわかる言葉からコンピュータにしかわからない機械語に一括翻訳すること)
ではなく1行1行人間がわかる言葉から機械語に翻訳するインタプリタを採用
したことと構造化プログラミングができなかった点にあります。
1行訳してから1行プログラムを実行するので
実行速度が遅くなるという問題がありました。
コンパイル方式は一括翻訳ですから
一度翻訳したらプログラムコードを変更しない限り
翻訳し直す必要はありません。
EXEファイルには一括翻訳された機械語が組み込まれていて
機械語の命令に従って動くので再翻訳が不要なわけです。
それに対してインタプリは毎回翻訳を行うので、
コンパイラ(コンパイル=一括翻訳を行うソフト)によって
EXEファイルを作ってEXEファイル単体で動くコンパイル方式とコードが同じでも毎回1行1行翻訳して
動かすインタプリタでは動く速度に雲泥の差があるのは当然なのです。
C言語やC++最速演算言語なのは、
完全なコンパイル(一括翻訳)であるからです。
他の言語は、完全なコンパイル(一括翻訳)ではなく、
一部インタプリタを取り入れていれているからです。
**********************************************************************************
少し脱線します。
さらに、C言語やC++にはマルチスレッドプログラミングという技があります。
これは分身の術です。
忍者ものの分身の術は見掛け倒しですが、
C言語とC++はメモリが十分入れてあれば、
36スレッドであればほぼ36人分の仕事をしてくれます。
私の開発した数独自動生成ソフトが生成速度がVBA時代の3000倍以上になったのは、
分身の術がもろ効いているからです。
マルチスレッドプログラミングは並列プログラミングであるとも言われます。
私は、並行世界プログラミング=異世界プログラミングだと思っています。
なぜなら、分身されたスレッドは他の世界(スレッド)とはほとんど触れ合ずに
自分の仕事をします。
そして、数独自動生成ソフトの場合は各スレッドに2重の個性を持たせています。
①1つは問題のタイプです。
ⅰ.左右対称型 ⅱ.上下対称型 ⅲ.点対称型 ⅳ.線対称かつ点対称型 ⅴ.ハート型 Ⅵ.クリスマスツリー型 Ⅷ.非対称型
という各タイプが派生スレッドの中で自由に選ばれます。
②はヒントをおく出発点とそこから飛ぶ間隔がやはり各スレッドでランダムに選ばれています。
これを与えられたスレッドが異世界で他の異世界にほとんどタッチせずに
自分の仕事をすることがマルチスレッドプログラミングです。
数独自動生成ソフトはまさに並列プログラミング=異世界プログラミングで
他の異世界とほとんど関わりがありません。
唯一の関わりは、
どっかのスレッドで数独の生成に成功すると、
それが報告され全スレッドが強制的終了されるという点だけです。
それ以外は異世界と全くかかわらずに各異世界が自分の仕事をしています。
脱線終了です。
**********************************************************************************
前にVBAをバカにする文化にも疑念を持っていることを述べました。
VBにしてもVBAにしても完全なコンパイラ(コンパイル(括翻訳)するソフト)
ではないためにC言語やC++に比べれば計算速度が遅いし、
マルチスレッドプログラミングが困難である、
という欠点を持っていますが、
かつてのBASICに比べれば、
構造化プログラミング
(プロモデルのように独立した部品が単純に結合するプログラミング=関数が独立していて単純結合しているプログラミング)
ができるようになっており、
私は今でも初心者はVBないしはVBAから始めるべきだという持論を持っています。
VC++は難しい部分があるからです。
**********************************************************************************
話が複雑で混乱している方もいらっしゃると思いますので、
再度整理します。
統合開発環境は
①C言語やC++等の言語
②コンパイラ(コンパイル(機械語に一括翻訳すること)をするソフト)
③エディタ(プログラミング専用編集ソフト)
④デバッカ(デバッグ(虫)をとることを支援するソフト=欠陥を修正することを支援するソフト)
⑤リンカー(ファイルとファイルを関連付けるソフト)
などからなり、
それらを1本の環境=場所にまとめたものです。
このような芸当ができるようになったのは
Windowsによる革命が大きいのです。
Windowsとは窓の複合体という意味ですが、
Windowsが出る前のMS-DOSの時代には、
一度に1つのソフトしか起動できずに、
まず、エディタ(プログラミング専用編集ソフト)を起動してプログラミングコードを書き、
保存してから終了して、
次に、コンパイラ(コンパイル(機械語に一括翻訳すること)をするソフト)を起動して人間がわかる言葉から0と1からなる機械語に翻訳して終了して、
プログラムが実行エラーをするときには、
デバッガ(デバッグ(虫)をとることを支援するソフト=欠陥を修正することを支援するソフト)起動して虫取りをする、
という風に大変面倒くさい作業をしていたわけです。
Windowsになり複数のソフトを同時に起動することが可能になり、
しかも、切り替えが簡単にできて、
必要なソフトを1本にまとめられるようになり、
1本にまとめたものを統合開発環境というのです。
私は環境という訳語が好きではありません。
IT業界で使う環境は、
生物がすむ環境の環境とは明らかに異なる意味合いを持つ言葉です。
ただし、私もしっくりくる対案を持っているわけではありません。
『統合開発ツール』、『統合開発場所』も今一歩です。
読者の皆さんがもしもっとよい訳語が思いついたら
fmut1621@hotmail.co.jp
までメールをお願いします。
環境をもっと適切な言葉に翻訳すればIT業界に一筋の光が指すことでしょう。
訳語を思いつけばあなたの貢献は歴史に名を残すことでしょう。
IT業界の不幸は明治維新の初期のころに数学書の概念を漢字に翻訳した人のような才能を持った人がいなくて、
安易にカタカナにしたことにあります。
これは社会科学業界も全く同じです。
社会科学にカタカナを乱発してわかりにくい学問にしてしまったのです。
第1章第7話へ 第2章第1話へ