InfoQ

News

最高の静的型付き言語を確保する

作者 Sadek Drobi, 翻訳者 編集部 投稿日 2008年4月15日 午後6時5分

コミュニティ
Architecture
トピック
設計,
プログラミング
タグ
フレームワーク,
Spring,
Static Analysis,
Guice,
Dependency Injection

動的言語対静的言語の討論に同調して、Debasish Ghosh氏は、静的言語を用いてプログラミングしながら、動的型検査を使用するという問題を提起している。Greenspun's 10th Lawの一般的な法則を思い起こしている。それは「静的に型検査された言語の複雑なプログラムは、動的に型検査された言語のアドホックで、非公式に指定さ れたバグだらけの遅い実装を含んでいる」というものである。

Ghosh氏は、今日ではこれは必ずしもそうとは言い切れないと考えている(source)。たとえばGuice and EasyMockのようなJava総称型は、ランタイム型検査の施行に必要な次善策の回避を可能にすると主張している。

Java総称型を使用すると、これらのフレームワークがランタイム型検査の遅くバグだらけのシミュレーションをを使用して早期に実装される必要のあったケースの時間型検査のコンパイルを可能にする。GuiceとEasyMockが今使用している2つのフレームワークにおいて、総称型の能力を使用して、 並外れたtypesafetyを実装する。

実装をバインドする、コードの一部を見てみる。

Guice Binderを使用したインターフェイスServiceへの SpecialServiceImpl

public class MyModule implements Module {
public void configure(Binder binder) {
        binder.bind(Service.class)
                     .to(SpecialServiceImpl.class)
                     .in(Scopes.SINGLETON);
}
}”

「ServiceとSpecialServiceImpl間の「実装」関係がランタイムの間におこなわれる」ようだとしても、すべての型検査は実際にはコンパイル時におこなわれる。

Guiceのソースコードを見て分かることは、BinderImpl.bind() がBindingBuilderImpl ..を返すということである。

public BindingBuilderImpl bind(Class clazz) {
return bind(Key.get(clazz));

そして、BindingBuilderImpl.to()は、 入力Class - として受け取り、ワイルドカード上の境界が上記の引数の実装関係をコンパイル時間の型検査の一部として実行する。

public ScopedBindingBuilder to(Classextends T> implementation) {
return to(TypeLiteral.get(implementation));
}

Debasish Ghosh氏は、動的型検査を達成しようと試みるより、この種類のソリューションを使用することを主張している。それはGreenspun's10th Lawの回避を可能にするだけでなく、typesafetyを保証しているので、静的型の利点を最適化する。

静的型付き言語でプログラミングをしている場合、適切な言語機能を使用して、コンパイル時にほとんどの型検査をおこなう。実行ボタンを押す前に、型システ ムでコードが適切に形成されていることが確認できる。また容易なリファクタリングおよびコードベースをクリーンにすることができる。

原文はこちらです: http://www.infoq.com/news/2008/04/get-advantages-of-static-typing

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

ジャンル別一覧

ファイルシステムでHello World

この連載では"ファイルシステムの作り方"をご紹介します。第1回目の今回は簡単なイントロダクションと単純なHello Worldファイルシステムの作り方を説明します。次回以降で詳しい解説と本格的なファイルシステムの作り方をご紹介しようと思います。

Guice(ジュース)を早飲みしすぎていませんか?

あなたのチームが、既存アプリケーションを「シングルトンの入れ子」設計から依存性注入(DI)へ移行しようとしているなら、この論文に心引かれるでしょうが、DIへの移行は難しいことが分かっています。論文にはGoogleのJava DIコンテナ(Guice)の名を入れていますが、Javaや.NET、Python、Rubyなどにも当てはまります。

チームがキュービクルと引き換えにコミュニケーションスキルを得る手助けをせよ

アジャイルの「自己組織化チーム」のパラダイムでは、チームのメンバに新しいスキルが要求されます。この記事では、発展しつつあるチームの自己組織化を壊さずに、新たなスキルを伝えるためのいくつかの戦略を提案します。そして、新しいスキルを身につけるのに役立つ資料のありかを提示しています。

F#の土台を越えて - 非同期ワークフロー

今回の記事では、非同期ワークフローと呼ばれるワークフロー機能の面白い使用法を考察しますが、非同期ワークフローは.NETの非同期プログラミングモデルを単純化することを目的としています。

言語としてのアーキテクチャ: ストーリー

アーキテクチャは一般に、Word文書に主として見られるような極めて実体のない、ソフトウェアシステムの概念的な側面であるか、または完全に技術によって駆動されるものかのいずれかです。そのどちらも間違っています。では、どう対処すればよいでしょうか? この記事ではアイデアを説明します、そしてアプローチのキーポイントを要約します。

メタプログラミングを使ってRubyにプロパティを追加する

Werner Schuster氏が、簡単な例を示しながら、Javaのようなプロパティをメタプログラミングを使ってRubyに追加する方法を示します。

BlazeDSとAMFでWebとデスクトップのアプリケーションを構築する

現在のRIAアーキテクチャにおいて、クライアント/サーバーの通信は重要な位置を占めています。本稿では、James WardとShashank TiwariがアドビによるオープンソースのBlazeDSメッセージングサーバーの世界へ飛び込みます。

業務ソフトに手を加えずに暗号化を実現する~秘文の挑戦~

hibun

ウィルス対策ソフトや情報漏えい防止用のソフトは、いわば影の存在です。ユーザの操作性やGUIを工夫する以上に、いかに目立たない存在となるかにその技術を注ぎ込んでいます。ここでは日立ソフトが開発した「秘文」の事例を紹介します。