当研究室の研究活動ポリシーの一つとして,外部(共同研究者など)からの制約・要望が特になければ,アプリケーションは自分の好きなプログラミング言語やソフトウェアを使用してよい*1,というのがあります.
いよいよ月曜日に迫った研究室紹介でも,1枚のスライドに,データベースとHTMLを中心に置き,さまざまな言語やソフトウェアの名前を並べています.午後のオープンラボでも,研究室内に掲示される予定です.
それぞれの簡単な解説を試みてみます.本日はDBMS(データベース管理システム)とプログラミング言語です.
PostgreSQL
「ぽすとぐれすきゅーえる」です.データベース演習でも使用していると聞いています.
バージョンアップのたびに,機能強化・性能向上の記事を雑誌やWebでよく見かけまして,真髄まで使っているわけではないのですが,見ていて楽しいDBMSです.
見るだけでなく,個人的な利用にも,特に制約がなくデータベース管理を必要とする場合は,たいていPostgreSQLです.
MySQL
「まいえすきゅーえる」です.PostgreSQLと並んで世界的に有名なフリーのDBMSですが,MySQLのほうが海外の利用度が比較的高いそうです.
機能面で,かつては簡単軽量を求めていたと記憶していますが,今ではPostgreSQLとほぼ対等でしょう.
LAMPのMは,MySQLです.(他は,L=Linux, A=Apache, P=PHP.)
SQLite
「えすきゅーらいと」または「えすきゅーえるぁいと」と発音します.新参フリーDBMSです.
クライアント/サーバ型ではなく,データベース情報が単一のファイルで管理されています.PostgreSQLやMySQLでは,データベース「に接続する」ですが,SQLiteではデータベース「を開く」となります.
Firefoxでは,各種の内部設定はSQLiteで管理されています.そのデータベースを最適化すれば,快適に動きます.
SQL
「えすきゅーえる」です.「しーくぇる」とも呼ばれるそうです.あと,学生時代にはStructured Query Languageの略と教わりましたが,国際規格としてのSQLは,略語ではなくそのまま「SQL」とのことです.
関係データベースにアクセスするための言語です.基本的な文法規則を覚えれば,PostgreSQLにも,MySQLにも,SQLiteにも使えます.細かい違いはいろいろありますので,当研究室に入った人は,書店で良い本を見つけて一生ものにしましょう.
Cと異なり,非手続き型言語なので,学ぶのに苦労した人も多いかと思います.Cなどの手続き型言語はプログラムコードとしてHowを書き,非手続き型言語はWhatを書くのです.
SQLだけではシステム制御ができません(チューリング完全でない,とも言われます)ので,PHPなどのプログラミング言語の中で,SQL文の文字列を引数にとして与えて,関数か何かを呼び出すという形で,使用することになります.
PHP
「ぴーえいちぴー」です.かつて,「ぴっち」と呼ばれる携帯電話の略称を,Personal Handy PhoneだからPHPにしようとしたら,有名なPHP研究所がすでにあるということで没になり,Personal Hanpyphone Systemの略として,PHSに落ち着いたのでした.ともあれ,PHPという言語は,海外で作られ発展しましたので,PHP研究所の影響を受けずにこの名称です.
「PHP: Hypertext Preprocessor」の略です.私自身,去年の申請書や今年の学会発表で「PHP (Hypertext Proprocessor)」と勘違いして書いていました.
ちなみにPHPとは何(の頭文字)かという説明の中にPHPを使っています.これは再帰的な定義でして,他にも,GNUはGNU's Not Unix,YAMLはYAML Ain't Markup Languageの略とされています*2.
さてこのPHP,HTMLを生成するために使うのがもっぱらです.すなわち,静的でいいのならHTMLファイルだけど,動的に,Webクライアント(Webブラウザ)からのリクエストを受け取り,それに応じて異なる返答となるHTMLを作るのに,活用されます.ファイル名のサフィックス(拡張子)が.phpで,一見HTMLファイルだけどその中に「」と書かれていれば,その中がPHPのコードとして評価されます.
言語そのものは手続き型ですが,Perlの影響をそこそこ受けていて,変数は通常,$variableのように$から始まります.
Ruby, Ruby on Rails
「るびー」というのが言語で,「るびーおんれいるず」はPHPと同様に,いやそれ以上にWebアプリケーションを手軽に書くための,フレームワークです.
Rubyは,国産オブジェクト指向スクリプト言語という位置づけがよくなされます.作者はまつもとゆきひろ(matz)さんです.
「スクリプト言語」は,1年でおそらく学んだ語句を使うと「インタプリタ型言語」です(ただし,実行すると内部コードにコンパイルされ,それを評価することになります.また,RubyスクリプトをWindowsの実行ファイルにするexerbというソフトウェアも知られています).実行速度は,PerlやPythonといった,同種のスクリプト言語に負けているというベンチマークがよく見られますが,最新バージョンではその克服も試みられています.
私自身も,授業に研究に,小さなアプリケーションならRubyで書いています.
Rubyスクリプトのサフィックスは.rbです.変数名は,特別な記号から始まっていなければローカル変数,@foobarのように@から始まっていればインスタンス変数(Javaでいうフィールド),$hogeのように$から始まっていたらグローバル変数です.
C
「しー」です.って,解説させるなよこれ.
研究室の話としては,数年前,2人の卒業研究(内容は別々)で,データ変換やCGIのプログラムを,Cで書いていました.それぞれ後継者はいませんでしたが.
Java
「じゃう゛ぁ」です.これも必修科目の情報処理IIIで学んでいますね.
ちなみに,情報処理I,II,IIIという科目が各学科にある(けど他学科の同名科目は受講できない)のは,システム工学設立からしばらくの間,「基礎専門科目」という科目分類があって,そこに名目上,共通的に科目を設置していたからです.私が初めて情報処理IIを担当することになった年度は,学部の授業参観の科目が,各学科の情報処理IIになりまして,苦労したことを思い出します.
じゃなかった,Javaは奥が深い言語です.世の中でもそれなりに使われています.オブジェクト指向言語,そしてデザインパターンを学んで活用するには,最適なのではないでしょうか.Javaをベースとしたスクリプト言語というのもいくつか出現しています.研究で使うかどうかは別にして,学ぶ価値のある言語だと思います.
JavaScript
「じゃう゛ぁすくりぷと」です.「JAVAsctipt」だとか「Javaスクリプト」だとかいった表記は,しないようにしましょう.
この言語,Javaとあまり互換性がありません.別物と思っています.
一般的な用途は,クライアントサイドで動くHTMLの埋め込みスクリプトです.PHPを含むコードは,Webサーバ側で処理されて,クライアント側では直接プログラムコードを見ることができないのですが,JavaScriptのコードは基本的に,「ソースを見る」で覗くことができます.
ブラウザの画面に動きや楽しさ,使いやすさをもたらすのに有用ですが,JavaScriptをオフにしてブラウザを使っている人でも,支障なく使ってもらうよう,HTMLファイルなどを構成することも大事です.
JavaScriptが脚光を浴びたのは「Ajax」(えいじゃっくす)によってです.Asynchronous JavaScript + XMLの略です.入力フォームに何か書き込んで,送信ボタンを押していないのに結果が表示されていたら,このAjaxの機能で,Webブラウザとサーバの間で情報交換が行われていたのでしょう.
JavaScriptで利用可能なメソッド(JavaScriptもオブジェクト指向言語です)は,ある程度の部分,Webブラウザに依存しています.Internet Explorerでは利用可能だけど,Firefoxでは提供されていない,あるいはその逆,といったオブジェクトやメソッドもあります.それらの違いを吸収したり,Ajaxや視覚表現を簡単な呼び出しで行えるようにしたりするライブラリとして,prototype.jsやjQueryなどが普及しています.
Scala
「すから」です.「scalable」という単語にゆかりがあります.
Java仮想マシンの上で動く,スクリプト言語です.Javaベースですのでオブジェクト指向なのですが,関数型言語という顔もあわせ持ちます.ある本では,オブジェクト指向でも手続き型でもいいから,一応動くコードを書き,その後,Scalaらしく関数型言語のテイストに,リファクタリング(等価かつ洗練された書き換え)をするのがよしとされています.
これはまだ研究室内では使用していません.私が勉強している状態です.
flex & bison
「ふれっくす・ばいそん」と言います.
flexはプログラムコードなどの字句解析,bisonは構文解析のためのツールです.
すべき適切な処理を宣言的に書いて,処理させると,コンパイラができます.
もともとlexとyaccというソフトウェアがあって,flexとbisonはそのそれぞれと等価なフリーソフトウェアです.
lexはlexical analyzer(字句解析器)の最初の3文字と思えばいいでしょう*3.yaccはyet another compiler compilerの略です.yet anotherは「もう一つの」で(これはこれで歴史的にいろいろあったそうですが),compiler compilerは「コンパイラ・コンパイラ」,もう少しかみ砕いて言うと,「コンパイラを生成するコンパイラ」です.
*1:ただし,何を採用するにしても,それが妥当かどうかのチェックは必ずします.
*2:本日は外部リンクをなるべく設けない方針で書いていますが,次のだけは一読の価値あり:GNU, PHP, RPM は何の略? 再帰定義の密かなブーム
*3:より正確には,lexical analyzer generator