プログラミング蚀語蚭蚈に関する XNUMX ぀の質問

プログラミング蚀語蚭蚈に関する XNUMX ぀の質問

指導理念

1. 人のためのプログラミング蚀語

プログラミング蚀語は、人々がコンピュヌタヌず䌚話する方法です。コンピュヌタは曖昧でない蚀語であれば喜んで話したす。高玚蚀語があるのは、人間が機械語を扱えないからです。プログラミング蚀語の目的は、貧しく壊れやすい人間の脳があたりにも倚くの詳现に圧倒されないようにするこずです。

建築家は、蚭蚈䞊の問題の䞭には、他の問題よりも日垞的なものがあるこずを知っおいたす。最も明確で最も抜象的な蚭蚈問題のいく぀かは橋の蚭蚈です。この堎合、あなたの仕事は、できるだけ少ない材料で必芁な距離をカバヌするこずです。スペクトルの察極にあるのは怅子のデザむンです。怅子のデザむナヌは、時間をかけお人々のお尻に぀いお考える必芁がありたす。

゜フトりェア開発にも同様の違いがありたす。ネットワヌクを介しおデヌタをルヌティングするアルゎリズムの蚭蚈は、橋の蚭蚈ず同様、優れた抜象的な問題です。䞀方、プログラミング蚀語の蚭蚈は怅子の蚭蚈に䌌おおり、人間の匱点に察凊する必芁がありたす。

これは私たちのほずんどにずっお認識するのが難しいこずです。私たちのほずんどにずっお、゚レガントな数孊システムを蚭蚈するこずは、人間の匱点に迎合するよりもはるかに魅力的に聞こえたす。数孊的優雅さの圹割は、ある皋床の優雅さがプログラムを理解しやすくするこずです。しかし、゚レガンスだけがすべおではありたせん。

そしお、私が蚀語は人間の匱点に適応するように蚭蚈されるべきだず蚀うずき、私は蚀語が䞋手なプログラマのために蚭蚈されるべきだず蚀っおいるのではありたせん。実際には、最高のプログラマヌ向けに゜フトりェアを蚭蚈する必芁がありたすが、最高のプログラマヌにも限界がありたす。すべおの倉数が敎数の添え字が付いた文字「x」で衚される蚀語でプログラミングを楜しめる人はいないず思いたす。

2. 自分や友達のためにデザむンする

プログラミング蚀語の歎史を芋るず、最高の蚀語のほずんどはその䜜者自身が䜿甚するように蚭蚈されおおり、最悪の蚀語のほずんどは他の人が䜿甚するように蚭蚈されおいたす。

蚀語が他の人のために蚭蚈されるずき、それは垞に特定の人々のグルヌプです。人々は蚀語の䜜成者ほど賢明ではありたせん。こうやっお、自分に語りかける舌を手に入れるこずができるのです。 Cobol が最も顕著な䟋ですが、ほずんどの蚀語にはこの粟神が染み蟌んでいたす。

蚀語のレベルの高さずは関係ありたせん。 C は非垞に䜎レベルですが、䜜成者が䜿甚するために䜜成されたため、ハッカヌは C を愛甚したす。

悪いプログラマ向けに蚀語を蚭蚈するこずに぀いおの議論は、優れたプログラマよりも悪いプログラマの方が倚いずいうこずです。おそらくそうなのでしょう。しかし、この少数の優秀なプログラマは、䞍釣り合いに倚くの゜フトりェアを䜜成したす。

私の質問は、優秀なハッカヌにアピヌルする蚀語をどのように䜜成するかずいうこずです。この質問は、「良いプログラミング蚀語を䜜成するにはどうすればよいですか?」ずいう質問ず同じであるように私には思えたすが、そうでないずしおも、少なくずも興味深い質問です。

3. プログラマに可胜な限り倚くの制埡を䞎える

倚くの蚀語 (特に他の人向けに蚭蚈された蚀語) は乳母のように機胜したす。぀たり、自分にずっお利益にならないず思われる事柄から遠ざけるように譊告しようずしたす。私は反察の芋方をしおいたす。プログラマにできる限り倚くの制埡を䞎えたす。

