📑

ちょい記事: なぜHTMLはプログラミング言語ではないか、の非プログラマへの説明の試み

2025/01/24に公開5

ちょい記事です。

登場人物:

  • 美容師: パソコンはそこそこ触る。プログラミングもすこし齧ってる。というか僕がいろいろインプットしている。

美容師「HTMLはプログラミング言語ではないの?」
るま「ふむ。それはよく話題にあがる、あるあるトピックだね。興味はなかったけど、せっかくだから説明してみるよ。」
るま「まず、メモ帳を思いうかべてほしい。プレーンな文章を書くツール。これはプログラミング言語ではない。これは認められる?」

======================= x - o ==
| メモ帳 | 保存 | ヘルプ          |
|------------------------------|
|  はじめての文章               ■|
|    文章を書く上で大事なのは     │|
|  気合と根性です。              │|
|                             ■|
|                              |
|                              |
|                              |
|                              |
|                              |
|------------------------------|
| 23文字                        |
|------------------------------|

美容師「そうだね。」
るま「そしたら、これは文章を書く道具なので、文中のワードを強調する方法を考えてみたい。具体的には、例えばだけど、アスタリスク (*) で挟んだ単語は強調したいんだ、というルールにしてみよう。」

======================= x - o ==
| メモ帳 | 保存 | ヘルプ          |
|------------------------------|
|  はじめての文章               ■|
|    文章を書く上で大事なのは     │|
|  *気合*と*根性*です。          │|
|                             ■|
|                              |
|                              |
|                              |
|                              |
|                              |
|------------------------------|
| 23文字                        |
|------------------------------|

美容師「おっけー。」
るま「これはまだプログラミング言語ではない、よね?」
美容師「そうだね。」
るま「HTMLというのは、今みたいな些細な文書作成のルール追加をたくさん繰り返したものだと思ってほしい」
るま「そうすると、それはずっとプログラミング言語ではない。」
美容師「なるほど。」
るま「でも、ルールを増やして新たな言語を作っているとはいえる。」
るま「なので、HTMLというひとつの言語として命名をして、マークアップ言語として分類されることがある。そんな感じ」

補足

ここではあくまでも「プログラミング言語」を形式的な定義を持たない自然な単語として指すとして進めている。
すなわち、形式的な定義を与えてプログラミング言語ではないことを否定するアプローチはあえて取っていない。
(たとえばチューリング完全性をもつだとか、そういったことを定義として否定する方法もあるだろう。)

ところで対話形式である必要はまったくなかったかな。アイデア記事だしこんなもんでよいでしょう。

というかこの人はこれで納得してくれた(たぶん)けど、思い返してみればこれで納得してもらえることはむしろ少ないか…?

これを書きおこしていて、最近見た以下の動画を思いだした。

https://www.youtube.com/watch?v=6WvFt6W5FKs

これをみるまで、当然のように 「0.999…」は定義語という前提で (とまでは言わないが、自然な定義はひとつだ、と) 考えていたが、未定義だとして考えてみるというのも意味があるな、という発見。

GitHubで編集を提案

Discussion

あいや - aiya000あいや - aiya000

「この記法はもし○○が××である場合に、これを表示する、というルールを追加する」
「この記法は○○を××回表示する、というルールを追加する」
としたら、それはプログラミング言語になってしまうんじゃ…?
これは「些細な」ルールではない、ということかな

lumaluma

ありがとうございます。一つ気づきとして、「HTMLはプログラミング言語ではない」という立場を説明する試み、というよりは、「HTMLはプログラミング言語ではない、とした立場から見えているもの」を説明する試み、と修飾したほうが適切かもしれないですね。
こういう対立について、さもどちらかの立場でなければならない、というように思われがちですが、(少なくとも私にとっては)俯瞰してそれぞれの立場でどう考えられるか、というのが肝要だなと思いましたね。

それで、そうですね。得てして、指摘する通り、些細と呼べるような機能のみでプログラミング言語足り得る能力を獲得することもよくあるでしょう。ですから、記事内の立場においては、すべての追加された機能がそれに足り得ない、ということを仕様に対して検証するのもやる(やった)のだ、というのも含意されていると捉えるのが一つあり得るかなと思いました。

とがとが

この流れだと、たとえば PDF もプログラミング言語ではないということになりますか?(それともある程度複雑な辞書型や関数を持つので HTML とは違ってプログラミング言語たりえる……?)

lumaluma

PDFは詳しくなく…
TeXを思いうかべて、メタ言語(マクロ)とコア言語をどう区別するかというトピックはありそうです。
HTMLもJSがそもそも書けるやん、というのはありますが、それをメタ言語だと思って分離することもできるな、とか。 ただ、JS (<script>) に関しては、ブラウザが勝手に解釈してるだけでHTML目線ではテキストでしかない、みたいな、ランタイムによって異なる、という見方もできるんですかねー。

とがとが

なるほど。確かにメタ言語とコア言語を分離するなら、PDF のコア言語は紙面にオブジェクトを描画する命令を記述しているだけなので、プログラミング言語でないという考えもできそうですね。