Curl 6.0 リリース

Curlのバージョン6.0が発表されました。

Curl Ver 6.0の主要機能

• スキンパッケージ − この新しい外観のコントロールオプションは、陰影、カスタムイメージ、傾き、角の丸みなどを提供します。さらに、Curl Ver 6.0では、定義済みのスタイルシートやスキンを使ってCurlアプリケーションの外観を瞬時に洗練された様式に変更することができます。

• 進化したレンダリングAPICurl Ver 6.0は、アンチエイリアス処理やアルファブレンディング等の高度な機能を提供します。

• Ajaxとの相互運用性 − CurlアプリケーションはWebページ内のJavaScript APIの呼び出しやJavaScriptからCurlをコントロールすることができます。さらに、JSONフォーマットの解析やデータストリームの作成も含まれます。これらの機能を用いて、Curlは既存のJavaScript APIを利用したデータアクセスを含むマッシュアップを構築することができます。

• サーバとの相互運用性 − Curlは、サーバ用のJavaパッケージを提供し、Curl serialization formatを使ってサーバから取得したデータにアクセスできます。


まだ正式版のダウンロードは開始されていませんが、30日以内が予定されているそうです。(代わりに公式ベータ版がこちらからダウンロードできます)


これからブログで6.0の新機能をどんどん紹介していきます。お楽しみに!

Javaプログラマのための5つのCurl基本構文

今回はCurlプログラムの基本的な構文のうち、Javaと比べて比較的特徴的なシンタックスの構文を5つ紹介します。JavaプログラマでこれからCurlを覚えようという方は、まずこれを読んでからCurlの学習を始めてください!

1. Hello, world!

いきなり最初に構文じゃないところから始めてしまいますが、まずはHello, world!の書き方。

まずはJavaから

public class Hello {
	public static void main(String[] args) {
		System.out.println("Hello, world!");
	}
}

標準出力に文字列の"Hello, world!"を出力します。

次にCurlCurlは標準出力ではなくブラウザに表示する例にします。

{curl 5.0 applet}
Hello, world!

最初の {curl 5.0 applet} はアプレットの先頭に必ず必要になる宣言*1で、Hello, world! はその直後にそのまま記述します。Curlアプレットのトップレベルに記述されたテキストはそのまま表示されます。

2. コメント

CurlJavaと同様に行末コメントとブロックコメントを記述するための構文があります。

// Javaの行末コメント
/* Javaのブロックコメント */
|| Curlの行末コメント
|# Curlのブロックコメント #|

Curlはこの他にも「タグ付きコメント」や「長さ指定コメント」という記法があります(が、あまり使わないかも。興味のある方はIDEのヘルプをご覧ください*2)。

3. 変数宣言

Javaは「データ型 変数[ = 初期値];」という構文で変数を宣言します。

int i = 5;
String s = "あいうえお";

Curlでは let という文を使います。

let i:int = 5
let s:String = "あいうえお"

書式は「let 変数:データ型[ = 初期値]」です。

4. 代入

次は代入文です。Javaは = 演算子を使うだけですね。

i = 10;
s = "かきくけこ";

Curlでは set という分を使います。

set i = 10
set s = "かきくけこ"
5. メソッド呼び出し

最後はメソッド呼び出しの構文です。
Javaは () を使いますね。お馴染みの記法だと思います。

obj.doMethod(param1, param2);

CurlJavaと同様、オブジェクトのメンバ(フィールドやメソッド)は「object.member」でアクセスします。ただしメソッド呼び出しに使用する括弧の種類と位置が違います。

{obj.do-method param1, param2}

Curlでは、Curlの名前の由来ともなっている {} (curly brackets)を使います。開始括弧の位置にも注意してください。
構文を対比すると、
(Java)オブジェクト名.メソッド名(引数1, 引数2, …);
(Curl){オブジェクト名.メソッド名 引数1, 引数2, …}

Curlは {} を頻繁に使用するため、慣れないうちはよく {} の使い方に混乱する場合がありますが、基本は上記の通りです。


