「君のプログラミング言語で、これ、できる？」で紹介されていた「Execution in the Kingdom of Nouns」を訳してみました。英語よりも、つたない日本語訳の方がよい方は、どうぞ。

おかしな訳があれば、教えて下さい。適宜、訂正します。

「C の関数はファーストクラスじゃないよ」などの突っ込みは、原文の著者へどうぞ。

ゴミ溢れ すべての Java ユーザは、ユースケースが好きだから、ユースケースの一例から始めよう。それは、ゴミ出し。こんなときのこと。「ジャーニー、そのゴミを出してきて！溢れそうじゃないの！」 もしあなたが、英語を喋る本当に普通の人であり、ゴミ出しの際の行動を説明しろと言われたら、おそらくこんな風に考えるだろう。 流しの下からゴミ袋を取り出す

それをガレージに運び出す

それをゴミ箱に入れる

家の中に戻る

手を洗う

ソファーに座る

ビデオゲーム(あるいは、やっていたこと)を再開する もしあなたが英語で考えてなくても、あなたの好きな言語でも、似たような一連の動作を考えただろう。言語の選択に関わらず、動作に程度の差こそあれ、ゴミ出しとは、ゴミを外に持って行って、家に戻ってくる、一連の動作である。 我々の心は、押さえきれない行動で満たされている：我々は暮らし、呼吸し、歩き、話し、笑い、泣き、望み、恐れ、食べ、飲み、止め、進み、ゴミを出す。これ以外にも、我々は何をするにも、どう行動するのも自由だ。もし、我々が太陽の照りつける中の動かない石だとしても、人生は悪くはない。しかし、自由ではないだろう。自由とは、我々が何かするという能力から生じるものである。 もちろん、我々の心は、名詞によっても満たされている。我々は、名詞を食べ、店で名詞を買い、名詞に腰掛け、名詞の上で眠る。名詞はあなたの頭の上に落ち、あなたの名詞の上に大きな名詞を作ることもある。名詞とは物であり、物なしで我々は存在できるだろうか？ しかし、それらは単に物であり、それだけである：目的への手段、目的そのもの、高価な財産、あるいは、我々が観察する物の名前。ビルがある。ここに岩がある。どんな子供でも、名詞は認識できるだろう。これらの名詞を面白くするのは、名詞に対する変化である。 変化には行動が必要だ。行動は、人生に刺激を与える。行動は、刺激に刺激を与えさえする！結局、食べなければ、それは刺激的(スパイシー)ではないのだ。名詞はどこにでもあるが、人生の絶え間ない変化と変わらぬ興味は、すべて動詞の中にある。 そして、もちろん、動詞と名詞に加えて、我々には、形容詞、前置詞、代名詞、冠詞、接続詞、魅惑的な虚辞、そして、考えや話を面白くしてくれる他の言葉がある。すべての人が、それぞれに役割があり、すべてが重要だと同意してくれると思う。どれか一つでも失ったら、大変なことだ。 もしも我々が、これから決して動詞を使わないと突然決めてしまったら、それはおかしなことではないだろうか？ まさにそんなことが起こっている国の物語について、話をさせて欲しい。

名詞の王国 王 Java がシリコンの拳をもって統治する Java 王国では、あなたや私のような考え方は、人々に許されていない。Java ランドでは、王自らの命令により、名詞がとても大切にされている。名詞は、王国のもっとも重要な市民なのである。彼らは、きらびやかな装飾品を身にまとって歩いている。それらは、比較的平穏な人生を送っている形容詞によって用意されたものである。形容詞は、名詞ほど地位は高くないが、動詞に生まれてこなくて本当によかったと考えている。 なぜなら、王国の動詞市民は、苦渋をなめているからである。 Java ランドでは、王 Java の命令により、動詞は名詞によって所有されている。しかし、彼らは単なるペットではない。それどころか、動詞は Java ランド全土のすべての雑用と肉体労働をしなければならない。事実上、彼らは奴隷、少なくとも農奴か使用人である。Java ランドの住人は、この状況に大変満足しており、違う世の中もあり得ることにまったく気付いていない。 Java ランドの動詞は、すべての仕事に責任があるにも関わらず、軽蔑されており、自由に歩き回ることは許されていない。動詞が人前に出ようとするなら、必ず名詞にエスコートしてもらわなければならない。 もちろん、「スコートする」とう動詞自身も、一人で歩き回ることは許されていない。エスコートすることを促進するためには、VerbEscorter を斡旋する必要がある。では、「促進する」(facilitate)や「斡旋する」(procure)はどうなのか？ 同様に、Facilitator や Procurer が重要な名詞である。それらの仕事は、それぞれ促進や斡旋によって、卑しい動詞「促進する」と「斡旋する」を監視することである。 神 Sun の導きにより、王は常に Java 王国からすべての動詞を追放すると脅している。もしこれが現実となれば、住人はすべての雑用をこなす、少なくとも一つの動詞を必要とするだろう。ユーモアのかけらも持ち合わせていない王は、きっと execute を選択するだろう。 動詞 execute や、仲間の run、start、go、JustDoIt、makeItSo などは、適切な Executioner と execute の呼び出しに置き換えることで、他の動詞の仕事をこなすことができる。ちょっと待って、だって？ Waiter.execute()。歯を磨く？ ToothBrusher(myTeeth).go()。ゴミを出す？TrashDisposalPlanExecutor.doIt()。安全な動詞などいない。すべては、名詞に置き換えられるのだ。 Java ランドの最も狂信的な地域では、名詞は完全にすべての動詞を追い出したとされる。しかし、そこら中に動詞がまだいるのではないか疑問を抱くももっともだ。畑を耕すためや、し尿瓶を空にするためにだ。注意深く観察すると、秘密が暴かれる。名詞は、自分が所有する動詞 execute の名前を、その機能を少しも変えることなしに、自分たちにちなんで、変えることができる。FieldTiller till()、ChamberPotEmptier empty()、RegistrationManager register() を観察すれば、所有者である名詞の皮を被った、邪悪な王の軍隊に属する executioner の一つであることが分る。

