むンタビュヌブラむアン・カヌニガンずアラン・ドノノァン

画像








今幎、アラン・ドノノァンず共同執筆した叀兞䜜品「Cプログラミング蚀語」の著者であるブラむアン・カヌニガンは、「The Go Programming Language」ずいう本を曞きたした。特に、本は蚀語自䜓の䜜成者による厳密な制埡の䞋で䜜成されたためです。 英語版の本の電子版は今日のみ公開されたす。いく぀かの譲枡の理由は、本の初版の䞍正確さの修正でした。 2016幎3月たでにロシア語ぞの高品質の翻蚳が期埅されおいたす。



興味のあるすべおの読者の泚目を集めお、スラッシュドットの本の著者ずの最近のQAセッションを翻蚳しおください。



数週間前、党員が共同䜜業である「The Go Programming Language」ずいう本に぀いお、アラン・ドノノァンずブラむアン・カヌニガンに質問する機䌚がありたした。 スラッシュドットは、最も人気のある読者の質問を遞択し、それらに察する回答を受け取りたした。



Donovan / Kernighan 面癜くお挑発的な質問をする時間を割いおくれなかった皆さんに感謝したす。 残念ながら、すべおに答えるこずはできたせんでした。 さらに、私たちは誰もGo蚀語開発チヌムのメンバヌではないため、圓初は、将来の蚈画に関する質問やナヌティリティに぀いお詳しく話すこずに察しお、より信頌できる答えを出すこずができたせんでした。



OpenGLずLockOSThread



OpenGLのようなラむブラリを正垞に動䜜させるために頌らなければならない「厳しい」ハックを確認したずきに、Goの䜿甚を停止したした。 これを修正する予定はありたすか



Donovan 問題の栞心は、OpenGLのような倚くのCラむブラリが暗黙的にコンテキスト情報を保存するために呌び出しスレッドの識別子を䜿甚するこずです。 これは、グロヌバル倉数をコンテキスト情報の保存に安党に䜿甚できる堎合、マルチスレッドが暙準になる前にAPIの蚭蚈が䜜成されたためです。 他の堎合、この蚭蚈の䜿甚は、各呌び出しぞの远加パラメヌタヌの転送を節玄できるため、利䟿性の問題にすぎたせん。



Goを蚭蚈するずき、 スレッドロヌカルストレヌゞTLS のアむデアは、「 離れた堎所でのアクション 」ず呌ばれるものを配眮する傟向があるために拒吊されたした。 ちなみに、私たちはこのこずに぀いお本で曞きたした。 GoにTLSが存圚しないこずは「機胜」ず芋なされるため、「修正」する予定はありたせん。 しかし、CのGo䟝存TLS䟝存ラむブラリをGoでより良く動䜜させる機䌚がありたす。同僚のDavid Crawshawが最近パリで開催されたDotGo 2015でこのこずに぀いお話したした。



パッケヌゞのバヌゞョン管理が無芖されるのはなぜですか



バヌゞョン管理パッケヌゞが無芖されるのはなぜですか あなたはただあなたの゜リュヌションが奜きですか Goを䜿甚すればするほど、この瞬間は蚀語のアキレス腱を思い出させたす。 ゜フトりェアは数十幎前から存圚し、その開発は継続的な進化です。 Goのむンポヌトシステムでは、バヌゞョンたたは「ヒント」を指定できたせん。「go get」コマンドでもこれは蚱可されたせんただし、䞀般的なバヌゞョン管理システムはすべおサポヌトされたす。gopkg.inなどのさたざたなハックが発明されたした。 たた、他の蚀語のパッケヌゞマネヌゞャヌがこの問題を倚かれ少なかれ゚レガントな方法で既に解決しおいるため、問題が䜕であるかは明確ではありたせん...



Donovan Goは倧きなプログラムを䜜成するために蚭蚈されたものであり、このコンテキストではバヌゞョン管理が難しいこずはよく知られおいたす。



箄10幎前、Googleはアセンブリシステムにバヌゞョン管理を導入する実隓を行いたしたRob Pikeなどによっお蚭蚈されたした。 ダむダモンドの䟝存関係の問題が原因で倱敗したした。これは、倚くの人が叀兞的なバヌゞョン番号の問題だず聞いおいるず思いたす。 4぀のパッケヌゞA、B、C、Dがあり、AはBずCに䟝存し、BずCは䞡方ずもDに䟝存するずしたす。これはdiamond䟝存関係です。 著者BがパッケヌゞDのバヌゞョン1のみが適切であり、著者Cが少なくずも同じパッケヌゞDのバヌゞョン2を必芁ずする堎合、䞍可胜な䞀連の制限が適甚されたす。 運がよければ、「叀い」ず「新しい」の䞡方のバヌゞョンのDでAを「ビルド」できたすが、倚くの堎合、動䜜したせん。 この実隓の埌、Googleは自動バヌゞョン管理に二床ず手を加えたせんでした。



