SKILL for the Skilled: Making Programs Clear and Concise

By Jim Newton on November 8, 2010

(この記事は、SKILL for the Skilled: Making Programs Clear and Concise超訳です。SKILLに興味がある方は、ぜひ。)

SKILLは、Cadenceのコアツール(VirtuosoやAllegro)の機能性をアップすることができるプログラミング言語である。また、Cadence内部の製品開発部門だけでなく、サービスを提供する部門にとっても、重要な言語である。SKILLには、設計環境をカスタマイズしたり、使い勝手を良くしたりすることが可能できるように、value, power, 柔軟性, エレガント性を持っている。これは、SKILL言語がCadenceプラットフォームに蜜に結びついているから可能になっていることである。

この記事では、"SKILL for the Skilled"シリーズの紹介記事である。このシリーズでは、ユーザがSKILLに楽しみや興味を持ってもらい、さらに、SKILLの強力さ、エレガントさを利用してもらおうと思っている。

警告: これから読もうとしている記事は、非常に独断的なものである!

SKILL Functions: Short and Clear

SKILLプログラムは、通常関数によって構成される。関数は短く、簡潔で、その中でも意図が表現されなければならない。しばしば、プログラミング言語は、プログラマに対して、言語が問題に合っているかどうかではなく、問題が言語で表現出来る範囲かどうか、を強いることがある。そして、このような問題はC言語風に書かれたSKILLプログラムに何度も見られるものである。この問題については、これ以降の記事でも取り上げたい。

Example Program

関数は簡潔にしておくべきである、と言う事を示すために、同じ関数を異なる思想で実装した例を見てもらおう。読みにくい例(#1)は命令的に書いたものである。このようなスタイルはなくすべきだ。次の例(#2)は、関数型のスタイルで書いたものである。命令型では9行も費やしているのに対して、関数型では明快さを犠牲にすることなく、2行で収まっている。当然のことであるが、関数型のスタイルの方が、デバッグが容易であり、計算効率もよい、また、大規模化にも対応しやすい。

Implementation #1 -- needlessly confusing (不必要に混乱している例)
procedure( abs_less_than_100(x)
  prog( (value)
    value = abs(x)
    if( value < 100
      then return(t)
      else return(nil)
    ) ; if
  ) ; prog
) ; procedure
Implementation #2 -- clear and simple
(procedure (abs_less_than_100 x)
  (abs x) < 100)

What were the programmers thinking? -- プログラマは何を考えているか?

#1のコードの問題点は何だろうか? #1を書いたプログラマの思想はどういう物なのだろうか? おそらく彼はノイマン型のマシン(結果が得られるまで、算術演算とレジスタ間の移動を繰り返す)の思考をしたのであろう。それに対して、#2のプログラマは数学的な思考でコードを書いたはずである。

A more natural way to think -- より自然な思考

私は、レジスタ間の値を移動させると言う不器用な思考をするよりも、数学的な思考の方が人間に取って、より自然であり、より簡単である、と言いたい。問題をそれ以上に複雑にさせてはいけないのである。

Some mistakes to avoid

二つの実装の思考方法から少し離れて、#1のコードの問題点をさらに眺めてみよう。

  • 役に立たない変数valueの宣言。一度しか使われない変数を宣言する必要などない。
  • 役に立たないprog/returnの使用。もし、コードの最後に値を返したいならば、prog/returnを使う必要などない。
  • 役に立たないif/then/elseの使用。TRUE/FALSEを評価する式を書いているのに、わざわざif/then/else構文の中でTRUE/FALSEを生成しているなんて、意味不明。
  • 閉じカッコだけで、コードの半分を占めている。複数行にわたって、カッコを置く必要なんてない。それよりも、インデントを強制するエディタを使え。
  • コメントが冗長なだけでなく、そもそも悪くしている。誰かがこの関数を編集して、コメントをメンテする事を忘れてしまったら、すぐにこのコメントの意味などなくなるであろう。

SKILL is easy, flexible, powerful, and elegant

SKILL言語は、学ぶのが容易な言語であり、書き捨てのスクリプトにも使える言語である*1。また一方で、SKILLの強力さと柔軟性は、熟練プログラマが高品質なソフトウェアを開発していることから、明らかである。SKILLのエレガンス性については、しばしば低い評価を受けることがある。しかし、キレイに書かれたSKILLプログラムは理解するのが簡単で、わずかな行で実装することができ、他の言語で作るよりも短い時間で作ることができ、作ろうとしているプログラムを理解しやすい言語である。

これまで、SKILLに関する洞察力のある記事を見つけることは困難であった。また、今日の問題に対して、どのようにSKILLで立ち向かうか、と言う記事を見つけることも難しかった。私は、このシリーズを通して、SKILLプログラミングの利点と楽しさを提供していこうと思う。

Jim Newton

*1:訳注: ウソつけーw