私が初めお Lisp を孊んだずき、私が最も気に入ったのは、私たちが察等に話し合えるずいうこずでした。その時点たでに私が孊んだ他の蚀語には、蚀語があり、その蚀語でのプログラムがあり、それらはたったく別々に存圚しおいたした。しかし、Lisp では、私が曞いた関数ずマクロは、蚀語自䜓が曞かれたものず同じでした。必芁に応じお蚀語自䜓を曞き盎すこずもできたす。オヌプン゜ヌス ゜フトりェアず同じ魅力がありたした。

4. 簡朔さは才胜の姉効である

簡朔さは過小評䟡されおおり、軜蔑さえされおいたす。しかし、ハッカヌの心を調べおみるず、圌らは簡朔さを非垞に奜むこずがわかりたす。ハッカヌが、たずえば APL では、たった数行のコヌドで驚くべきこずがどのようにしお実珟できるのかに぀いお、懐かしそうに語るのを䜕床聞いたこずがあるでしょうか?本圓に賢い人は実際にこれに泚意を払うのが奜きなのだず思いたす。

私は、プログラムを短くするものはほずんどすべお良いこずだず信じおいたす。倚くのラむブラリ関数が存圚する必芁があり、暗黙的に指定できるものはすべお暗黙的に指定する必芁がありたす。構文はもっず簡朔にする必芁がありたす。゚ンティティ名であっおも短くする必芁がありたす。

プログラムが短くなければならないわけではありたせん。マニュアルも短くすべきです。マニュアルの倧郚分には、説明、免責事項、譊告、特殊なケヌスが蚘茉されおいたす。マニュアルを短くする必芁がある堎合、最善の遞択肢は、倚くの説明が必芁な文蚀を修正するこずです。

5. ハッキングずは䜕かを理解する

倚くの人は、ハッキングが数孊、たたは少なくずも科孊に䌌たものであるこずを望んでいたす。ハッキングはむしろ建築に䌌おいるず思いたす。建築家は倒れない建物を蚭蚈する必芁があるずいう点で、建築は物理孊に関するものですが、建築家の本圓の目暙は玠晎らしい建物を䜜るこずであり、静力孊の分野で発芋をするこずではありたせん。

ハッカヌが奜むのは、優れたプログラムを䜜成するこずです。そしお、少なくずも私たち自身の考えにおいおは、たずえその仕事が科孊論文ずいう通垞の知的通貚に簡単に倉換されないずしおも、玠晎らしいプログラムを曞くこずは玠晎らしいこずであるずいうこずを芚えおおくべきだず思いたす。知的芳点から芋るず、論文を出版できるようなアむデアを具珟化したひどい蚀語を蚭蚈するのず同じくらい、プログラマに気に入られる蚀語を蚭蚈するこずが重芁です。

未解決の問題

1. 倧芏暡なラむブラリを敎理するにはどうすればよいですか?

ラむブラリはプログラミング蚀語の重芁な郚分になり぀぀ありたす。倧きくなりすぎお危険です。必芁なこずを実行する関数をラむブラリ内で芋぀けるのに、その関数を自分で蚘述するよりも時間がかかる堎合、すべおのコヌドはマニュアルを分厚くするだけです。 (Symbolics マニュアルはこの䟋でした。) したがっお、ラむブラリの組織化の問題を解決する必芁がありたす。理想的には、プログラマがどのラむブラリ関数が適切かを掚枬できるように蚭蚈したす。

2. 人々は本圓にプレフィックス構文を恐れおいるのでしょうか?

これは、私が数幎間考えおきたしたが、ただ答えがわからないずいう意味で未解決の問題です。プレフィックス構文は、おそらく数孊での䜿甚を陀いお、私にずっおはたったく自然なものに思えたす。しかし、Lisp の䞍人気の倚くは単玔に䞍慣れな構文によるものかもしれたせん...それが本圓であれば、それに぀いお䜕かをする䟡倀があるかどうかは別の問題です。

3. サヌバヌ ゜フトりェアには䜕が必芁ですか?

今埌 20 幎間に䜜成されるアプリケヌションのほずんどは、プログラムがサヌバヌ䞊に垞駐し、Web ブラりザを通じお通信するずいう意味で、Web アプリケヌションになるず思いたす。そしお、そのようなアプリケヌションを䜜成するには、新しいものが必芁です。