珟圚のバヌゞョン管理の方法はシンプルですが「手動」です。パッケヌゞの各バヌゞョンを独自の名前「D1」、「D2」などを持぀独立した゚ンティティずしお取埗し、理想的には各パッケヌゞのバヌゞョン数を制限したす-に。 そのため、Googleではバヌゞョン管理が優先事項ではありたせん。



しかし、この8月、倚䜜のDave CheneyがGoのパッケヌゞのバヌゞョン管理スキヌムを提案したため、このアむデアが将来発展する可胜性がありたす。



Goでの゚ラヌ凊理



Goは、他の蚀語の゚ラヌを凊理する非垞に異なる方法です。 倧芏暡アプリケヌションのコンテキストにおけるJavaず比范した、このアプロヌチの長所ず短所に぀いお教えおください。



Kernighan 党䜓ずしお、Goは明瀺的な゚ラヌ凊理を匷く掚奚したす。 暙準ラむブラリの関数はほずんどすべお、関数の倀ずずもに゚ラヌステヌタスを返したす。コヌドはこのステヌタスを䜿甚しお䜕らかの凊理を行う必芁がありたす。 ゚ラヌを無芖するこずはできたせん。 この点で、GoはJavaに䌌おおり、゚ラヌをキャッチたたはスロヌする必芁がありたす。 ただ䜕もするこずはできたせん。 はい、これは小さなワンタむムプログラムの堎合は䞍䟿ですが、倧きなプログラムの堎合は本圓の救いです。 そしお、これらの蚀語はどちらも「正しいこず」を行い、それぞれ独自の方法で行いたす。



それらの違いは、䟋倖の䜿甚です。 Goには䟋倖メカニズムがないため、すべおの゚ラヌを1か所で凊理する盎接的な方法はありたせん。Javaのtry/catch



では可胜ですが、 defer



ぱラヌ凊理の堎所を「修正」するのに圹立ちたす。 これはすべお、Javaコヌドをもう少しコンパクトにするこずができるこずを意味したすこれに関しおのみです。しかし、おそらく、䜕が間違っおいたかに぀いお正確な情報を提䟛できないずいう犠牲を払っおいたす。



Goの本では、゚ラヌ凊理のトピックに倚くのスペヌスが割り圓おられおいたす。 ほずんどの䟋では、゚ラヌを無芖するのではなく、適切に゚ラヌを凊理する方法を瀺したした。これにより、結果の䟋が少し長くなりたした。



Donovan 私はたくさんのJavaコヌドを曞きたしたが、私の経隓では、「良い」゚ラヌ凊理は䞡方の蚀語で等しく困難です。 ただし、Goを䜿甚するず、゚ラヌを新しい情報で補足するかどうかに関係なく、ほが同じコヌドを蚘述する必芁があるため、スロヌするずきに゚ラヌメッセヌゞを補足する構文䞊のコストが削枛されたす。 察照的に、Javaはtry/catch/throw



ブロックを曞くこずを避けたいtry/catch/throw



思うので、プログラマはあたりにも頻繁に゚ラヌをスロヌしたす。 蚀語の䜿甚における小さな違いに぀いおのそのような実際的な知識が、仕様を読むこずから決しお収集できないこずは面癜いです。



フィットメントゎヌ



Goの䜿甚を掚奚するたたは掚奚しないシナリオずプロゞェクトはどれですか



Kernighan Goは非垞に優れた汎甚蚀語であり、新しいタスクにGoを䜿甚するこずに障害はありたせん。 ネットワヌキングや他の競合タスクを䌎うプログラムで最もよく芋られるようです。 ゎルヌチンは非垞に䟿利で効果的なものですが、この蚀語はたた、メモリを共有するためのより䌝統的なアプロヌチをうたくサポヌトしおいたす。 実践では、Goのようなネットワヌクで䜜業するための新しいコヌドを曞く人がいるこずが瀺されおいたす。 個人的には、以前はC、Java、たたはC ++に頌っおいたタスクのいずれにも䜿甚したす。



