SKILL (プログラミング言語)
| SKILL | |
|---|---|
| パラダイム | オブジェクト指向プログラミング, 関数型言語 |
| 登場時期 | 1990 |
| 開発者 | ケイデンス・デザイン・システムズ |
| 最新リリース | ? / ? |
| 型付け | 動的型付け |
| 主な処理系 | Cadence Allegro, Cadence APD, Cadence Concept HDL and Cadence Virtuoso. Major LISP implementation ? Cadence UniCAD. |
| 方言 | SKILL, SKILL++ |
| 影響を受けた言語 | Scheme, Common Lisp |
SKILL はLISP系のスクリプト言語であり、ケイデンス・デザイン・システムズ社製の多くのEDA製品 (Cadence Allegro、Cadence Virtuoso等)で使われる「PCell」を記述するための言語である。その始めは1990年のIEEEの論文[1]での提案にある。
目次 |
歴史 [編集]
SKILL言語の始まりはカリフォルニア大学バークレー校のリチャード・フェイトマン教授の学生によってつくられた言語 Franz Lisp である。「SKILL」の名称は他の語の語の頭文字ではない。公式の商標は全ての文字を大文字で表記する「SKILL」であるため、ケイデンス・デザイン・システムズ社は、大文字表記が好ましいとしている[2]。Franz Lisp 言語などの多くのLISP系の言語はANSIが策定したLISP系の言語の標準言語である「Common Lisp」に取って代わられた。 現在「SKILL言語」として知られているものは、当初、「IL言語」として知られていた。SKILL言語はIL言語の関数ライブラリーであった。当時、その関数ライブラリーは「SCIL」(英語「silicon compiler interface language」の頭文字)と呼ばれていたが、後に、発音が同じ普通の覚えやすい英単語「skill」に変更された。IL言語は純然たるインターフェース言語であった。一方、SKILLも当初は言語というよりも、APIを記述するために使われていたものであったが、名前としては、より洒落た「SKILL」の方が定着した。「IL」という名前はSKILL言語プログラムファイルの標準的な拡張子「.il」に名残を留めている。
文法 [編集]
SKILL言語のプログラムには意味が等価な2つの書法がある。LISP系の言語に伝統的なS式による
(car mylist)
のようなものと、
car(mylist)
のような、C言語に似たものである。2つの書法はプログラム中で混在可能だが、C言語類似の書法の場合は、C言語とは違い、関数名と開き括弧の間に空白文字を入れて、
car (mylist) ; 誤り
のように書くことはできない。
いくつかの算術演算子は中置記法で書くことができる。例えば、
(plus 1 2) plus(1 2) 1+2
これらは、いずれも正しい書き方である。このようなC言語に似せた書法は、C言語や類似の書法を持つ他の手続き型言語の経験者がSKILLのコードを容易に理解できるよう導入された。C言語との違いとして、SKILL言語の全ての変数は動的スコープである。
SKILL言語の関数群には製品固有のものがいくつかある。例えば、製品「PCB Editor」では、「axlDBGetDesign関数」など、「axl」で始まる固有の関数群があり、製品「Design Entry」では、「cnGetDwgInfo関数」など、「cn」で始まる固有の関数群がある。
サンプル [編集]
基本的な「Hello world」プログラムは以下のように記述する。
(println "Hello, world!")
階乗を計算する関数は以下のようになる。
(define (factorial n) (if (leqp n 1) 1 (times n (factorial (difference n 1))) ) )
ここで、define のかわりに procedure(factorial n) としても正常に動作する。
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
コメントは、伝統的な他のLISP系言語と同じく、セミコロン「;」で区切って書く。
(car mylist) ; セミコロンから行末まではコメント。
また、C言語と同じ書き方もできる。
/* コメント */ car(mylist) /* 別のコメント */
参考資料 [編集]
- ^ Barnes, T. J.「SKILL: a CAD system extension language」, 第27回 ACM/IEEE Design Automation Conference, 1990. Proceedings; 266-271ページ
- ^ “Re: SKILL stands for ...?”. 20080919閲覧。
- G. Wood、H-F S. Law, 「SKILL - An Interactive Procedural Design Environment」, Proceedings of Custom Integrated Circuits Conference, 1986, 544?547ページ
- Quan Nguyen, 「CAD Scripting Languages」, RAMACAD社. ISBN 0977781224, ISBN 9780977781225. (Google Books のサンプル)
ユーザーグループ [編集]
- SKILL言語のユーザーグループは、現在、米国 Yahoo!社 のウェブサイト「Yahoo! Groups」の「skill_school」にある。
- ケーデンス・デザイン・システムズ社が主催する同社製品のユーザーグループのフォーラムもある。「Allegro PCB SKILL」(PCB SKILL)専用のフォーラムと、「IC SKILL」(Custom IC SKILL)専用のフォーラムがある。
- Concept SKILLのユーザーグループはない。(2009年1月現在)
外部リンク [編集]
- ケーデンス・デザイン・システムズ社
- CopperCAD Design 社 - Cadence Allegro用プログラムのカスタム開発とパッケージ販売の商用サイト。
- PCBSKILLウィキ
- SKILL備忘録 Wiki