TIOBE Programming Community Index

とりあえずcurlはランキング100位以内には入ってました。
健闘してると受け止めるべき?

The Next 50 Programming Languages

The following list of languages denotes #51 to #100. Since the differences are relatively small, the programming languages are only listed (in alphabetical order).

* ABC, Algol, Alpha, APL, Applescript, AspectJ, Beta, Boo, Caml, cg, Clean, Csh, cT, Curl, DC, Dylan, Eiffel, Euphoria, F#, Felix, Icon, Inform, Io, Limbo, MAD, Magic, Maple, Mathematica, Modula-2, MOO, MUMPS, Oberon, Occam, Oz, Pike, PILOT, Postscript, Powerbuilder, PowerShell, Progress, Q, R, REALbasic, Rebol, S-lang, Scala, SIGNAL, SPSS, VHDL, XSLT

今年のBest RIA PlatformはCurl(テクノロジー・オブ・ザ・イヤー/InfoWorld)

アメリカの有力なIT系メディアInfoWorldの2008年テクノロジー・オブ・ザ・イヤーが発表され、Best Rich Internet Applications PlatformにCurlが選ばれました。

http://www.infoworld.com/slideshow/2008/01/143-2008_technology-2.html

Curl 5.0 is an industrial-strength RIA platform, boasting not only the key attributes of every successful RIA -- Web-enabled, lightweight, and a rich interface -- but additional characteristics that make it suitable for enterprise use. These include excellent performance, strong graphics support, and good data handling. Curl applications can handle intermittent connectivity, support large data sets, run securely, and present complex user interfaces gracefully.

Curlは昨年4月からアメリカのマーケットに対して活動を再開しています。
InfoWorld誌は8月にCurl5.0のプロダクトレビュー記事を発表し、8.6という高評価をつけていました。

ちなみに現在は6.0がCurlの最新バージョンです。

def構文でよりlightweightになるプログラミング

今回は6.0で追加された def 構文を紹介します。
6.0の数ある新機能の中では地味な部類に入るかもしれませんが、プログラマ的(個人的)には最も注目に値する新仕様です。


defは定数を宣言するときに使います。
従来でも定数は let constant で宣言することができましたが、def構文の新しい(素晴らしい)ところは定数の型宣言を省略できることです。つまり今まで、

let constant cb:CommandButton = {CommandButton}
let constant s:String = "foo"

と書いていたところを

def cb = {CommandButton}
def s = "foo"

のように書けるようになります。

実は curl は動的型付けのプログラミングスタイルもサポートしているので、let 文でも型宣言は従来から省略が可能でした。

let cb = {CommandButton}
let s = "foo"

しかし上記のように let で型宣言を省略した場合、変数は any 型として扱われ、コンパイラによる型チェックが行われません。一方、def で宣言した定数には初期値(右辺の式)のコンパイル時型が割り当てられます。静的型付けの恩恵を受けつつ型宣言を省略でき、プログラミングがとてもお手軽になった印象です。


