今日からはじめるプログラム(その14:リンカ様の献身)
コーホー、コーホー、こんにちは、ダースベイダーのUSBハブを買って会社で使っていたら、数分に1回動くモーター音がうるさいと隣の人に怒られたベイダー卿です。
今回、またプログラミング用語の解説なんですけどね。
ご紹介するのは、もしかしたら、見たことが無いという人もいらっしゃるかも知れないくらい、影の薄い方のご紹介。
でもね。
最近、影が薄いということは、そんなに悪いことじゃないんですよ。
例えば戦闘機。
もう、ステルスとか言って、とにかくレーダーに映らない、存在感の無い、影の薄い戦闘機がもてはやされる時代ですからね。
X-Wingでさえも、ステルス機能なんてないのに、今の戦闘機はすごいですよ。
それに、日本でも、昔から美徳とされる言葉があるじゃないですか。
”縁の下の力持ち”って。
要するにこれは、陰が薄いと言うこと。
でも、影で頑張っているということ。
それを賞賛した言葉なのですよね。
さらにいえば、日本には、昔、忍者なんて職業があったわけでしてね。
隠れ忍んで敵を撃つ。
もう日本といえば忍者なんですよ。
外国からも、羨ましがられて仕方が無いくらいの存在。
アメリカ人なんて、自国にそんなものが居ないもんだから、憧れを抱きすぎて、何を勘違いしたのか、亀まで忍者にしちゃったくらいの大絶賛ぶりですから。
そのくらい、”影が薄い”ということは、賞賛に価するんです。
と、こんな感じで、日本人のメンタリティとしては、誰にも言わず、人知れず、完璧に仕事をこなして、自慢すること無く去っていく、そういう職人気質な存在に対する敬意と憧れがあるわけです。
そんな、日本人にとてもウケるのではないか?と思われるのが、今日ご紹介するもの。
プログラミングでは、あまり表に出てこないけれども、しっかりと働いてくれている重要な部分。
そう、それは”リンカ”。
本名を、”リンケージエディタ”と申します。
コンパイラ様とか、インタプリタ様とか、前に説明してきたので、今回も親しみを込めて、リンカ様と呼ぶことにしますけれどもね。
ツンデレのコンパイラ様に、天然のインタプリタ様って、前に説明しましたからね。
このリンカ様も性格を一言でいうなら、影が薄くて引っ込み思案の人見知りだけど、面倒見の良い頼もしいお方。
一言じゃないし…。
まあ、いい。
とにかくそういうお方。
クラスで言えば、教室の隅のほうで休み時間も静かにつつましく一人で本を読んでいるようなタイプなわけですよ。
でも、いつの間にか、黒板消しを綺麗に掃除しておいてくれたりする。
教室が暑いなと思ったら、いつの間にか窓を開けたり、カーテンを引いておいてくれたりする。
休んだ人のプリントを嫌な顔せずに届けてくれたりもする。
そんな存在。
目立たないけど、教室に無くてはならない人。
それが、リンカ様というわけです。
そんな重要なリンカ様なんですけれどもね。
その引っ込み思案な性格が災いして、普段プログラミングをしていても、プログラマーが存在を意識をすることはあまりないのが実情。
趣味プログラマーであるあなたも、少しはプログラムを書いたかと思いますけどね。
そのとき、どこにリンカ様が居たのか、わかりました?
きっといたはずなんですけどね。
でも、多分、気がつかなかったんじゃないかと思うんですよ。
もうね。
偵察用のプローブ・ドロイドでさえも見つけるのが困難なくらいの見つけにくさですから。
惑星カミーノのごとき状況ですから。
フォースじゃないと無理。
ジェダイじゃないと分からないってくらいに見つからない。
特に最近は、リンカ様ってさらに隠れる傾向が強まってきてますからね。
「俺は”ウォーリーをさがせ”が得意なんだ!」
って、世界の中心で趣味を叫んじゃうあなたでも、見つけるのに苦労することでしょう。
で、どこに居るかっていいますとね?
リンカ様が何をしているのか?というのを考えるとわかりやすいんですよ。
この引っ込み思案なリンカ様のお役目はと言いますと、それはその名前のごとく、色々なものをつなげる(リンクする)ということなんですね。
でも、ここでちょっと疑問があると思うんですよ。
プログラムを組んでいるだけなのに、何をつなげる必要があるのか?って、思いません?
僕も最初は思いましたよ。
「つ、つなげるだとぉ!俺とお前の友情は、もう固く固く繋がっているのに、これ以上何をつなげるってんだ!」
みたいな暑苦しいこと考えちゃいましたよ。
でも、つなげるものって結構あるんです。
例えば、あなたのプログラム、よく見てみてください。
プログラミング言語の種類によっても違うんですけど、プログラムの一番上のほうに、
"#include"だとか、そういうような文言が書いてあったりしませんか?
参考書に書いてあったから、なんていう理由で、意味もわからずおまじないのように書いてた方もいらっしゃるかと思いますけれども、これって他の何かを呼んでいる命令なんですよ。
「このプログラムを動かすには、あなたが書いたプログラムの他に、こういう物が必要なんです」って、声高に訴えちゃってるわけですね。
それも、プログラムの冒頭で。
つまり、最初から、「僕だけじゃプログラムとして完成させられないよう!助けて!アンパンマーン!!」
という状態。
それがプログラムというものなのです。
しかも、ツンデレなコンパイラ様は、「助けて!アンパンマーン!!」な部分まで、くっつけて(リンクして)プログラムを完成させてくれるほど優しくはない。
「そんなの、自分でやりなさいよね!」
と、上から目線で僕らを突き放すわけですよ。まあ、そこがコンパイラ様の良いところでもありますけれどもね。
で、ここまで説明すれば、さすがにあなたもわかりますよね?
リンカ様は、こんな感じでコンパイラ様に突き放された色々な部分を、丁寧に拾い集めて、きちんとくっつけてくれる。
"#include"だとかそういう風に書いてなくても、くっつけないといけないものもあったりする場合もあるので、それも見つけてきてきっちりくっつけてくれる。
くっつけてプログラムがちゃんと動くように仕上げてくれる。
それが、リンカ様のお仕事なのです。
ということは、もうわかりましたね。
リンカ様の居場所も。
そう、コンパイラ様の仕事の後、実行ファイルを作る最終段階。
そこにリンカ様はいらっしゃるわけです。
おそらく、リンクするものがそれほど多くない、軽い趣味プログラミングの範囲でしたら、リンカ様の実行時間は、コンパイラ様が動いている時間に比べたら、ほんの一瞬。
もしも表示されていたとしても、あっという間に終わっちゃう処理だと思いますよ。
モグラ叩きがいくらうまい人でも叩けないくらいの瞬間。
ちょこっと顔を出してすぐ終わりという感じ。
「そんな小さい隙間に居なくても良いでしょ」ってくらいのところにつつましくリンカ様は存在しているわけですね。
さすがは、引っ込み思案のリンカ様。
引っ込み方が尋常じゃない。
でも、リンカ様が居なければ、実行ファイルは作られないのです。
つまりあなたのプログラムは動かない、ということになるわけで、非常に重要な責務を負っているのが、リンカ様というわけです。
なので重要度から言うと、コンパイラ様と同等と言って良いのがリンカ様なんですね。
そんなリンカ様ですが、初心者プログラマーで、その存在を意識してる人って意外と少ないと思うわけです。
というか、最近は、ユーザーのことを考えるという名目で、リンカ様を意識させないような形(つまりコンパイラ様に統合しちゃう形式)になりつつあるので、余計に影が薄くなってる。
表舞台に立って、あなたの熱い血潮みなぎるプログラムを受け止めるのは、コンパイラ様一人だと、
プログラムの不備を指摘してくれるのは、コンパイラ様だけなのだとあなたは思っているかもしれない。
でも、そうじゃないんだ。
かなり影は薄いけど、出てくるのは一瞬だけのことが多いけど、頑張ってくれてるリンカ様という存在が居るということ、わかって欲しいなと思うわけです。
そして、リンカ様の存在を意識することで、また一つ、プログラムというものの構造を深く理解できるようになる気がするんですよね。
プログラミングをして作られるソフトっていうのは、あなたが書いた部分だけではなく、他にもたくさんのプログラムを寄せ集めて、やっと動いているんだということが、リンカ様という存在を知ることでわかってくるわけですよ。
だから、あんまり見えないからって、忘れないで、たまにはディスプレイに向かって、ウィンクしながら、親指を立てて、頬を赤らめ、高らかに叫びましょう、
「リンカ様、今日もありがとう。心から愛しています!」
と。
- ホワイトペーパー