以上、Javaの文法を知っている方がCurlを覚える場合に最初に押さえておくといいと思われる基本構文の違いを5つ紹介してみました。

ちなみにRIA Knowledge Centerというサイトで「Learning Curl By Way of Java」というドキュメントが公開されています。

実行環境やコンパイラの動作の違いなどを含めた、一歩進んだ話題を扱っています。Curlをより深く理解したい方はぜひご覧になってみてください。

*1:Curlヘラルド」と呼びます。IDEを使っていれば自動的に挿入されます。

*2:Surge Lab 開発者ガイド > 基本概念 - 構文 > 基本的な構文 > コメント

Curl Developer Community

英語ですが、Curlの開発者向けコミュニティサイトが本格稼働を開始しています。
http://developers.curl.com

ブログやフォーラム、サンプルソース、デモなどのコンテンツがあるようです。

At the new Developer Community, you'll find:

  • The Curl blog
  • Curl Cues - a series of interactive articles that demonstrate techniques you can immediate use in your projects
  • Links to Curl Open Source projects and discussions about contributing to the projects
  • Discussion Forums
  • White papers and technical articles about Curl and Rich Internet Applications
  • Video demonstrations of Curl applications and the IDE
  • Online documentation


なんと、IDEのオンラインドキュメントもHTML版で見ることができるようになるみたいです。(現在はまだ準備中の模様)
exampleとかも動くようになるのかなぁ。期待大。

Curlが好きなわけ

前回紹介したCurl Blogのエントリをひとつ紹介したいと思います。

Christopher Barberという、Curlの主にコンパイラ部分を担当している開発者兼アーキテクトによるポストで、プログラマにとってのCurlの特徴について述べられています。

Today, I thought I would start out by highlighting a few of the attributes of the Curl which most appeal to me as a programmer:

挙げられていたのは、immediacy, speed, markup, static/dynamic typing, extensibility, multiparadigmという6つのトピックです。
それぞれを簡単に紹介します。

immediacy

手軽さ?といったところでしょうか。とりあえず、Curl RTEとお気に入りのブラウザ、それにテキストエディタさえあればCurlアプレットを作って動かすことができる点を指しています。

speed

Curlの優れたパフォーマンスについて言及しています。Curlが(インタプリタ言語ではなく)コンパイラ言語であること、そして動的にコンパイルするパッケージはキャッシュされ、不要なリコンパイルが行われない仕組みなどについて説明されています。優れたパフォーマンスを実証する例として、CurlIDEそれ自体がすべてCurlで作られていることを挙げています。

markup

CurlがHTMLのようなマークアップ言語としての側面を持ち合わせていることを紹介しています。CurlのオンラインドキュメントもすべてCurlで記述されています。

static/dynamic typing

Curlが静的型言語/動的型言語のいずれとしてもプログラミングできることを説明しています。静的型言語としてコンパイル時の型エラーの発見や最適化の恩恵を受けることができる一方で、動的型言語のように型指定をせずにダックタイピングのような柔軟なプログラミングをすることも可能です。

extensibility

Curl言語の拡張性について。Curlが備えるマクロの仕組みは、新しい制御構文の定義や、頻出するイディオムに簡潔な別の文法を与えることなどを可能とします。また、型推論や条件付きコンパイルなどもマクロによって実現することができます。

multiparadigm

Curlがマルチプログラミングパラダイムをサポートする言語であること。既に出てきたマークアップ言語や、静的型/動的型言語としての特徴に加えて、オブジェクト指向や手続き型、関数型などのプログラミングスタイルも採用することができるということです。



ざっと紹介してみました。型推論とか関数型言語とかは全然詳しくないので文脈おかしかったらご勘弁。興味があって英語の分かる方はぜひ本文の方をご覧になってください。

Of course, there are many other aspects of the technology and specific features that I like, but I will leave those to future posts.

ということなので、また新しいエントリがあったら紹介したいと思います。

Curl Blog

Curlアメリカへ逆上陸した話はしばらく前に紹介しましたが、その流れでCurlエバンジェリスト達によるオフィシャル(?)ブログが立ち上がっています。