def で宣言できるのは定数だけなので使えるケースは限られるように思われるかもしれませんが、しばらく6.0でプログラミングをしてみて思った感想は「意外に多用する」というものです。これまでは、いかに constant の記述を怠って変数ばっかり使っていたのか思い知らされました。(汗

def のおかげでコードの記述量が削減されただけでなく、必要がない限り let を使わなくなるため、意図しない変数の上書きを予防できるようにもなって一石二鳥な面もありました。


最後に、def を使うともっとも効果的なケースを紹介します。それは、匿名プロシージャ*1を変数で受けるケースです。
curlはプロシージャの型を、引数の種類*2と型、戻り値の型の組み合わせで区別するため、非常に厳格な型チェックを行ってくれる反面、型の記述が煩わしいという問題がありました。例えば、String型の位置引数をふたつ取り、bool型の戻り値を持つプロシージャの型は

{proc-type {String, String}:bool}

と書きます。
curlのヘルプドキュメントでも、この記法の複雑さを自覚してか、型宣言を省略して any 型の変数で受けちゃうのもアリだよ的な説明が載っていますが*3、定数でよいのであれば def 構文を使用するに限ります。

def p =
    {proc {s1:String, s2:String}:bool
        || snip
    }
{type-of p} == {proc-type {String, String}:bool} || ==> true

ちゃんとプロシージャ型も正しく割り当てられます。

*1:curlではクロージャをこう呼びます

*2:位置引数、キーワード引数、残余引数

*3:Curl開発者ガイド > 基本概念 - 構文 > プロシージャと引数 > 匿名プロシージャ > 匿名プロシージャでの any データ型の使用

スタイルコントロール

6.0から追加されたスタイルコントロールライブラリを使うと、Curlのコントロールに"スキン"を適用したり、CSSライクな方法でプロパティを管理できるようになります。

以下は、従来のCurlコントロールを並べたイメージ。


スタイルコントロールライブラリにはデフォルトのスタイルが含まれており、それを使うだけで上記コントロールの外観が↓のようになってしまいます。


使い方は以下の通り。

ライブラリのダウンロード

スタイルコントロールライブラリをCurlのWebサイト(http://www.curl.com/developer/libraries/ja/styled-controls/style-library-intro.php)からダウンロードします。
「COM.CURL.GUI.STYLED-6.0-ja.zip」というzipファイルをダウンロードしたら、解凍して任意のフォルダに保存してください。

プロジェクトに追加

スタイルコントロールを使用したいIDEプロジェクトに、ライブラリのマニフェストへのデリゲートを追加します。
IDEのメニューから「プロジェクト→デリゲート先の追加」を選択し、出てくるダイアログで先ほど解答したファイルに含まれる manifest.mcurl を選択すればOKです。
プロジェクトに COM.CURL.GUI.STYLED という名前のマニフェストへのデリゲートが追加されます。

パッケージのインポート

アプレットからスタイルコントロールのパッケージをインポートします。

{import * from COM.CURL.GUI.STYLED-CONTROLS}
install-style-sheetの呼び出し

インポートしたパッケージに含まれるスタイルシートインストール用のプロシージャを呼び出します。

{install-style-sheet {manifest-url "file", "DEFAULT-STYLE-SHEET"}}

引数で指定されているのはダウンロードしたライブラリに含まれるデフォルトのスタイルシートです。
あとは従来と同じようにCurlのコントロールを使って画面を構築できます。

ドキュメントのインストール(任意)

ダウンロードしたライブラリには開発者向けドキュメント(日本語!)が含まれています。
IDEのメニューから「ヘルプ→ドキュメンテーションのインストール」で、先ほどデリゲートしたのと同様のマニフェスト(manifest.mcurl)を選択すればインストールできます。
ヘルプドキュメントの左側の目次ペインに COM.CURL.GUI.STYLED.6.0 という項目が追加されます。


スタイルコントロールを始めるだけであれば以上のようにとても簡単なのでみなさん是非試してみてください。

Curl6.0日本語版のダウンロード提供開始

やっと公開されました。

株式会社カールは、2007年12月6日から、Curl Ver. 6.0向けRTE(ランタイム)とIDE(開発統合環境)の日本語版を提供開始いたしました。

無償版の IDECurl/Personal IDE から Curl IDE へと名前を変えて、以下のページからダウンロードできるようになっています。


ちなみにランタイムだけインストールしたい方はこちら。

Curlのスコープ

ここでいきなり問題。以下のコードは何をalertするでしょうか?

(function(){
  var i = -1;
  for(var i = 0; i < 10; i++){
    /* whatever */
  }
  alert(i);
})()

これが-1でないのは、Perl Mongerにはびっくりです。

たぶんCurlerにもびっくり?
Curlだったら当然-1ですね。

{value
   let i = -1
   {for i = 0 below 10 do
   }
   i || -1
}


実行可能サンプルはこちら↓(※curlランタイムが必要)


別にdankogaiのページにトラックバックしたかっただけとか、前回作ったばっかのGoogleガジェット使いたかっただけのブログでは決してありません。

それにしてもcurlシンタックスハイライト対応してほしいなぁ。。こういうのどこに頼めばいいんだろう。

ブラウザ上でCurlプログラミングを試せるGoogleガジェット

はてなダイアリーにGoogleガジェットを埋め込めるということを知って早速チャレンジ。curlのplaypenを表示するガジェットです。

以下のボックスのcurlコードは自由に編集可能で、「実行」ボタンを押してその場で実行結果を確認できます。(※curlランタイムが必要です。ここからダウンロードしてください)


Googleガジェット勉強しながらの試作品なのでまだまだ微妙なところがあるかもしれませんが、iGoogle使ってる方はご自由に登録してください。
ちなみにつっこみが入る前に告白しておくと、このガジェットは、Developer Communityサイト上のアプレットをちょっと拝借して走らせています。個人的にサーバライセンスを持ってないので。。

なお、本格的にプログラミングをするのであればIDEを使った方が断然便利です。無償版のIDEここからダウンロードできます。