見出し画像

プログラミング等専門用語解説15(プログラミング系)

REV14

ソフトウエア工房孫風雅です。

ブログ投稿しています。複数画像付き等最終版は此方から、ご覧ください。

今回は既に引用している幾つかの言葉と新規の用語を先ず挙げてから、一つ一つの用語についてボリュームを確認しながら、確認・解説したいと思います。

引用済み&新規用語一覧(主にプログラミング系です)(紫色用語は取り上げ済みです)青色用語は今回ご説明するアイテムです)

  1. プログラミング言語(コンパイラ型高級言語/インタプリタ型高級言語)(C/C++/C#/VB.NET/PHP/PowerShell/Excel VBA等)

  2. 高級言語/低級言語、(高水準言語/低水準言語)

  3. ソースコード(ソース/ソースファィル)

  4. 実行ファィル

  5. 実行形式

  6. レジスタ

  7. ビルド

  8. コミット/ロールバック

  9. バグ(不具合)

  10. シンボリック

  11. デバッカー・シンボリックデバッカー

  12. (ソフトウェア)テスト

  13. デバッグ(デバック)

  14. テキストエディタ

  15. コーディング

  16. コンパイル/リンク、コンパイラー/リンカー

  17. インタプリタ型/コンパイラ型

  18. (ファィル)パス

  19. スタック

  20. スクリプト言語

  21. 機械語アセンブリ言語

  22. オブジェクト指向

  23. オーバーレイ

  24. (ソフトウェア)コードインスペクション/コードレビュー

  25. ロードモジュール(LM/EXEファィル)

  26. バージョン/レビジョン

  27. デプロイ/リリース

  28. 判定文

  29. TBD

  30. TBD(プログラムの文法関連は別途の予定です)

この中で、今回はスタック・実行ファイル・実行形式・コンパイル/リンク、コンパイラー・リンカーを取り上げてみたいと思います

スタック・実行ファイル・実行形式・コンパイル/リンク、コンパイラー・リンカー

実行ファイル等既にコメントした事がありますので、纏めをしたいと思います。

実行ファイルはWindowsではEXEファイルの事になると講師は考えています。

実行形式は高級言語のソースコードをコンパイルした後のOBJファィルの事を指すという説明がインターネット上にあると思います。

コンパラーはコンパイルする為のソフトウェアを指し、リンカーはリンクするソフトウェアを指すと思います。

ソースコードをコンパイルするとOBJファィルが出来、内容は実行形式、即ち機械語の命令コードになります。

各々のOBJファィルは相対地アドレスの為、最初の関数のアドレスは0から必ず始まっています。

即ち、3OBJファィルがあれば、相対地0アドレスの割り振られた関数が3個存在する事になります。

此のままでは実行できません。

そこでリンカーを使って各々の関数に絶対値アドレスを付与し一つのEXE:実行ファィルとして動作可能な形にします。

スタックというのはシステムが備えている特別な専用のメモリの事で、以前コメントしたと思いますが、関数間の接続などで主に使われます。

即ち、上級言語をコンパイルした時の機械語コードの中でスタックメモリを使用するコードが生成されるという事です。

以前、簡単な例としてPUSHとPOPを使用した例を挙げさせて頂きましたが、関数を呼び出すときに、どのレジスタを保存して次の関数を実行するかは実は該当の使用しているコンパイラーの機能・性能によります。

即ち、コール元で、どのレジスタを保存するのかは、その時点での各レジスタの使用状況と次の実行関数内でのレジスタ使用状況によりマチマチなハズなのです。

ですから、次の関数を呼び出す時点での各レジスタの使用状況を感知して、保存不要なレジスタの保存動作を行わず、次の関数を実行する・呼び出すのが、スマートなコンパイルの仕方になります。

然しながら、殆ど無いとは思いますが、あまり、深く考えられていないコンパイラーではアナガチ、多くの或いは全てのレジスタを保存しがちです。

この場合は、それだけ機械語の命令を実行する為、実行する命令が増え、実行速度にインパクトが出ます。

即ち、実行速度が遅くなります。

従って、如何に保存実行コードを少なくして、問題が起きない様に動作させるかがコンパイラを作成しているエンジニアの腕の見せ所といったところになります。

些細な事と思われるかもしれませんが、関数と関数のつながりというのは基本中の基本であり、ソフトウェアは関数間のコールの塊とも言えます、従って、次の関数を呼び出す前のレジスタ保存動作は煩雑且つ沢山発生する為、この繰り返し動作部分での無駄な命令は結構全体の実行スピードに利いてきます。

皆さんは、プログラミングについて、どの様なご意見・イメージをお持ちでしょうか?

講師の経験が、皆様のお役に立てれば幸いです。

この記事が気に入ったらサポートをしてみませんか?