第1回 Google Go登場の背景
赤坂 けい
チームWordProgress
2009/12/2
突然登場した新しいプログラミング言語「Go」。その独自性、魅力を余すところなく堪能してみよう(編集部)
唐突に登場したGoogle Goにまつわる若干のとまどい
- - PR -
2009年10月末にグーグルが発表した、新プログラミング言語Go(またはgolang)は、速くて軽量な言語である。ただし、「速さ」と「軽量」の意味合いには、少しだけ特殊な意味合いが込められている。
第一に、Goの「速さ」とは、コンパイルの速さという意味合いが強い。また、Goの「軽量」とは、並列処理に対応した言語でありつつも言語仕様が軽いといった意味合いがある。
コンパイルが速く、並列処理の記述が容易で、言語仕様が軽量だという、Goのうたい文句に引き付けられた人は多いだろう。そして何より、世界最大規模のWebサービスを提供しているグーグルが、錚々(そうそう)たるメンバーの名の下に、自社のシステム基盤に近いレイヤを記述するための新言語としてGoを世に送り出したという点から、Goは数多くのプログラマの注目を集めている。
新世代の並列処理言語Google Goをひもとく バックナンバー
だが、実際にGoを試して見た人々からは、戸惑いの声も上がっている。影響を受けたとされているC/C++はもちろんのこと、PHPやPythonやRubyなど既存のメジャー言語のいずれとも少なからぬ相違がある。
例えば、Goの変数宣言は以下のいずれかの方法で行う。
var a uint64 = 1; (1) a := uint64(1); (2)
(1)においては、varが変数宣言であることを明記し、その次に変数名aとその型uint64が記述されている(Goは、C/C++と同じく静的型付け言語である)。そして、イコールの後に初期値1が代入されている。
(2)は、(1)の表記の略記法(シンタクス・シュガー)であり、名称aは、その後の:=という宣言によって、型uint64と初期値1と結び付けられる。
Goに注目している人にとって、こうした記法自体を理解することは難しくないだろう。だが、変数の代入という、ごく基本的なところから新たに覚えなければならないことが生じている。
さらに、Goのifやforなどの制御構造、関数の機能を見ていくと、困惑が広がるかもしれない。Goの制御構造は、互いに競い合い進化した主要言語に比べるとむしろ後退しているかのように思える点がある。
例えば、ifで評価した結果に基づき返り値を変える関数定義(func Fx)は以下のように書かなければならない。
// 返り値ret(int型)を関数宣言内で明記
func Fx(i int) (ret int) {
if i > 0 { ret = i*i } else { ret = 0 }
return;
}
// 入力値iが正の整数の場合iの2乗が、iが0以下の整数の場合0が返される
現状のGoでは、if文内に複数のreturnを書くことができない。そのため、関数宣言時にあらかじめ返り値を明示するなど、既存の言語より「一手間かかってしまう感」がある(*1)。
Goと同じく並列処理指向の新興コンパイル言語として注目を集めているScala(コンパイル言語の中ではもっとも推論機能が充実している言語の1つである)では、ifが値を返す式であるとされ、また、returnを省略できる規則がある(最後に評価された式が関数の返り値となる)ため、同様の関数定義(def Fx)は以下のように書くことができる。
def Fx(i:Int) = if (i > 0) i*i else 0
※ここでは、戻り値となるi*iと0の双方が整数であるため、関数Fxの戻り値は自動的にInt型であると推測される
お詫びと訂正(2009年12月24日)
連載公開時、「現状のGoでは、関数内に複数のreturnを書くことができない」との記述を行いましたが、こちらは、「現状のGoでは、if文内に複数のreturnを書くことができない」の誤りでした。申し訳ございませんでした(ご指摘いただいた方、ありがとうございました)
いまどきのプログラミング言語では、プログラマの負担を減らすため、処理系にとって自明のことは省略してもよい推論機能を持つことが多くなっている。
Goでは、こうした推論機能は充実しておらず、むしろプログラマに構文要素を「明示すること(explicit)」を求める。むろん、Goは登場したばかりの言語であり、Google自身も、「実験的(experimental)」と位置付けている言語である。そのため、将来的には、言語機能が充実すると共に、よりこなれた記述法が許されるようになっていくことは期待できる。
しかし、いまどきのプログラミング言語のトレンドからいささか外れたように思える言語を、Googleがこのタイミングでリリースしたことへの疑問は残る。
プログラミング言語を熱心に追いかけているブロガーやGoのメーリングリスト参加者の間では、Cの後継を文字どおり目指しているコンパイル言語Dや、Google App Engineで用いられているスクリプト言語であるPythonなどにもっと近い文法を持つプログラミング言語が登場して欲しかったといった声も上がっている。
1/2 |
| Index | |
| Google Go登場の背景 | |
| Page1 唐突に登場したGoogle Goにまつわる若干のとまどい |
|
| Page2 Goの実行系から見えてくる魅力 Goを学ぼう |
|
| 新世代の並列処理言語Google Goをひもとく |
| Coding Edgeお勧め記事 |
| いまさらアルゴリズムを学ぶ意味 コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう |
|
| Zope 3の魅力に迫る Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? |
|
| 貧弱環境プログラミングのススメ 柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? |
|
| Haskellプログラミングの楽しみ方 のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう |
|
| ちょっと変わったLisp入門 Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう |
|
- PHPでGAE上に社員検索アプリを作る (2010/3/18)
GAEの制約により使うことができなかったテンプレートエンジン。PHP4GではSmartyが使えるようになった - 構造体の便利な用途、インターフェイス入門 (2010/3/10)
継承機能を排除したインターフェイス機能でダックタイピングが可能となった。サンプルで確かめてみよう - プライベートモードの履歴状態 (2010/3/1)
仕事に集中できるときと、なかなかできないとき、ありますよね。状態遷移図で考えてみよう - Goのswitch文で解くFizzBuzzと構造体のイントロ (2010/2/25)
Goではif文と同等の制御構造をswitch文で表現できる。試してみよう
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







