2013年7月15日月曜日

プログラム言語の雑貨屋的思考

私が実務や学習したプログラム言語についてコメントしてみます。

Fortran今でもスーパコンピュータでは使われている。 オブジェクト指向にも対応している。 古くから数学ライブラリが揃っていた
BASICPCで使えるインタープリタ。 25年前ですが、実験結果で回帰分析したり、CADを連動させて自動図面を描かせたりした。 今ではVBへ進化した。
アセンブラMASM86、Z80を主にプログラミングした。 どのようにプログラムがCPUで処理し、高級言語がどのようにアセンブラに変換されているかが理解できる。 デバイスに対する直接操作が可能
BATMS-DOSのバッチコマンド、 言語というよりもOSシステムのコマンドの集合、 今ではWindowsのOSではPowerShellがシステムをカスタマイズ自動化で使われている。
COBOLカラム指定の言語、事務処理用、
C言語Javaの前までは一番主流な言語、今でも組込み系では人気、デバイスへ直接アクセス可能。 メモリ破壊が起きやすい欠点がある。
ShellC,B,K等のUNIXやLinuxでのOS用のバッチ(シェル)言語、コマンドラインで履歴の再利用に便利。
SED言語というよりも、ストリームエディタ、正規表現だけで処理する。
AWKSEDを言語に進化したような感じ、C言語をスクリプト化したものとも考えられる。
Lispカッコが多い感じを受ける。非常にシンプルな構文で、構文解析をするとこの言語のイメージが解る。 一部のハッカー級の人達が使いこなしていた。 ライブラリーの標準化が見えにくいことや、言語も何種類も分岐して進化しているので初心者が使うには相当な動機が必要と考える。
Prolog宣言型言語、構文が非常にシンプルな言語、内部DSLが簡単に使える。 DCGの構文解析が有名
SQL宣言型言語、DSLとも考えられる。RDBのテーブル操作がシンプルに記述できる。
C++C言語をオブジェクト指向に進化させた言語。複雑な構文を持つ。ゲーム開発の分野では主流
perlシステムメンテナンス系のスクリプト言語。AWKから進化した感じ。
pythonインデントでネストを表す言語、欧米では活発に使われている。
TeX書籍や論文を記述するドキュメントフォーマット。ツールで複雑なコードから印刷へ変換する。
HTMLWEBの代表的なフォーマット形式
JavascriptWEBの代表的な言語、今ではAJAXに進化、Nodes.jsでサーバサイドでも利用
Javaオブジェクト指向のブームで主流になった言語、今では色々な欠点も指摘されている。 今後もレガシーや基幹系の言語では使い続けられる。完成したシステムは巨大な一枚岩になっている印象
XMLHTMLをデータ交換にしたような形式、厳密な定義。色々な規格のベースになっている。 XMLによる宣言型の記述方法もありますが、非常に不評なようです。単なるフォーマットと考えています。
VBMicrosoftのVisualBasic、BASICのビューを進化した言語。
VBAMS-ExcelやMS-Wordで直接起動できるスクリプト言語、構文はVBに準ずる。
C#Javaに対抗したオブジェクト指向言語、今ではJavaよりも先進的な要素を持つ。
PL/SQLPascalの構文に似ている。SQLを使い処理まで記述できる。高速な処理が可能
PHPWEBでの簡単にプログラムができる言語、CakePHP等のFWが有名
Ruby日本で生まれたオブジェクト指向型言語、先進的な試みがFWで実現されている。 Ruby On Railsでは、プログラムの自動化に成功した言語。 言語仕様はかなり多岐、その分APIを使う必要がない。 記号をメッソドに使える為、変な使い方をすると他人が書いたコードが読めなくなってしまう。
ActionscriptFlashを開発する為の言語、HTML5からはさえない感じ
Haskell関数型言語の親玉的な言語。モナドが有名。無限を表現可能、遅延評価の有効利用 高度なツールやエンジン部分を構築することに向いている。 ライブラリも数多くあるのですが、もう少し利用しやすくできれば最高なのですが
Erlang並列処理で有名な言語、Prologからヒントを得た関数型言語、シンプルな仕様。 いまいち将来性が伺えない
ScalaJavaやC#を並列処理化するための関数型言語。Javaの後継になるか? 構文解析器を持つ。JVMの資産を継承できるメリットがある。
F#HaskellやOCamlを参考にした言語。ユニークな関数型言語、あまり使われていないようです。C#の補完的な使用が事例ではある。.Netの資産が利用できるメリットがある
Alloyテストを実施してくれる言語。SATのフロントエンドとして利用可能。 オブジェクト指向言語の仕様をテストすることが可能。
HDLハードウェア記述言語、回路設計に使われる、 FPGAはハードウェアの回路をソフトウェアで開発可能にしたもので利用度が増している。

あくまでも主観的なコメントになります。

何を言いたかったかと言いますと数は多いですが、 「Haskellを習得できれば、他の言語を習得するのは簡単」 だと思います。

オブジェクト指向言語はオブジェクトの概念自体は難しくないのですが、APIの階層の深さやFWの仕様が大き過ぎて困る傾向にあると思います。Javaの開発ではシステム全てが同一の言語で構築されます。従って不具合が発生して ベンダーやOSSが提供する基盤までを調査する場合には非常に広範囲な作業が必要になります。

WEBに限れば、中小規模なシステム向きにはシンプルに使えるのがRubyやPHPのFWになります。
スクリプト言語でベースそのものが比較的わかりやすく、システム開発部分が狭い範囲な為開発が楽になります。

関数型言語は、少し言語自体に複雑性があると考えられます。
  • ループを再帰で記述すること
  • ネイティブで記号や固有の概念を使うこと
  • 記号(中置二項演算子)を追加できてしまうこと
  • 数学的要素を取入れていること
が原因になっていると考えられます。
逆に、この特性により複雑な機能が驚くほどシンプルに記述できます。 又そこにはバグが入り込む余地は残されていないでしょう。

宣言型言語は、記述において完全な順番を排除したものではないので頭に処理の概念が思い浮かぶようにならないと、使うには難しいと思います。
ただし、SQLは対象がテーブルなので容易に理解できます。
単なるDSLとして考えると複雑な処理をシンプルに記述できます。

関数型言語と宣言型言語は変数の代入が一度だけで、書き換えができないのでこれによる副作用の防止効果は非常に強力なものがあります。


これからマルチなプログラム言語の対応することを新しい試みとしてトライしてみます。
「疎な情報」をどうやって、「密な情報」へと関係させるかが当面の課題です。
目的はあくまでも現場で使えるプログラム言語の知識や方法を構築することです。

0 件のコメント:

コメントを投稿