Curlの話題だけでなくRIA全般について語られています。


[10/31追記]
上記ブログのURLが変わりました。
http://developers.curl.com/community/community_blog

InfoWorldのレビュー記事

少々古いですが、アメリカのIT系メディアInfoWorldになかなか好意的なCurlのレビュー記事が掲載されているので紹介します。

記事では 8.6 というスコア(Flex2と同点)が付けられていて、これはかなり高い評価らしいです。

Curl may well be the most interesting computer language that you don't already know. Given that you can use the personal tools free forever and deploy the results on the Internet for free, the only barrier to evaluating it would be finding the time, and you may be pleasantly surprised at how quickly you pick it up. If you get serious about Curl and need to evaluate the professional tools and runtime, you can download a free 60-day trial. Curl should certainly be an option to consider for your next RIA project.


以下はCurlが引用されているその他のRIA系ツールの記事。

InfiViewというJavascriptのグラフィックス系ライブラリ(?)の記事ですが、ツールの充実したより一般的なプログラミング言語を求める開発者に対して Silverlight とともに Curl が紹介されています。

Developers who want to work in a more conventional programming language with better development tools might want to consider other options, such as Silverlight or Curl.

この Silverlight や Flush について書かれている記事の中では、唯一 Curl の名前だけが競合として挙げられています。

Software development tools vendor Curl, a competitor to Adobe (ADBE) and Microsoft in this area, is focusing on the enterprise market with its integrated development environment and object-oriented language.


いずれもまだまだマイナーな Curl に対して少し大袈裟な印象がありますが、技術的には間違ってない評価のされ方だと信じています。

マクロはファーストクラスオブジェクト

Curlの掲示板に回答した内容をこっちにもコピペ。

まず質問の内容は、

・unsetは昔から{unset ***}と書かなければ正しく動作しないのか
・なぜ {}なしでエラーにならないのか

というもので、

unset a.enabled?

というように、{}をつけなくてもコンパイルエラーにならないのに、enabled?がunsetされないという疑問でした。確かに unset は{}を省略可能な set と名前的に対っぽく見えるので、同様に {} を省略できそうに思っても仕方ないかもしれませんが、実はだめなんです。

> ・unsetは昔から{unset ***}と書かなければ正しく動作しないのか
これはToonaさんも回答されてるように、昔から{}無しの書き方は
認められてないはず。
Curlは評価する全ての式を{}で囲むというシンプルな規則が基本で、
let, set, fieldなど(だけ?)が例外で{}を*省略可能*なのです。


> ・なぜ {}なしでエラーにならないのか
これはマクロ型とプリミティブ型の違いが分かると理解できます。
普段プログラミングするだけであれば両者の違いはほとんど意識する
必要はありませんが、
・マクロはCurlのファーストクラスオブジェクトである
・プリミティブはファーストクラスオブジェクトではない
という違いが実はあります。
ファーストクラスオブジェクトというのは聞きなれないかもしれませんが
要は、

let a = {Frame}

と書けるように、マクロ、つまりファーストクラスオブジェクトである unset も

let a = unset

と書けるということです。

{some-proc define-class} ||define-classはマクロ
や
{return if} ||ifもマクロ

はアリですが、

{some-proc and} ||andはプリミティブ
{return public} ||publicもプリミティブ

というのは、プリミティブ型がファーストクラスオブジェクトでないためエラーになります。

つまり、

> unset a.enabled?

がコンパイルエラーにならないのは、単にふたつのファーストクラスオブジェクトが
スペースで区切られて並べてあるだけであって、

{Frame} {Frame}

と書いても

Frame Frame

と書いてもコンパイルエラーにならないのと同じなわけです。

結局、だったらなんで unset をマクロにしたんだ、と思うかもしれませんが、
これはCurl言語のコアを小さくシンプルに保って拡張性を高くすることが目的
なんだと思います。実際3.0から4.0では unset 以外にも多くのプリミティブが
マクロで実装し直されてます。