たた、Goはスクリプト蚀語ずしおの認識を獲埗し、倧芏暡なPythonスクリプトの朜圚的な代替品になりたした。 これは少し驚くかもしれたせん。スクリプト蚀語は、高速で動䜜する必芁があるずきに、急いで䜕かをすばやく「投げる」ために非垞に䟿利だからです。 「スロヌむン」コヌドが型゚ラヌや、静的に型付けされた蚀語でもっず早く怜出された可胜性のある他の゚ラヌで萜ち始めるず、問題は埌で起こりたす。 Goは、1行の行をAwkに眮き換えたせん。10行たたは100行のプログラムのPython、Perl、たたはRubyを眮き換えたせんが、タスクが少し倧きく、より深刻になるず、型の安党性ず効率の組み合わせには確かに少し倚くの䜜業がかかりたす。



Goを䜿甚する理由



ガベヌゞコレクタヌ、耇数ディスパッチ、Common Lispなどの高レベル蚀語での極端な抜象化、およびAdaやHaskellなどの䜎レベル蚀語でのセキュリティ、コンパむル段階での゚ラヌ怜出、可読性ず速床を愛する私のような人にずっおリストされおいる2皮類の蚀語ず比范しお、Goを䜿甚する利点は䜕ですか Goは本圓に䜕をもたらしたすか



Kernighan 実際、Adaず特にHaskellは䜎レベル蚀語ずあたり䌌おいたせん。たた、Haskellは通垞初心者には手の届かないずころにありたす。 しかし、申し分なく、それはすべおのピッキングです。 Goには、垌望する品質の䞡方のリストに蚘茉されおいるすべおのものがありたすもちろん、私の声明の劥圓性は批刀される可胜性がありたす-「 極端な抜象化 」の意味に䟝存したすが、䟿利で効率的な方法で䞊行性も提䟛したす。フォヌム; いく぀かの皮類のアプリケヌションでは、これは深刻な利益をもたらしたす。



Donovan Goは、Common Lisp、C ++、Java、Pythonなどの蚀語に比べお非垞にシンプルに芋えたす。 マクロ、テンプレヌト、クラスロヌダヌClassLoader、メタクラスはありたせん。 これらの機胜-これは、PLオタクのように、新しい蚀語で最初のプログラムを楜しく曞くずきに急いで遊びたすが、倧芏暡に移行した堎合にのみ意味はありたせん。 C ++ STL、Lispの非衛生マクロ、たたはPythonの__call__メ゜ッドの過剰な䜿甚のデバッグに費やしたかなりの数日間の䞍愉快な日々を思い出すこずができたす。 Goの蚭蚈では、各問題を解決するためにお気に入りの「濁った」蚀語機胜をグルヌプ内で䜿甚するこずよりも、倧きなコヌドベヌスの単玔さ、均䞀性、認識がチヌム党䜓にずっおより䟡倀があるず芏定しおいたす。



朜圚的な行く



Goには、珟実の䞖界でどのような深刻な可胜性がありたすか ApacheやPHP、Python、Rubyなどの既存のオヌプン゜ヌスWebスタックを眮き換える䞊で、Goの可胜性をどのように芋おいたすか



Kernighan 神が宇宙を創造するのに6日間しかかからなかった理由は、圌が以前の遺産に察凊する必芁がなかったからです。 珟実的に蚀うず、どのプログラミング蚀語も、倧きなコヌドベヌスを完党に眮き換えるこずはできたせん。 Goは、倚くの堎合、新しいプロゞェクトや、ずにかく既存のシステムを曞き盎す予定の堎所に適しおいたす。 さらに、倖郚関数むンタヌフェヌス、特にCラむブラリを介しお既存のコヌドに䟿利なむンタヌフェヌスを提䟛できたすが、他の人のコヌドベヌス党䜓を倧芏暡に眮き換えるこずは考えにくいです。



ドノバン Goが別の蚀語やラむブラリを取り陀くのを助ける可胜性は䜎いずブラむアンに同意したすが、それは決しお圌の目暙ではありたせんでした。 むしろ、Goは魅力的な代替手段です。 Goの人気の倧郚分は、暙準ラむブラリコンポヌネントよりもわずか数個のツヌルを䜿甚しお䟿利なWebサヌバヌやその他の分散システムを簡単に䜜成できるこずにありたす。 暙準ラむブラリは最近䜜成され、さたざたなシステムを䜜成する専門家が関䞎しおいたした。そのため、アプリケヌションの開発の最初のステップにはApacheなどのサヌドパヌティサヌバヌやRailsなどのフレヌムワヌクは必芁ありたせん-もちろん、Goにも同様のフレヌムワヌクが存圚したすが。



Goの公匏IDE



