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

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
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 AllegroCadence Virtuoso等)で使われる「PCell」を記述するための言語である。その始めは1990年のIEEEの論文[1]での提案にある。

歴史[編集]

SKILL言語の始まりはカリフォルニア大学バークレー校のリチャード・フェイトマン教授の学生によってつくられた言語 Franz Lisp である。「SKILL」の名称は他の語の語の頭文字ではない。公式の商標は全ての文字を大文字で表記する「SKILL」であるため、ケイデンス・デザイン・システムズ社は、大文字表記が好ましいとしている[2]Franz Lisp 言語などの多くのLISP系の言語はANSIが策定したLISP系の言語の標準言語である「Common Lisp」に取って代わられた。 現在「SKILL言語」として知られているものは、当初、「IL言語」として知られていた。SKILL言語はIL言語の関数ライブラリーであった。当時、その関数ライブラリーは「SCIL[3]と呼ばれていたが、後に、発音が同じ普通の覚えやすい英単語「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)
  )
)

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

> (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)   /* 別の注釈 */

脚注[編集]

  1. ^ Barnes, T. J.「SKILL: a CAD system extension language」, 第27回 ACM/IEEE Design Automation Conference, 1990. Proceedings; 266-271ページ
  2. ^ Re: SKILL stands for ...?”. 20080919閲覧。
  3. ^ 英語「silicon compiler interface language」の頭文字。

ユーザーグループ[編集]

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

外部リンク[編集]