隣国の動詞 近隣のプログラミング言語王国では、ゴミを出すことは単純であり、上記のような方法に近い。Java と同様に、データは名詞であり、関数は動詞である。しかし、Java ランドと異なるのは、諸王国の市民は、彼らの都合に合わせて、自由に名詞と動詞を混ぜたり、組み合わせたりすることができる。 たとえば、C ランド、JavaScript ランド、Perl ランド、Ruby ランドという近隣諸国では、ゴミ出しを一連の動作、すなわち、動詞(関数)としてモデル化するかもしれない。一連の動作を、適切なオブジェクトに適切な順番で適応すれば(ゴミを持つ、外に出す、ゴミ箱に捨てる、等々)、ゴミ捨ての仕事は完全に成功する。過剰なエスコートや、監視人はどこにも必要ない。 これらの王国では、動詞をくるむ名詞を作る必要はほとんどない。ゴミを見つけるための名詞 GarbageDisposalStrategy や GarbageDisposalDestinationLocator、あるいは ソファに戻ってくるための名詞 PostGarbageActionCallback はない。単に名詞に作用する動詞を書き、それらを適切な順番で実行する動詞 take_out_garbage を用意すればよい。 それらの近隣王国では、必要とあれば、重要な名詞を作る方法も用意されている。もし熱心な発明者が、畑を人よりも早く耕すことのできる馬／車／機械のような、これまでに存在していなかった新しく有益な概念を作るのなら、名前／説明／状態／命令を提供するクラスを利用できる。 違いは、動詞は独立して存在でき、それを所有する新たな名詞を作り出す必要がないことだ。 これがプログラミング諸国のもののありかただ。Java ランドの住人は、近隣王国の人々を軽蔑している。

地中深く穴を掘って行くと... この星の裏側には、人口の少ない地域があり、そこでは動詞が高貴な市民とされている。それらは、Haskellia、Ocamlica、Schemeria などの関数型王国だ。そこの住人は、Java ランド近隣王国に行くことは、ほとんどない。近くに王国があまりないせいで、関数型王国同士は互いを軽蔑しており、他にすることがないと戦争を起こす。 関数型王国では、名詞と動詞の身分は等しいとされている。しかし、名詞が名詞たろうとするなら、なにもしないで座っているほかない。動詞は大変行動的で、すべてをこなすので、名詞はほとんど何もしない。動詞をエスコートする名詞を作れという変な法律はない。だから、それぞれの王国には、正確に物の数だけ名詞が存在する。 その結果、こういうのも変だが、動詞が国の主導権を握っている。よそ者からみると動詞(すなわち関数)が群を抜いて重要な市民であるという印象を持つだろう。蛇足ながら、それが、物型王国ではなく、関数型王国と呼ばれる所以である。 最果ての地、関数型王国の向こうには、神聖 Lambda 王国 と呼ばれる伝説の国がある。そこには、名詞はまったくなく、動詞のみがある！物は存在するがが、すべては動詞から作られる。もし伝承が本当であれば、羊を数える数字(その国で通貨をやりとりするための普通の方法でもある)さえもそうだ。0 は、単に lambda()。１は、lambda(lambda())、2 は lambda(lambda(lambda()))、といった具合だ。この伝説の国では、すべての物、名詞、動詞、その他すべてのものは、根源的な動詞 lambda から作られる。 正直なところ、Java ランドの住人は星の裏側の存在に気付いていないため、心穏やかだ。彼らのカルチャーショックを想像できるだろうか？ 気持ちを表すためには、彼らは外国人恐怖症といった新しい名詞を発明しなければならず、混乱するだろう。

Java ランドの住人は幸せか？ Java ランドでの生活は、よく言えば少し変で、悪く言えばひどく効率が悪いといえる。しかし、子供の詩を知れば、彼らが詩的で、社会がいかに幸せかが分るだろう。たとえば、Java ランドの子供達は、有名な警句をしばしば暗唱する。 釘が一本なければ、 throw new HorseshoeNailNotFoundException( "no nails!" ); 馬蹄がなければ、 EquestrianDoctor.getLocalInstance().getHorseDispatcher().shoot();

