質問: systemcの抽象度とは 大変お世話になります。 現在、hdl言語を勉強し初めており、systemcなる言語があると知りました。 内容を見ると良く「抽象度が高い」との記述があるのですが、「抽象度が高い」というのは、論理設計において具体的にはどのようなことになるのでしょうか。色々なhpを見ているのですが、概念はなんとなくわかるのですが、具体例が判りません。論理設計における具体例を用いて説明出来る方いらっしゃいましたら、どうか回答お願い致します。
回答: hdl言語と言うのは知りませんが、多分、一般的に言われる「抽象度が高い/低い」ってのが次のような事だと思います。 単純に、 ・ハードウェアにより近い位置で書かなければならない言語→抽象度が低い→例:アセンブリ言語、c言語等 ・ハードウェアからより離れていて、「より人間の思考法に近い」機能を持っている言語→抽象度が高い→例:perl、python、ruby、lisp等 と考えていいと思います。単純に言うと、同じ作業をするのに「より簡潔に書けて」「より基本機能が充実している」言語が「より抽象度が高い」と言っていいと思います。反面、抽象度が高い言語は「ハードウェアリソースを消費する」「スピードが劣る傾向がある」と言うマイナス面もあります。 具体例、ってのは難しいのですが......例えば良く使われる例では「再帰的定義」なんてのがありますね。 例えば。ポピュラーな例で言うと、 階乗f(n)=n!をプログラムせよ なんて例があります。 これは通常のプログラミングの流儀では「ループ構文」(例えばfor文)なんかで書くのが「オーソドックスな手」だと思われていますが、実際問題「繰り返し計算に持ち込む」のは、これは「ハードウェア寄り」の発想なんです。と言うのも、工学的な理由により、「繰り返し指定」と言う要素が切り離せないから、なんですね。よくよく考えてみると、元々の数式では別に「繰り返し」と言う要素は要求されてはいないのです。「繰り返しで書く」のは人間側が「よりハードウェアに近い部分で思考をそれに慣らしながら勉強しないと」書けないから、なんです。 反面、抽象度が高い技法、この場合「再帰的定義」が使用可能な場合、 f(n)=n!=n×f(n-1) と「数学的表記そのままの構造で」書けてしまいます。これが「抽象度の高い」言語の強力な部分なのです(が、反面、「いわゆるプログラムらしい」思考方法に慣れると逆に「難しい技法だ」と感じるようになっちゃう辺りが人間の困った部分なのですが・笑)。 もちろんこう言う「再帰的定義」はc言語なんかでも可能なんですが、反面、メモリ管理なんかが難しくって、逆に手間がかかっちゃうらしいですね。「抽象度が高い」言語ですと「ガベージコレクション」と言う「自動メモリ管理」の機能が組み込まれているケースが多いんで、このテの事をあんまり心配する必要もなくなっています。まあ、そう言う点でも「抽象度が高い」言語は機能が豊富なのです(反面、c言語なんかは、実は小さくて軽い、と言う利点もあります)。 一般に、「抽象度が高い」と同じ事を実現する為に書かなきゃならないコードの量は減っていく、んです。例えば「静的型付け」で変数の種類を一々宣言しなきゃならない言語に比べて、「自動で変数の型を判断してくれる」動的型付けはより「抽象度が高い」ですよね。その分変数の型を考える必要が無くなるんで「よりプログラミングの自由度が上がる」でしょう。 また、「最新の」機能の話をしなくても、例えばgo to文を書かなければならなかった時代に比べて、if~then構文で書けるようになった言語は「より抽象度が高い」ワケです。