The Go Blog
Go チームとの対談
Google I/O 2013 で、Go チームの何人かのメンバーが「炉辺談話」を主催しました。ロバート・グリーゼマー、ロブ・パイク、デビッド・サイモンズ、アンドリュー・ゲランド、イアン・ランス・テイラー、サミール・アジマニ、ブラッド・フィッツパトリック、ナイジェル・タオが、Go プロジェクトのさまざまな側面について、聴衆や世界中の人々からの質問に答えました。
昨年も I/O で同様のセッションを開催しました: Go チームに会う。
Google Moderator には、短い40分間のセッションでは答えきれないほどの質問が寄せられました。ここでは、ライブセッションで答えられなかった質問のいくつかにお答えします。
gc ツールチェーンのリンク速度(およびメモリ使用量)は既知の問題です。 1.2 サイクル中にこれに対処する計画はありますか?
ロブ: はい。私たちは常に、言語とライブラリだけでなく、ツールのパフォーマンスを向上させる方法について考えています。
Go が急速に注目を集めていることに非常に満足しています。 Google 社内外の他の開発者と協力して経験した反応について教えていただけますか? まだ大きな問題点は残っていますか?
ロバート: Go を真剣に試した多くの開発者は、Go に非常に満足しています。彼らの多くは、はるかに小さく、読みやすく、したがって保守しやすいコードベースを報告しています。C++ から移行する場合、コードサイズの50%以上の削減は一般的のようです。Python から Go に切り替えた開発者は、例外なくパフォーマンスの向上に喜んでいます。典型的な不満は、言語の小さな不整合についてです(その一部はいつか修正するかもしれません)。驚くべきことに、ジェネリックスの欠如について不満を言う人はほとんどいません。
Go はいつ Android 開発のファーストクラス言語になりますか?
アンドリュー: それは素晴らしいことですが、発表できることは何もありません。
次のバージョンの Go のロードマップはありますか?
アンドリュー: そのような機能ロードマップはありません。貢献者は興味のあることに取り組む傾向があります。活発な開発分野には、gc および gccgo コンパイラ、ガベージコレクタとランタイムなどがあります。エキサイティングな新機能の大部分は、ツールの改善という形で提供されると予想しています。golang-dev メーリングリストで設計に関する議論やコードレビューを見つけることができます。
タイムラインについては、具体的な計画があります。Go 1.2 を2013年12月1日にリリースする予定です。
Go を外部でどのように使ってもらいたいですか? Google 以外の Go 採用にとって大きな成功は何だと思いますか? Go が大きな影響を与える可能性を秘めているのはどのような分野だと思いますか?
ロブ: Go がどこにデプロイされるかは、私たちではなくユーザー次第です。どこでも役立つ場所で Go が注目を集めることを嬉しく思います。サーバーサイドソフトウェアを念頭に置いて設計されており、その分野での可能性を示していますが、他の多くの分野でも強みを発揮しており、物語はまだ始まったばかりです。これから多くの驚きが待っています。
イアン: スタートアップ企業は Go を使いやすいです。なぜなら、彼らは既存のコードベースと連携する必要がないからです。したがって、Go には将来的に2つの大きな成功があると見ています。1つは、Google 以外の既存の大規模ソフトウェア企業による Go の重要な使用です。もう1つは、主に Go を使用するスタートアップ企業の重要な IPO または買収です。これらはどちらも間接的です。明らかに、プログラミング言語の選択は企業の成功において非常に小さな要因です。しかし、Go が成功するソフトウェアシステムの一部になり得ることを示す別の方法となるでしょう。
Go パッケージまたはオブジェクトを動的にロードする可能性と、それが Go でどのように機能するかについて、 (さらに)考えたことはありますか? 特にインターフェースと組み合わせると、 本当に興味深く表現力豊かな構成が可能になると思います。
ロブ: これは活発な議論のトピックです。この概念がどれほど強力であるかを理解しており、そう遠くないうちに実装する方法を見つけられることを願っています。設計アプローチには深刻な課題があり、移植可能にする必要があります。
以前、いくつかの最高級の database/sql ドライバーをより中心的な場所に集めることについて議論がありました。 しかし、それに反対する強い意見を持つ人もいました。 今後1年間で database/sql とそのドライバーはどうなりますか?
ブラッド: データベースドライバーのために公式のサブリポジトリ(「go.db」)を作成することはできますが、それは特定のドライバーを不当に優遇することになると懸念しています。現時点では、異なるドライバー間の健全な競争が続くことを望んでいます。SQLDrivers wiki ページには、優れたドライバーがいくつかリストされています。
database/sql パッケージは、ドライバーの不足によりしばらく注目されていませんでした。ドライバーが存在するようになった今、パッケージの使用が増加し、正当性およびパフォーマンスのバグが報告(および修正)されています。修正は続きますが、database/sql のインターフェースに対する大きな変更は計画されていません。パフォーマンスのため、または一部のドライバーを支援するために、必要に応じて小さな拡張機能がいくつか追加される可能性があります。
バージョン管理の状況はどうですか? GitHub からコードをインポートすることは、Go チームが推奨するベストプラクティスですか? GitHub リポジトリに依存するコードを公開し、 その依存元の API が変更された場合はどうなりますか?
イアン: これはメーリングリストで頻繁に議論されています。社内で行っているのは、インポートされたコードのスナップショットを取り、そのスナップショットを随時更新することです。そうすることで、API が変更されてもコードベースが予期せず壊れることはありません。しかし、そのアプローチが、それ自体がライブラリを提供している人々にとってはあまりうまくいかないことを理解しています。この分野で良い提案があれば歓迎します。これは言語そのものではなく、言語を取り巻くツールの側面であることを忘れないでください。これを修正する場所はツールであり、言語ではありません。
Go とグラフィカルユーザーインターフェースについてはどうですか?
ロブ: これは私の心に近いテーマです。Newsqueak は、非常に初期の先行言語であり、特にグラフィックプログラム(以前はアプリと呼んでいたもの)の作成のために設計されました。状況は大きく変わりましたが、Go の並行性モデルはインタラクティブグラフィックスの分野で多くのものを提供できると思います。
アンドリュー: 既存のグラフィックライブラリの多くのバインディングがあり、Go 固有のプロジェクトもいくつかあります。より有望なものの1つはgo.uikですが、まだ初期段階です。ネイティブアプリケーションを作成するための優れた Go 固有の UI ツールキットには大きな可能性があると思います(チャネルから受信してユーザーイベントを処理することを考えてください)が、製品品質のパッケージを開発するのはかなりの労力です。いずれはできると確信しています。
その間、Web はユーザーインターフェースに最も広く利用できるプラットフォームです。Go は Web アプリの構築を強力にサポートしますが、バックエンドのみです。
メーリングリストで、アダム・ラングレーは TLS コードが 外部グループによってレビューされていないため、 本番環境で使用すべきではないと述べていました。 コードをレビューする計画はありますか? 並行 TLS の優れた安全な実装は非常に望ましいでしょう。
アダム: 暗号技術は、微妙で驚くべき方法で台無しになりやすいことで悪名高く、私は人間でしかありません。Go の TLS コードが完璧であると保証できるとは感じていませんし、それを誤って表現したくありません。
コードにはサイドチャネルの問題があることが知られている箇所がいくつかあります。RSA コードはブラインドされていますが一定時間ではなく、P-224 以外の楕円曲線は一定時間ではなく、Lucky13 攻撃が機能する可能性があります。後者の2つについては、Go 1.2 の期間中に一定時間の P-256 実装と AES-GCM で対処したいと考えています。
しかし、TLS スタックのレビューを行うと名乗り出た人は誰もいませんし、Matasano などに依頼できるかどうかは調査していません。それは Google が資金提供を希望するかどうかによります。
GopherCon 2014 についてどう思いますか? チームの誰かが出席する予定はありますか?
アンドリュー: 非常にエキサイティングです。私たちの中には何人かそこに行くと確信しています。
次の記事: Go と Google Cloud Platform
前の記事: 高度な Go 並行性パターン
ブログインデックス