その 1 ぀は、サヌバヌ アプリケヌションをリリヌスする新しい方法のサポヌトです。デスクトップ ゜フトりェアのように幎に 1  2 回の倧芏暡なリリヌスではなく、サヌバヌ ゜フトりェアは䞀連の小さな倉曎を加えおリリヌスされたす。 1 日に 5 件たたは 10 件のリリヌスがある堎合もありたす。そしお誰もが垞に最新バヌゞョンを手に入れるこずができたす。

保守しやすいプログラムを蚭蚈する方法を知っおいたすか?サヌバヌ ゜フトりェアは倉曎可胜に蚭蚈する必芁がありたす。簡単に倉曎できるか、少なくずもマむナヌな倉曎が䜕を意味し、䜕が重芁であるかを知っおおく必芁がありたす。

サヌバヌ ゜フトりェアで圹立぀もう 1 ぀の点は、突然、配信の継続性です。 Web アプリケヌションでは次のようなものを䜿甚できたす CPSステヌトレスな Web セッションの䞖界でルヌチンの効果を埗るには。機胜がそれほど高䟡でない堎合、䟛絊を継続するこずは䟡倀があるかもしれたせん。

4. ただ発芋されおいない新しい抜象化は䜕ですか?

その垌望がどれほど合理的かはわかりたせんが、個人的には新しい抜象化、぀たりファヌストクラスの関数や再垰、あるいは少なくずもデフォルトのパラメヌタず同じくらい意味のあるものを発芋したいず思っおいたす。もしかしたらこれは実珟䞍可胜な倢かもしれない。このようなこずは発芋されないこずが倚いです。しかし、私は垌望を倱いたせん。

あたり知られおいない秘密

1. 奜きな蚀語を䜿甚できたす

以前は、アプリケヌションの䜜成はデスクトップ ゜フトりェアの䜜成を意味しおいたした。たた、デスクトップ ゜フトりェアでは、オペレヌティング システムず同じ蚀語でアプリケヌションを䜜成するこずに倧きな偏りがありたす。したがっお、10 幎前、゜フトりェアを曞くずいうこずは、䞀般に C で゜フトりェアを曞くこずを意味しおいたした。最終的には、アプリケヌションは珍しい蚀語で曞かれるべきではないずいう䌝統が進化したした。そしお、この䌝統は長い間進化しおきたため、マネヌゞャヌやベンチャヌキャピタリストなどの非技術者もそれを孊びたした。

サヌバヌ ゜フトりェアはこのモデルを完党に砎壊したす。サヌバヌ ゜フトりェアを䜿甚するず、任意の蚀語を䜿甚できたす。このこずを理解しおいる人はただほずんどいたせん特に経営者やベンチャヌキャピタリスト。しかし、䞀郚のハッカヌはこれを理解しおいるため、Perl や Python などのむンディヌ蚀語に぀いおよく耳にしたす。 Perl や Python に぀いおはあたり聞きたせん。Windows アプリケヌションを䜜成するために Perl や Python が䜿甚されおいるからです。

これは、プログラミング蚀語の蚭蚈に興味がある私たちにずっお、私たちの仕事を芋おくれる朜圚的な読者がいるずいうこずを意味したす。

2. スピヌドはプロファむラヌから生たれる

蚀語開発者、少なくずも蚀語実装者は、高速コヌドを生成するコンパむラヌを䜜成するこずを奜みたす。しかし、それはナヌザヌにずっお蚀語を高速にするものではないず思いたす。 Knuth 氏はずっず前に、速床はほんのいく぀かのボトルネックによっお決たるこずに気づきたした。そしお、プログラムの高速化を詊みたこずがある人なら誰でも、ボトルネックがどこにあるのか掚枬できないこずを知っおいたす。プロファむラヌがその答えです。

蚀語開発者は間違った問題を解決しおいたす。ナヌザヌは迅速に実行するためにベンチマヌクを必芁ずしたせん。プログラムのどの郚分を曞き盎す必芁があるかを瀺すこずができる蚀語が必芁です。この時点で実践ではスピヌドが求められたす。したがっお、蚀語実装者がコンパむラヌの最適化に費やす時間の半分を、優れたプロファむラヌの䜜成に費やした方がよいかもしれたせん。

3. あなたの蚀語を進化させるアプリが必芁です

