・ Generic Desktop ページ ・ Simulation Control,VX—シ ・ VR Controls ページ ・ Sport Controls ペーシ ・ Game Controls ページ ・ Keyboard/Keypad ページ ・ LED ページ ・ Button ページ ・ Ordinal ページ ・ TeIephny Device ページ ・ Digit1zers イヾーシ ・ PID ページ ・ UNICODE ページ ・ Alphanumeric Display ページ ・、一 onito にヾージ ・ Bar Code Scanner ページ ・ scale ページ ・ Camera Control ページ ・ Arcade ページ HID デバイスについている各機能は、ページという単位 に分けられている。たとえば、 LED の点灯 / 消灯は LED ペ ージにアクセスすることで可能となるし、ボタンのオン / オ フは Butt 。 n ページを見ればわかる、といった形になってい 1 : Usage Page : Generic Desktop 2 : Usage(Joystick) 3 : C011ection(App1ication) Usage (pointer) 4 : C011ection(PhysicaI) 5 : Usage Page : Generic Desktop 6 : Usage(X) 7 : Usage (Y) 8 : Usage(Rz) 9 : LogicaI Minimum: 0 10 : 11 : Logica1 Maximum: 255 12 : PhysicaI Minimum: 0 13 : PhysicaI Maximum: 255 Unit ( 0 ) 14 : 15 : Report Size : 8 16 : Report Count : 3 lnput : { 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : “ 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 0 ・ 1 1 0 Ⅱ 0 0 ・ 1 0 0 ) 0 1 2 3 4 ロ ) 6 7 8 9 0 1 っ ~ っ ) 4 5 6 「ー 8 9 0 1 2 っ 4- 5 6 7 ー 8 0 1 宀つみ 3 4 - り っ ) 4 ・ 4 4 4 4- 4- 4 4 4 4 5 5 ロ 0 ロ ) 5 5 5 ロ 0 【 0 ロ 0 6 ( 0 ( 0 6 ^ 0 6 6 6 6 6 マーっー 7 マー「ー NO Wrap Linear Preferred State No N Ⅱ 11 position Bit Fie1d Usage Page : Button Usage Minimum(1) Usage Maximum(4) Logica1 Minimum: 0 Logica1 Maximum: 1 Report Size : 1 Report Count : 4 工 nput : { Data Variab1e Abs01ute NO Wrap Linear Preferred State NO Nu11 position Bit Fie1d Data Variab1e Abs01ute NO Wrap Linear Preferred State No Nu11 position Bit Fie1d Report Size : 1 Report Count : 4 lnput : { Constant Array Abs01ute NO Wrap Linear Preferred State NO Nu11 position Bit Fie1d Usage (Hatswitch) Logica1 Minimum: 1 Logica1 Maximum: 8 Physica1 Minimum: 0 PhysicaI Maximum: 315 Unit(18) Report Size : 8 Report Count : 1 lnput : { Data Variab1e Abs01ute クい 758 BSD magazine 208 NO 、 3
2 プ回クラミンクをはしめよう ! 特集 2 FORTRAN から Ruby まで プログラミング言語の歴史を知る の 鴨浩靖 /KAMO Hiroyasu wd@openbsd.ics.nara-wu.ac.jp ゝミンクを しかし、当時の FORTRAN の制御構 リタと呼ぶ。コンパイラによる実行と この記事では、高水準言語の誕生か 造もデータ構造も貧弱であった。それ インタープリタによる実行の中間ない らオプジェクト指向の普及までのプロ らの抽象度の低さは、今日の基準で しは複合的な実行方式もある。たとえ グラミング言語の歴史を、おおさつば 「高水準言語」と呼んでよいものか疑 ば、中間言語にコンパイルして、中間 に振り返る。限られた誌面で流れをつ 言語のコードをインタープリトする方 わしいほどである。 かむことが目的なので、数多くの言ロロ 現代的な手続き型言語の基本的な制 式、実行時に必要な部分を逐次コンパ のうち、ほんの一部しかとりあげるこ 御構造であるプロックと条件分岐とル とができない。お気に入りの言語がと イルする、インクリメンタルコンパイ ープがはじめて現れたのは、 ALGOL りあげられなくて不満を感じる読者も ルなどがある。 60 である。 ALGOL 60 は、 1960 年に最 このような実行方式の違いは、処理 多いだろうが、ご容赦願いたい。 系の性質であって、言語の性質ではな 初の規格がまとめられた。 局水準言語 レコード ( 構造体 ) がはじめて現れ い。したがって、「コンパイラ言ⅱロ 「インタープリタ言語」という言葉は、 たのは、 COBOL である。 COBOL のレ コードの構文も意味も現代的な言語の CPU が直接実行するのが、機械語で 誤りである。 レコードとは異なるが、その先駆とみ ただし、インタープリタで実現する ある。機械語の命令と一対一に対応す なすことができる。 COBOL の言語設計 ことを想定して設計された言語は存在 る命令の列を基本とするプログラミン は 1960 年に完了した。 する。そのような言語のうち、システ グ言語が、アセンプリ言語である。機 動的データ構造の起源は、 Lisp のリ ムの拡張を主な用途とするものを、ス 械語と一対一には対応しない抽象的な ストであろう。最初の Lisp が発表され クリプト言語と呼ぶことが多い。 UNIX 己述を行うプログラミング言語が、高 たのは、 1960 年である。 では、 AWK や perl がよく使われている。 こで、「高水準」 水準言語である。 こうしてみると、現代的な手続き型 とは、機械語への依存性が低い、すな 夜明け 言語の基本的な制御構造とデータ構造 わち、抽象さの水準が高いという意味 は、 1960 年に出そろっていることがわ である。 手続き型言語の基本的な制御構造と かる。しかし、 1 つの言語でそれらを一 実行方式 データ構造の起源を探ってみよう。 通り持っているものが現れるのは、そ れよりも少し後になる。 もっとも歴史の古いプログラミング 言語が FORTRAN である。 1957 年に最 高水準言語で書かれたプログラムを 多機能と単純さ 機械語 ( または、アセンプリ言語 ) 初のリリースが行われた。 計算式を書けば数値計算をさせるこ よるプログラムに変換することを「コ 1960 年代も後半になると、より高機 とができるというのは、今となっては ンパイルする」といい、それを行う処 能な言語が求められるようになってき 当たり前のことだが、当時としては画 理系をコンパイラと呼ぶ。高水準言語 期的だった。計算式から機械語命令列 で書かれたプログラム、または、プロ 0 FORTRAN と COBOL と ALGOL 60 の グラムを構文解析したものを解釈実行 を生成することから、 FORTRAN コン 機能を兼ね備え、さらに新しい機能も パイラのことを「自動プログラミング」 することを「インタープリトする」と ふんだんに盛り込んだ言語として作ら いい、それを行う処理系をインタープ と呼ぶ人までいたらしい。 BSD magazine 775 一三ロ 2000 No. 3
2 記号処理 ロロー一一し isp 系、 P 「 0 g 系、 ML 系 五十嵐新女 /lgarashi Yoshime yoshime@openbsd.ics.nara-wu.ac.jp 鴨浩靖 /Kamo Hiroyasu wd@openbsd.ics.nara-wu.ac.jp 立木秀樹 /Hideki TSUIKI tsuiki@i.h.kyoto-u.ac.jp 新出尚之 /Nide Naoyuki nide@ics.nara-wu.ac.jp ) ゞ 特集 2 の 、ンクを ほとんどの Lisp にはいろいろな拡張が ProIog Lisp 施されていて、実質的には手続き型言 語と化しているともいわれる。 Lisp の問題点のひとつは、数多くの プログラミング言語として論理を使 L i s p の歴史は意外に古く、 おうという考え方は 1970 年代初期に現 Lisp システムが作られ、言語仕様がバ FORTRAN とほば同時期の 1957 ~ 60 年 れた。この考え方に基づき実現された 頃、 MIT の John McCarthy らによって開 ラバラなことであった。そこで Common Lisp と scheme という 2 つの標 プログラミング言語の一例として 発されている。主な応用は人工知能 / 数 prolog ( その名も PROgramming in 準仕様が別々に作られ、これらの処理 式処理 / 機械翻訳などの記号処理分野 LOGic の省略 ) がある。 prolog 処理系 系が広まった。前者は何もかも詰め込 であるが、他にも幅広い応用分野を持 は、 1974 年にフランスのマルセイユ大 んだ巨大な仕様、後者はコンパクトな っている。近年は特にユーザーインタ 仕様と ca Ⅳ cc に代表される柔軟な制御 学で colmerauer らにより開発された ーフェイス記述言語としても注目され、 機能が特徴である。近年は ISO による その後イギリスのエジンバラ大学で その代表格が Emacs Lisp であることは、 もう 1 つの標準、 ISLISP の策定も進ん DEC-IO pr 。怖 g という効率の良い処理 読者もご存知だろう。 系が作られ、事実上の標準となった。 でいるようである。この他にも前述の 記号処理言語の一般的性質として、 現在では ISO の標準もできている。日 Emacs Lisp 、統計機能を組み込んだ 記号やリストを基本的なデータ型とし 本では 1982 年に発足した第五世代コン XLISP-STAT など、独自仕様の Lisp が て扱える。 Lisp ではリストを、データ ピュータブロジェクトで中心となる言 を書き並べて括弧でくくることで表し いろいろある。 語として論理プログラミング言語が採 common Lisp は言語仕様が大きいた ( たとえば「 ( a b c ) 」 ) 、リストの操 用され、並列論理型言語 KLI が作られ めか、フリーな処理系は少ない。 作がプログラミングの中心となる FreeBSD の ports には 3 つ (CMU (Lisp の名も "List processor" からきて た。 prolog の特徴を「階乗を求めるプロ いる ) 。リスト処理に要するメモリは処 Common Lisp と GNU Common Lisp と グラム」を作りながら紹介しよう。 CLisp) 、 NetBSD の pkgsrc には 1 つ 理系が管理するので、ユーザーが記憶 まず、プログラム中に階乗を表す ( c L i s p ) しか含まれていない 管理に悩む必要はない。 fact 述語を定義する ( リスト 2 ) 。 OpenBSD の ports には、まだ、 1 つもな Lisp の大きな特色のひとつは、プロ 間題を再帰の考え方を使って表現す い。筆者の一人は、 GNU Common グラムもまたリストで表されることで Lisp を OpenBSD でコンパイルすること ると、ほとんどそのまま prolog プログ ある。プログラムを普通のデータと同 ラムとして書くことができる。これを に成功し、使っているが、 ports 化には 様に容易に処理できるのである。リス 処理系に与え、次に「 5 の階乗は ? 」と ト 1 は Lisp の一種 scheme で書いた、階 まだ成功していない。 s cheme の処理系はたくさんある。 質問してみる。 乗を求めるプログラムである。 また、最も単純な「純 Lisp 」では、 FreeBSD の ports にも、 NetBSD の pkgsrc 副作用や逐次実行がなく、関数呼び出 にも、 OpenBSD の ports にも、複数の X 120 ? scheme 処理系が含まれている。 しだけでプログラムの実行を進めるの yes も特徴で、これが Lisp を関数型衄に 分類する根拠になっている。しかし、 階乗を定義したものと質問とを合わ BSD magazine 777 2000 No. 3