Go甚の公匏のクロスプラットフォヌムIDEが開発されおいたすか 経隓から、倧衆の間での蚀語の適応は、Googleが提䟛するAndroid Studio IDEなど、すばやく簡単に䜿甚を開始できる特定のツヌルセットによっお倧幅に加速できるこずが瀺されおいたす。 Goの予定はありたすか



ずころで、GUIに぀いおはどうでしょうか。C++を「降りお」、むンタヌフェヌスを備えた生産的なデスクトップアプリケヌションを開発する機䌚がようやく埗られるのはい぀でしょうか。



Donovan 良いIDEはGoを詊しおみたい新しい人々を匕き付けるのに有利に働くこずに同意したすが、私の同僚ず私は埐々にVimやEmacsのような非垞に䌝統的な゚ディタヌを䜿甚するこずに気付きたした。 、厇高なテキスト、そしおAcmeでさえ、ほずんどの人がIDEずしお考えるものではありたせん。 泚目すべきむニシアチブはJetBrainsからのもので、今幎はIntelliJ IDEAでGoプラグむンを開発するチヌムを結成したした。これにより、誰でもGoで曞かれたプログラムを他の蚀語ず同じくらい簡単に構築、テスト、デバッグ、リファクタリングできたす。



GUIのクロスプラットフォヌムラむブラリに぀いおは、 GXUIやShinyのような興味深い実隓が既に行われおいたすが、暙準的な゜リュヌションはただ存圚しおいたせん。



GoはJavaを眮き換える必芁がありたすか



GoはAndroidの開発プラットフォヌム/蚀語ずしおJavaを眮き換える必芁がありたすか



Donovan GoogleのGo開発者は、Goを䜿甚しおAndroidおよびiOS甚のアプリケヌションを䜜成できるように積極的に取り組んでいたす。 興味があれば、GopherCon 2015でHana KimGoogleの講挔をご芧ください 。 しかし今、これは単なる実隓であるため、Brownが前述したように、Goの目暙は既存の倧芏暡なコヌドベヌスを眮き換えるこずではありたせん。



安党なパフォヌマンス



Gnu + LinuxツヌルチェヌンをGoに曞き換えるず、Cが䜕十幎も提䟛できなかったセキュリティを提䟛できたすBASHずOpenSSLの最近のバグを意味したす。 そのような劎力のわずかな郚分でさえ、Androidのセキュリティを远加したす。 1.5のパフォヌマンスずラむブラリのロヌドは、実行可胜ファむルのサむズを小さくするのに圹立ちたす。 Linuxベヌスの再構築に関心のある動きはありたすか



Donovan Goは、蚀語にランタむムセキュリティず簡単なシステムコヌルむンタヌフェむスがあるため、たたコヌドが迅速に実行されお効率的に動䜜する静的な実行可胜ファむルにコンパむルされるため、この皮のナヌティリティに適しおいたす。 ただし、ここでも移怍性に぀いお心配する必芁がありたす.Goプログラム自䜓は簡単に移怍できたすが、Goランタむムは少数の重芁なタヌゲットプラットフォヌム甚にのみ蚭蚈されおおり、その数はgccおよびglibcのサポヌトよりもはるかに小さくなっおいたす。



私はそのようなプロゞェクトを知りたせん。



tEoPS



プログラミングの方法を孊ぶ方法に぀いおは倚くの本が曞かれおいたすが、プログラミングの方法に぀いお語るのはほんのわずかです。 ブラむアン、あなたの本「プログラミングスタむルの芁玠」は本圓に叀兞的ですが、私の孊生は䟋を読むのに苊劎しおいたすFortran 66ずPL / Iに぀いおです。 それらを曎新する垌望はありたすか、たたはおそらく別の本がありたすか



Kernighan Bill Plagerず私がThe Programming of Programming Styleで䜿甚した蚀語は、長い間䜿甚されおいないPL / 1か、匷く進化しおいるFortranため、今日の本のコヌドはほずんど読みにくいですが、ほずんどのルヌルは優れおいたすスタむルはただ有効です。 ビルず私は䞀床にCの本のバヌゞョンを曞いたが、物事は遠くたで行かなかった。 問題の1぀は、ルヌルの䟋を芋぀けるこずが難しいこずでした。 もう1぀の問題は、実際のプログラムが以前よりもはるかに倧きく耇雑になっおいるこずです。そのため、そのような本で䜿甚できるコヌドフラグメントを芋぀けお遞択するこずは非垞に困難です。 したがっお、この本が曎新されるこずはほずんどありたせん。



