Googleの新しいプログラミング言語Dartが発表された #dart

Googleの新しいプログラミング言語Dartがgoto;カンファレンスで発表されました。
公式ページは、http://www.dartlang.org/です。ソースコードはGoogle Codeにあります。
以下、Dart公式サイトの技術概要ページより引用および意訳
———-
技術概要
Dartは、構造化されたWebアプリケーションを作成するための新たなクラスベースのプログラミング言語です。シンプルさ、効率性、およびスケーラビリティを目標に開発されました。Dartは明らかで、読みやすい構文を言語構造に持つ強力な新しい言語機能を兼ね備えています。
主な機能
クラス
クラスとインタフェースは、効率的なAPIを定義するための十分なメカニズムを提供します。これらの構造は、メソッドおよびデータのカプセル化と再利用を可能にします。
オプションの型
Dartのプログラマは、必要に応じてコードに静的な型を追加できます。プログラマーはアプリケーション開発中のいつのタイミングでも型を追加できます。型のない実験プロトタイプから型でモジュール化された完成品に簡単に移行することができます。型がプログラマの意図を語るので、プログラムの説明を少ないドキュメントで行えます。また、型チェックツールはデバッグに役立ちます。
ライブラリ
開発者は、実行時に変更されないことが保証されているライブラリを作成して使用できます。独立して開発されたコードは、共有ライブラリに依存することができます。
ツール
Dartは、実行環境、ライブラリ、および言語をサポートするために構築された開発ツールの豊富なセットが含まれます。これらのツールは、「変更ーデバッグ」という生産的で動的な開発スタイルを可能にします。
デザイン目標
初期のDartのプログラミング言語をここに提示します。次の設計目標は、このオープンソースプロジェクトの継続的な進化と洗練の過程で明らかになります。
- Web用の柔軟な構造化プログラミング言語を作る
- プログラマーがDartに自然で親しみを感じられ、学習するのが容易なように作る
- 確実に、高性能で速いアプリケーション開発ができるような言語構造にする
- ウェブにアクセスできるすべてのデバイス向け(携帯電話、タブレット、PC、サーバー)に作る
- Dartは、主要な現代的なすべてのブラウザで高速に動作させるツールを提供する
これらの設計目標は、現在のWeb開発者が直面する以下の問題を解決します。
- 小さなスクリプトは、しばしば明白な構造のない大きなウェブアプリケーションへ発展します。それらはデバッグするのが難しく、維持するのが難しいです。さらに、異なるチームがそれらに独立して作業できるように、分割することができません。ウェブアプリケーションが大きくなった場合、生産性を確保するのは難しいです。
- その軽量性、迅速なコードを書くためにそれを容易にするためのスクリプト言語は人気があります。一般に、アプリケーションの他の部分との契約は、言語構造自体ではなくコメントの中で伝えられます。その結果、コードの一部だけを読んでメンテすることは、直接の開発者以外に困難です。
- 既存の言語で、開発者は、静的と動的言語の間で選択を迫られている。伝統的な静的言語では、ヘビー級ツールチェーンと柔軟性がなく、過度に制約を感じることができるコーディングスタイルが必要です。
- 開発者は、Node.jsとGoogle Web Toolkit(GWT)のようないくつかのケースを除いて、クライアントとサーバの両方を含む均質なシステムを作成することができていない。
- 異なる言語やフォーマットが面倒なコンテキストスイッチを伴うとコーディングプロセスが複雑になる。
———-
ざっくりと公式サイトを読んで感じたのは、かつてGoogleのエンジニアが発表したJavaVM用の新しいプログラミング言語NOOPに近い匂いがするって事。
ただ、NOOPと違うのはソースリポジトリにかなりのプログラムがコミットされているという点。そこそこ時間が費やされているように感じるが、Go言語に比べるとライブラリが全然無い。Go言語はリリースされた時点でウェブサーバーに必要と思われる各種暗号化処理、ZIPなどの圧縮処理、Json/XML/Base64などのパーサーなど大量のライブラリを抱えていたが、それに比べると必要最低限しか無いように見える。JavaScriptがカバーする(ブラウザ上やNode.js上の)レイヤーに相当するとしても、少なすぎないかな?多言語化ってどうやんのさw
結論
しばらく様子見するか、オープンソースプロジェクトに参加してコミッターになろう!
NoSQLのアレコレ
|
次のプロジェクトで使うデータベースをNoSQLにしてみようと画策中なので調べてみた。NoSQLには大きく分けて以下の4つがあるようだ。
・キーバリューストア(KVS)
・列指向データベース
・ドキュメント指向データベース
・グラフ指向データベース
下の3つは、新しくないし商業的にNoSQLと(言うと売れるので)叫んでるっぽいので無視。
・オブジェクト指向データベース
・XMLデータベース
・グリッドデータベース
KVSと列指向は十分使ってきたので、グラフ指向データベースとドキュメント指向データベースに興味があります。
MongoDB(ドキュメント指向データベース)
Googleトレンドを見るかぎり、ドキュメント指向データベースではApache CouchDBよりも人気があるようなので、MongoDBを調べてみた。(注:グラフ指向データベースは商業製品が多い)
・1オブジェクトの最大サイズは4MB
・オブジェクトにリレーション情報を含める場合、容量の関係から必然的に上限数の設定が必要になってくる。
・パフォーマンス的には、メインのオブジェクトに含めるのが良いが、上記の理由で大量のリレーションを扱うには分離する必要がある
・スケールアウトに必要なプログラムはデフォルトで用意されている
・ハッシュに偏りがある?
・id_以外への検索が遅い。id_以外へのアクセスは、SQLで言うところのLIKEに相当。インデックスは必須
・Shardingが簡単
・ライセンスがビジネスに使いやすい
・DBプログラム本体はAGPLだが、DBにアクセスするドライバーで分離していると本家が主張
・Javaドライバーにバグがある
・コネクションがリークする場合がある
・スレッドが2つ生成される
neo4j(グラフ指向データベース)
Googleトレンドで調べるとグラフ指向データベースではNeo4j以外がランクされないので、これ1択という理解でいる。
・2003年より24時間動作可能な製品となっている
・2000ノードぐらいのグラフでも、MySQLよりも1000倍高速
・データが多くなると、この差はさらに大きくなる
・リレーションへのアクセスが簡単
・友達の友達とかを一発検索!
・基本構成でスケールアウトできない
・ビジネスパッケージではスケールアウト機構が提供されている
・ビジネスパッケージは、AGPLで利用可能なので、オープンソースにするのであれば問題ない。
・有償でクローズド利用可能なライセンスが付与される。ただし、金額は非公開なので怖い
個人的に気になっているのが、
・スケールアウト時の挿入・検索パフォーマンス
・MongoDBで挿入パフォーマンスの劣化があるらしい?
・スケールアウト時にボトルネックが発生しないのか
・neo4jのコスト(ビジネス向けなので高いらしい)
ううむ。やっぱりMongoDBかなぁ。
オススメ本
いつも、いろんな人からオススメの本を教えて下さい!とか本棚にある本を教えて下さい!と言われるのでまとめてみた。
正確には、以前まとめたヤツの更新版です。まぁ、ウシジマくんはネタですw
UIはあれですので、そのうちブクログにでも移行します。