ウマがなければ、 RidersGuild.getRiderNotificationSubscriberList().getBroadcaster().run( new BroadcastMessage(StableFactory.getNullHorseInstance())); 騎手がいなければ、 MessageDeliverySubsystem.getLogger().logDeliveryFailure( MessageFactory.getAbstractMessageInstance( new MessageMedium(MessageType.VERBAL), new MessageTransport(MessageTransportType.MOUNTED_RIDER), new MessageSessionDestination(BattleManager.getRoutingInfo( BattleLocation.NEAREST))), MessageFailureReasonCode.UNKNOWN_RIDER_FAILURE); 通信がなければ、 ((BattleNotificationSender) BattleResourceMediator.getMediatorInstance().getResource( BattleParticipant.PROXY_PARTICIPANT, BattleResource.BATTLE_NOTIFICATION_SENDER)).sendNotification( ((BattleNotificationBuilder) (BattleResourceMediator.getMediatorInstance().getResource( BattleOrganizer.getBattleParticipant(Battle.Participant.GOOD_GUYS), BattleResource.BATTLE_NOTIFICATION_BUILDER))).buildNotification( BattleOrganizer.getBattleState(BattleResult.BATTLE_LOST), BattleManager.getChainOfCommand().getCommandChainNotifier())); 戦闘がなければ、 try { synchronized (BattleInformationRouterLock.getLockInstance()) { BattleInformationRouterLock.getLockInstance().wait(); } } catch (InterruptedException ix) { if (BattleSessionManager.getBattleStatus( BattleResource.getLocalizedBattleResource(Locale.getDefault()), BattleContext.createContext( Kingdom.getMasterBattleCoordinatorInstance( new TweedleBeetlePuddlePaddleBattle()).populate( RegionManager.getArmpitProvince(Armpit.LEFTMOST)))) == BattleStatus.LOST) { if (LOGGER.isLoggable(Level.TOTALLY_SCREWED)) { LOGGER.logScrewage(BattleLogger.createBattleLogMessage( BattleStatusFormatter.format(BattleStatus.LOST_WAR, Locale.getDefault()))); } } }

戦争がなければ、 new ServiceExecutionJoinPoint( DistributedQueryAnalyzer.forwardQueryResult( NotificationSchemaManager.getAbstractSchemaMapper( new PublishSubscribeNotificationSchema()).getSchemaProxy(). executePublishSubscribeQueryPlan( NotificationSchema.ALERT, new NotificationSchemaPriority(SchemaPriority.MAX_PRIORITY), new PublisherMessage(MessageFactory.getAbstractMessage( MessageType.WRITTEN, new MessageTransport(MessageTransportType.WOUNDED_SURVIVOR), new MessageSessionDestination( DestinationManager.getNullDestinationForQueryPlan()))), DistributedWarMachine.getPartyRoleManager().getRegisteredParties( PartyRoleManager.PARTY_KING || PartyRoleManager.PARTY_GENERAL || PartyRoleManager.PARTY_AMBASSADOR)).getQueryResult(), PriorityMessageDispatcher.getPriorityDispatchInstance())). waitForService(); すべては釘一本のせい。 今日においても、これは有益な教訓だ。 Java ランドでの語り口は、Ben Franklin のオリジナル作品といくつかの点で違っているが、Java ランドの住人はこれは魅力的な詩であると感じている。 魅力は、その構造様式だ。その構造様式は、すべて名詞からなるため、王 Java から格別の評価を与えられている。知っての通り、Java 王国では、名詞は物であり、物はすべての行動よりも尊重される。構造様式は、あなたが見たり触ったりできる物、あなたの頭上に堂々とそびえる物、そして、棒でたたけば心地よい音を奏でる物から作られる。王は馬車に乗り、車輪を叩きながら、この上なく満足している。できが悪かろうが、この詩には物の不足はない。 我々の人間としての本能は、物の中からシェルターを探す。シェルターが強ければ強い程、我々はより安全に感じる。Java ランドでは、人々を安心させる強い物がたくさんある。彼らは、多量の構造的生産物に驚嘆し、「これは頑健な設計に違いない」と考える。構成を変えようとしたときに、この思いはさらに強くなる。構造様式の強さに、人々はたじろぐ。誰も構成を破壊できはしないと思える程に。 強固な構造様式に加えて、Java ランドのすべての物は、上手に組織化されている。すべての名詞は、適切な位置に発見できる。すべての話が、限定された形をとる。オブジェクトの生成は、よい例だ。それぞれの抽象化に対してマネージャが一つ。マネージャごとに run()メソッドを一つだけ。Java の住民は、経験が少なくても、この種のモデル化でどんな話も表現できると悟る。どんな抽象化の表現も、どんな計算の表現も可能にする名詞カルキュラスが存在するのだ。必要なのは、十分な名詞、それらを生成するコンストラクタ、名詞のグラフを横断するアクセッサ、そしてプランを実行する極めて重要な execute() だ。 Java 王国の住人は単に幸せというだけではなく、誇りで充満している。