他の本に関しおは、Josh BlochずScott MeyersがそれぞれJavaずC ++で優れたコヌドを蚘述する方法に関する優れた本を曞いおいたす。 もっず広く蚀えば、私は垞にSteve McConnellのPerfect Codeが奜きで、毎幎Fred BrooksのMythical Man-Monthを読んで圌を新鮮な目で芋たした。 読む䟡倀のある本のリストはこれに限定されたせん。 特定の環境やプログラミング蚀語に関する䜜品を読んでみおください。



今日の䞖界のC䜍



䌝説によるず、C蚀語はオペレヌティングシステムの開発甚に䜜成されたした。 時間が経぀に぀れお、C ++は「倧芏暡」プラットフォヌム甚のOS開発ツヌルずしお眮き換えられ、前身の組み蟌みシステム最倧8ビットプロセッサを䜿甚し、256バむトのメモリを必芁ずするものず「倧芏暡」システムのドラむバヌのみを残したした。 Cにずっお、今日の蚭蚈䞊の決定Cずしお合理的ず思われるものは䜕ですかたた、珟圚のタスクに合わせお䜕を倉曎するのですか



Kernighan 芚えおおいおください-蚀語CはDennis Ritchieの仕事の成果です。 私は圌ず䞀緒に本を曞いたばかりだず断蚀したす。 デニスは優れた䜜家であり、プログラマヌほど悪くはありたせんでした。



これらすべおにより、Cは組み蟌みシステムずドラむバヌのプログラミングで非垞に人気があり、効率が重芁であり、ハヌドりェアレベルたで䞋がるこずができたす。 蚀語の利点の1぀は比范的安定しおいるこずであるため、今日Cを倉曎する詊みは非生産的な゜リュヌションになるず思いたす。 真剣に、//を䜿甚したコメントのような小さな機胜を陀いお、ほずんどのプログラマヌは1988 ISO暙準で提瀺された圢匏でCを䜿甚するずいう疑いがありたす確認するこずはありたせん。 C99ずC11の暙準は、プログラマの日垞業務であたり倉化したせん。



本を曞く動機。



私は興味がありたす-なぜGoに぀いおの非垞に倚くの本が存圚するのに、もう1぀必芁なのですか 「Goプログラミング蚀語」は「Go Programming Blueprints」や「Go in Action」ずどのように異なりたすか。実際には同じ目次を持っおいたすか 別の本の意味は䜕ですか-別の「Cプログラミング蚀語」を手に入れたいのですが、Golangに぀いおですか



Kernighan 䌝道の曞12:12で述べたように、「たくさんの本を䜜るのに終わりはありたせん」。別の本の必芁性に぀いおのあなたの質問は非垞に叀い話題であるずあなたにほのめかしたす。



誰かが本を曞くずき、圌は垞に圌が前任者よりも「より良い」成功するこずを信じおいたすたたは少なくずも心から期埅しおいたす-私は吊定的なこずを意味するのではなく、新しい本の組織が、䟋、説明、および蚘述スタむルは、読者がこの本を圹に立぀ず思うようなものです。 これは、アランず私がGoプログラミング蚀語で達成しようずしたこずです。 Cに関する私の本ず同じくらい有甚であるこずが刀明した堎合、それは玠晎らしいこずですが、そのような成功を目指したせん。



囲aboutに関する既存の本をいく぀か芋ただけでしたそしお、これらはあなたがリストした本ではありたせんでしたが、実際には、アランず私は意識的にそれらを読たないこずに決めたした-私たちが自分の本に取り組むために座っおすぐに芋出しを芋さえしたせんでした、他の著者から無意識に䜕かを借りたくなかったからです。



Donovan 私にずっおの動機は、Goを孊び始めたずきに読みたい本を曞くこずでした。これは、蚀語ずそのラむブラリだけでなく、蚀語蚭蚈の原理を明らかにし、その高床な機胜を探求し、兞型的なトラップ、および蚀語自䜓のスタむルず矎孊も反映しおいたす。



KRずの比范はそれ自䜓を瀺唆しおいたす-同じくらい圱響力のある別の技術曞は知りたせん。 これは、むンタヌネット䞖代以前の最も重芁な蚀語の教育ガむドであるだけでなく、その蚀語ぞの参照であり、その仕様の事実䞊のものでした。 今日、もちろん、Go Tour、Godoc、およびThe Go Language Specificationが提䟛されおいたす。これらはすべお、携垯電話から盎接利甚できたす。 ラむブラリはより倧きく、ナヌティリティはより重芁です。 蚀語に関する珟代の本は完党に異なるものに焊点を圓おおいるはずであるこずが刀明したので、私たちはそれがすべお䞀緒に収たる方法を詊したした。



All Articles