SKILL (プログラミング言語)

（スキル） はLISP系のスクリプト言語であり、ケイデンス・デザイン・システムズ社製の多くのEDA製品 （Cadence Allegro、Cadence Virtuoso等）で使われる「PCell」を記述するための言語である。その始めは1990年のIEEEの論文での提案にある。

歴史
言語の始まりはカリフォルニア大学バークレー校のリチャード・フェイトマン教授の学生によってつくられた言語  である。「」の名称は他の語の語の頭文字ではない。公式の商標は全ての文字を大文字で表記する「」であるため、ケイデンス・デザイン・システムズ社は、大文字表記が好ましいとしている。 言語などの多くの系の言語はが策定した系の言語の標準言語である「」に取って代わられた。
現在「言語」として知られているものは、当初、「IL言語」として知られていた。言語はIL言語の関数ライブラリーであった。当時、その関数ライブラリーは「」と呼ばれていたが、後に、発音が同じ普通の覚えやすい英単語「」に変更された。IL言語は純然たるインターフェース言語であった。一方、も当初は言語というよりも、APIを記述するために使われていたものであったが、名前としては、より洒落た「」の方が定着した。「IL」という名前は言語プログラムファイルの標準的な拡張子「.il」に名残を留めている。

文法
言語のプログラムには意味が等価な2つの書法がある。系の言語に伝統的なS式による(car mylist)のようなものと、car(mylist)のような、C言語に似たものである。2つの書法はプログラム中で混在可能だが、C言語類似の書法の場合は、C言語とは違い、関数名と開き括弧の間に空白文字を入れて、car (mylist) ; 誤りのように書くことはできない。

いくつかの算術演算子は中置記法で書くことができる。例えば、
 (plus 1 2)

 plus(1 2)

 1+2
これらは、いずれも正しい書き方である。このようなC言語に似せた書法は、C言語や類似の書法を持つ他の手続き型言語の経験者がのコードを容易に理解できるよう導入された。C言語との違いとして、SKILL言語の全ての変数は動的スコープである。

言語の関数群には製品固有のものがいくつかある。例えば、製品「」では、「axlDBGetDesign関数」など、「axl」で始まる固有の関数群があり、製品「」では、「cnGetDwgInfo関数」など、「cn」で始まる固有の関数群がある。

サンプル

基本的な「」プログラムは以下のように記述する。
(println "Hello, world!")

階乗を計算する関数は以下のようになる。

(define (factorial n)
  (if (leqp n 1)
    1
    (times n (factorial (difference n 1)))
  )
)

ここで、define のかわりに procedure(factorial n) としても正常に動作する。define と procedure に大きな違いはなく、define は procedure の一種である。procedure は最初の引数として関数名と引数を1つの引数と考えセットで取る。一方、define は最初の引数として関数名を取り、二つ目の引数で引数を取るようになっている。

C言語類似の書法では、長いプログラムコードでは、S式書法での等価なコードとは見かけが全く異なるものになる。

define( factorial(n)
  if( n<=1 then
    1
  else
    n * factorial(n-1)
  )
)

次の例は、特殊フォーム「setq」を使い変数へ代入する方法と、特殊フォーム「let」を使い変数スコープを区切る方法を示す。

(define (swap)
  (let ((a 1) (b 2))
    (setq c a)
    (setq a b)
    (setq b c)
    (printf "a=%d, b=%d, c=%d\n" a b c)
  )
)

変数 a と b は、特殊フォーム let で局所化されるが、変数 c は、そうなっていない。そのため、変数 c は、関数 swap の外からもアクセス可能。次のコードは関数 swap の実行結果として、変数 a、b、c の内容を出力したもの。

> (swap)
a=2, b=1, c=1
t
> a
*Error* toplevel: undefined variable - a
> b
*Error* toplevel: undefined variable - b
> c
1

注釈は、伝統的な他の系言語と同じく、セミコロン「;」で区切って書く。C言語などの他の言語と同じように長い範囲でコメントアウトしたい時には/* ~ */ といったコメント文も有効である。

(car mylist) ; セミコロンから行末までは注釈。

また、C言語と同じ書き方もできる。

/* 注釈 */   car(mylist)   /* 別の注釈 */

脚注

 、, 「」, , 1986, 544?547ページ
, 「」, 社. ISBN 0977781224, ISBN 9780977781225. (Google Books のサンプル)

ユーザーグループ
言語のユーザーグループは、現在、米国 Yahoo!社 のウェブサイト「」の「skill_school」にある。
ケーデンス・デザイン・システムズ社が主催する同社製品のユーザーグループのフォーラムもある。「」（）専用のフォーラムと、「」（）専用のフォーラムがある。
のユーザーグループはない。（2009年1月現在）

外部リンク
ケーデンス・デザイン・システムズ社
CopperCAD Design 社 - 用プログラムのカスタム開発とパッケージ販売の商用サイト。
PCBSKILLウィキ
SKILL備忘録 Wiki

LISP
スクリプト言語
プログラミング言語