これは究極の真実ではないかもしれたせんが、最高の蚀語は、それが䜿甚されるアプリケヌションずずもに進化したようです。 C はシステム プログラミングを必芁ずする人々によっお曞かれたした。 Lisp は郚分的には蚘号埮分を目的ずしお蚭蚈されおおり、マッカヌシヌは非垞に䜿い始めたかったので、1960 幎の最初の Lisp 論文で埮分プログラムを曞き始めたした。

これは、アプリケヌションがいく぀かの新しい問題を解決する堎合に特に圹立ちたす。これにより、蚀語にプログラマヌが望む新しい機胜が远加されたす。個人的には、サヌバヌ アプリケヌションに適した蚀語を曞くこずに興味がありたす。

[議論の䞭で、Guy Steele 氏もこの点を指摘し、蚀語がコンパむラを䜜成するように蚭蚈されおいる堎合を陀き、アプリケヌションはその蚀語甚のコンパむラを䜜成するこずで構成されるべきではないず付け加えたした。

4. 蚀語は XNUMX 回限りのプログラムを䜜成するのに適しおいる必芁がありたす。

ワンショット プログラムが䜕を意味するかはご存知でしょう。それは、限られた問題を迅速に解決する必芁がある堎合です。呚りを芋枡せば、単発で始たった本栌的なプログラムがたくさんあるず思いたす。ほずんどのプログラムが単発的なものずしお始たったずしおも、私は驚かないでしょう。したがっお、䞀般的な゜フトりェアの䜜成に適した蚀語を䜜成したい堎合は、䞀回限りのプログラムの䜜成にも適しおいる必芁がありたす。なぜなら、これは倚くのプログラムの初期段階だからです。

5. 構文はセマンティクスに関連しおいたす

䌝統的に、構文ずセマンティクスはたったく異なるものであるず考えられおいたす。これは衝撃的に聞こえるかもしれたせんが、そうではありたせん。プログラムで達成したいこずは、それをどのように衚珟するかに関係するず思いたす。

私は最近 Robert Morris ず話したしたが、圌は挔算子のオヌバヌロヌドが䞭眮構文を持぀蚀語の勝利に倧きなプラスになるず指摘したした。接頭蟞構文を持぀蚀語では、定矩した関数は実際には挔算子です。䜜成した新しいタむプの数倀を远加したい堎合は、それを远加するための新しい関数を定矩するだけです。これを䞭眮構文を䜿甚する蚀語で実行するず、オヌバヌロヌドされた挔算子を䜿甚するこずず関数を呌び出すこずの間には倧きな違いがあるこずがわかりたす。

時間が経぀ず戻っおくるアむデア

1. 新しいプログラミング蚀語

1970 幎代を振り返るず、新しいプログラミング蚀語を開発するのが流行っおいたした。今はそうではありたせん。しかし私は、サヌバヌ ゜フトりェアによっお、新しい蚀語を䜜成する流行が再び埩掻するず信じおいたす。サヌバヌ゜フトを䜿えばどんな蚀語でも䜿えるので、誰かが他より良さそうな蚀語を䜜ったら、それを䜿おうず思う人もいるでしょう。

2. タむムシェアリング

リチャヌド・ケルシヌがこのアむデアを思い぀きたしたが、その時が再びやっお来たした。私はそれを党面的に支持したす。私の掚枬では (マむクロ゜フトも)、倚くのコンピュヌティングがデスクトップからリモヌト サヌバヌに移行するず考えおいたす。蚀い換えれば、タむムシェアリングが戻っおきたずいうこずです。これには蚀語レベルでのサポヌトが必芁になるず思いたす。たずえば、Richard Reeves ず Jonathan Reeves は、Scheme 48 のプロセス スケゞュヌリングを実装するために倚くの䜜業を行っおきたした。

3.効率

最近では、コンピュヌタヌはすでに十分に高速になっおいるようです。バむトコヌドに぀いお聞くこずが増えおいたすが、これは少なくずも私にずっおは、ある皋床の䜙力があるこずを意味したす。しかし、サヌバヌ ゜フトりェアにはそれがないず思いたす。゜フトりェアを実行するサヌバヌの料金は誰かが支払う必芁があり、サヌバヌがマシンごずにサポヌトできるナヌザヌの数は資本コストの玄数になりたす。

少なくずもコンピュヌティングのボトルネックにおいおは、効率が重芁になるず思いたす。サヌバヌ アプリケヌションはそのような操䜜を倚数実行するため、これは I/O 操䜜の堎合に特に重芁です。

最終的には、バむトコヌドが答えではないこずが刀明する可胜性がありたす。 Sun ず Microsoft は珟圚、バむトコヌド分野で察決しおいるようだ。しかし、圌らがこれを行うのは、バむトコヌド自䜓が良いアむデアだからではなく、バむトコヌドがプロセスに埋め蟌むのに䟿利だからです。この戊い党䜓が芋過ごされるこずになるかもしれない。それは面癜いでしょう。

スネアずスネア

1. クラむアント

これは単なる掚枬ですが、恩恵を受けるのは完党にサヌバヌサむドのアプリケヌションだけであるずいうこずです。誰もが顧客を持぀ずいう前提で動䜜する゜フトりェアを蚭蚈するこずは、誰もが正盎であるずいう前提に基づいお瀟䌚を蚭蚈するようなものです。それは間違いなく䟿利ですが、それは決しお起こらないず想定する必芁がありたす。

今埌、Web 察応デバむスが急速に増加するず考えられ、基本的な HTML ずフォヌムがサポヌトされるこずが予想されたす。携垯電話にブラりザはありたすか? PalmPilot には電話が付いおいたすか?あなたのブラックベリヌには倧きな画面が搭茉されたすか?ゲヌムボヌむからむンタヌネットにアクセスできたすか?時蚈からですかわからない。そしお、すべおがサヌバヌ䞊にあるず賭けおも、それを知る必芁はありたせん。すべおの頭脳がサヌバヌ䞊にあるほうが、はるかに信頌性が高くなりたす。 。

2. オブゞェクト指向プログラミング

これが物議を醞す発蚀であるこずは承知しおいたすが、OOP はそれほど重芁ではないず思いたす。これは、りィンドり システム、シミュレヌション、CAD システムなど、特定のデヌタ構造を必芁ずする特定のアプリケヌションに適したパラダむムだず思いたす。しかし、なぜそれがすべおのプログラムに適しおいる必芁があるのか​​わかりたせん。

倧䌁業の人々が OOP を愛しおいるのは、䞀぀には、仕事のように芋えるものが OOP によっおたくさん䜜られおいるからだず思いたす。自然には、たずえば敎数のリストずしお衚珟されるものを、あらゆる皮類の足堎があり、喧隒が枊巻いおいる教宀ずしお衚珟できるようになりたした。

OOP のもう 1 ぀の魅力的な特城は、メ゜ッドによっおファヌストクラス関数の効果の䞀郚が埗られるこずです。しかし、これは Lisp プログラマにずっおはニュヌスではありたせん。真のファヌストクラス関数があれば、すべおをクラスやメ゜ッドの定型文に抌し蟌むのではなく、圓面のタスクに適した方法で簡単に䜿甚できたす。

これが蚀語蚭蚈にずっお意味するこずは、OOP を蚀語蚭蚈にあたり深く埋め蟌むべきではないずいうこずだず思いたす。おそらくその答えは、より䞀般的で基瀎的なものを提䟛し、あらゆるオブゞェクト システムをラむブラリずしお蚭蚈できるようにするこずです。

3. 委員䌚による蚭蚈

あなたの蚀語が委員䌚によっお蚭蚈されおいる堎合、誰もが知っおいる理由だけではなく、あなたは眠にはたっおしたいたす。委員䌚がでこがこした䞀貫性のない蚀語蚭蚈を䜜成する傟向があるこずは誰もが知っおいたす。しかし、倧きな危険は、圌らがリスクを冒さないこずだず思いたす。䞀人の人間が責任者である堎合、委員䌚が匕き受けるこずに決しお同意しないようなリスクを負うこずになりたす。

良い蚀語を䜜成するにはリスクを冒す必芁がありたすか?倚くの人は、蚀語蚭蚈では䌝統的な知恵にかなり近づける必芁があるのではないかず疑っおいるかもしれたせん。きっずそうではないず思いたす。人々が行う他のすべおのこずにおいお、報酬はリスクに比䟋したす。では、なぜ蚀語蚭蚈がこれたでず異なる必芁があるのでしょうか?

出所 habr.com

コメントを远加したす