SKILL++とは

ボクの嫌いな言語No.2にランキングしているSKILL。理由は、せっかくのきれいなLispなのに、C言語風のコードが書けたり、CamelCaseを推奨しているところ。もちろん、それ以外に仕事的な理由もありますが、それはまたの機会に。

しかしながら、Cadenceもその辺はある程度理解しているのか、SKILL++と言うのも用意している。しかし、SKILL嫌いのせいで調べることもほとんどしなかったけど、とある人から指摘されてしまったので、少し調べて見ることにする。

と言っても、CadenceのBlog
http://www.cadence.com/Community/blogs/cic/archive/2011/01/04/skill-for-the-skilled-what-is-skill.aspx
を見てるだけだけど。

そういえば、SKILLをスタンドアローンで動かすことってできないの? > Cadenceさん

特徴

  • レキシカルスコープを採用
  • 単一関数/変数名前空間(Lisp-1)
  • CLOS準拠のOOP

Lisp-1と言うのはあまり知らなかったけど、Matzさんのブログに詳しく書かれているので割愛w

基本的に名前空間が一つしかないLispのことをLisp-1と呼ぶ。たとえばSchemeがそう。

http://www.rubyist.net/~matz/20080201.html#p01

とりあえず、変数と関数が同じ名前空間に属している、と言うことですね。Pythonもそうらしいですね。そういえば、関数を普通に変数に代入できたりします。Rubyは単一名前空間じゃないから、ブロックで囲んでやって、変数に渡さないといけない。

さて、この3つの特徴を見ていると。。。これってScheme?と思ってしまいますね。実際、CadenceのBlogでも

In this article, we'll ignore the SKILL++ object system and concentrate on the first two of these capabilities -- sometimes referred to jointly as the SKILL++ Scheme Dialect.

http://www.cadence.com/Community/blogs/cic/archive/2011/01/04/skill-for-the-skilled-what-is-skill.aspx

と書いているので、SKILL++というよりは、LispベースだったのをSchemeベースにした、ということなんですね。

例題

CadenceのBlogでは、以下のコードがサンプルで載っている

(defun walkCvHier (cv consume)
  (foreach inst cv~>instances
    (walkCvHier inst~>master consume))
  (consume cv))

あいかわらずCamelCaseなのが若干気にくわないが、これはなにかデザイン上のオブジェクトがあったときに、そのインスタンスを探していって、プリミティブに当たったときに、 (consume cv)を実行する、というもの。

SICPをやっていれば、すぐに分かるけど、いわゆる高階関数の例。以前は、Lispと同じ風に書かないといけなかったのが、Scheme風に書けるよ、ということか。いまいち、説得力がないぞw

ということで、

今回は終わり。Cadenceのブログも続きがあるらしいので、その都度どんなもんか見ていきます。

でも、僕自身、CLOSのオブジェクトの使い方がいまいち分かっていないので、仕事でSKILL++を使うべきか悩んでいます。この辺は、プログラミングGaucheを読んで勉強すべきかな。

最後に

Cadenceさん、LispC言語風にするんだったら、もっとメジャーなC言語風のCommercial言語を採用しようよ。。。