プログラム環境 (1) [コメントする]

プログラム環境


スレッド作成 : あきよしさん
 (1998/1/9 14:20:19)

当時のプログラム環境について語らせてください (^^;


LOGO

あきよし さんのコメント
 (1998/1/9 14:30:00)

「PC-9801とPC-8801の互換性」のページで LOGO に付いて書かれていましたが・・・

まず、ぴゅう太やファミベにはグラフィック機能が無いので、タートルグラフィックも存在しなかったことをお知らせします (^^;


Logo については、参考ページに熱く語ったように、日本では大きな勘違いを持って受け止められています。
あれは、BASIC 等のように「何かを開発する」言語ではなく、パソコンと戯れるための言語です。

パソコンは機械に過ぎませんから、自分の命令を素直に受け止めます。
プログラムを行ったことがある人はわかるでしょうが、パソコンが素直に命令を実行すると、十中八九、意図と違うことをします(笑)

あえてそういう経験を子供にさせ、デバッグを通じて「論理的思考」を養わせるのが Logo の目的です。

この「パソコンと戯れることでプログラムを開発する」という方針は、この後 SmallTalk に影響を与え、HyperCard 、InterfaceBuilder、VisualBasic などの、 Visual プログラム環境を生み出します。

現在、 Logo は LegoLogo とともに、子供たちの教育に使用されています。

魔法使いの森のロゴのページ


Mind

あきよし さんのコメント
 (1998/1/9 14:35:24)

98 上で最初に開発された言語なんですけど、すごいです。
しかも、まだバージョンアップが行われていると最近知ったので、もっと驚いています(笑)

「日本人なら」という前提条件付きで、非常にわかりやすいプログラム言語です。
なんせ、使っているのが普段接しているとおりの日本語なんですから。

最近では Macintosh の AppleScript なんかでも日本語のプログラミングを可能にしていますが、文法的にぎこちない面は否めません。
しかし、Mind では文法的に日本語に近く、それでいてコンピューター処理に適した言語を作っているのです。

仕掛けは簡単。Mind は日本語版の Forth だといってもいい言語なのです。

マインド開発元


Forth

あきよし さんのコメント
 (1998/1/9 14:43:44)

「フォースを使え!」とヨーダも言ったように、宇宙的に有名な言語です(嘘)

元々アマチュア天文家が望遠鏡の位置を自動制御するプログラムを作成するために作った言語なのですが、アマチュアらしく無茶なアイデアが取り込まれています。

この言語は、なんと自分で勝手に育って行くのです!
プログラマーが一旦定義した命令は、勝手にファイルに残されて、いつでも使用可能になります。

この斬新なアイデアゆえに「第4世代言語」を名乗り「Fourth」と名づけられたという・・・
u が抜けているのはその人が使っていたマシンでファイル名が5文字しか使えなかったから。

言語的には、命令以外はすべてデータとみなしてとりあえずスタックに置いておき、命令を見つけるとスタックのデータを演算する、という、単純明快なものです。
最後に動詞(命令)がくるために日本語に近く、Mind のアイデアもここから来ています。

このような記述を「後置記法」というのですが、何が命令で何がデータか、を見分ける必要がないため、処理系が軽くすみます。
そのため、プリンタに応用されたり(PostScript)、PnP のための設定言語に利用されたり(PCI カードの拡張規格)しています。

#PostScript って、そのものずばり「後置記法」って意味なのね。


Lisp

あきよし さんのコメント
 (1998/1/9 14:50:24)

Forth と並んでマニアが喜ぶ言語です。

Forth と正反対に、命令は必ずデータの前に来ます。
普通の言語と同じだって? 足し算するのも (Add 1 2) って書くんですよ!?

Forth ではスタックを使うことで命令とデータの区別を簡単にしましたが、Lisp ではそうは行きません。
その代わり、一つの命令のまとまりを ( ) で括ることで、やっぱり簡単に処理できるようにしています。

Lisp の命令は、すべて「関数」としてとらえられています。たとえ IF のような条件分岐であっても、関数として値を持つのです。

Lisp はたった一つしかデータ型を持たない言語であることでも有名です。
普通の言語であれば、配列とか構造体とか、ややこしいことがあるのですが、Lisp はツリー構造を持つ「S式」のみですべての型をあらわします。


言語系が簡単、命令はすべて関数、データはすべてS式。
このような単純明快な特徴が、マニア好みの言語のゆえんでしょう。


Pascal

あきよし さんのコメント
 (1998/1/9 14:58:09)

BASIC の次にくる言語と期待された言語です。実際には、同じ言語を祖先に持つCに食われちまいましたが。

Pascal の特徴は、なんといってもその英語的な美しさです。
きっちりかっきりと、すべてを正しく作らなくてはプログラムは動いてくれません。
C言語ならすべて「関数」と呼んでしまうようなものでも、数学的な意味にしたがって
Function (関数)

Procedure (手続き)
に区別して考えます。

代入に = を使うなんてことはしません。 = は「等号」なのですから、同じであるかどうかの検査なのです。代入は := と書きます。

変数を定義するにも、正しく Integer とか Strings とか書かせます。


Pascal の考案者は、この言語が BASIC の次の標準になるべきだと思っていました。
そのため、教育的配慮から上のような厳密な言語系を作ったのです。

また、各機種に移植しやすい仕掛けも作っていました。
どんな機種でも、仮想CPU の上でプログラムが動作するのです。この仮想 CPU の解釈できる機械語を P コードと呼んでいました。
この考えは、現在の JAVA に通じるものです。

しかし、現実は厳しく、正しく作らないと動かない pascal よりも、いいかげんでも何とかなる C 言語が普及したのですが・・・


Saiey さんのコメント
 (1998/1/9 15:52:42)

あきよしさんの知識の豊富さには、感心するばかりです。すごい。

LOGOって、はやっていた当時に雑誌で紹介されたのを見て、「で、それでどうやってソフトを作るの?」って思ってました。そういうものじゃなかったって知ったのは、あきよしさんのページを読んだからですね。

Mindって初めて聞きました。で、ページを見たんですけど・・・。わかりやすいっていうのはわかりますけど、なんか、入力が大変そうだなぁって・・・。(^^;


BASIC

あきよし さんのコメント
 (1998/1/13 10:56:00)

そういえば、もっとも当時一般的だった言語の「BASIC」の話をしてませんね。

大きく分けて、MicroSoft系BASICと、SHARP-Hudson系BASIC がありました。
カーソル位置を指示する命令が、LOCATE が前者、CURSOR が後者でしたね。(ファミべは、Hu系なのに LOCATE でしたが)

MicroSoft が Altair 、そして Apple// にBASIC を供給して大きくなったことは有名ですが、その後会社が行き詰まったときに PC-8001 に搭載する BASIC の話が来て倒産を免れたのは案外知られていない話です。
このころ、「MS BASIC は速い」という定評がたちました。

しかし、PC-9801 では MicroSoft は BASIC を供給しようとはせず、NEC が独自に互換品を作り上げます。
しかも、これは MS の BASIC よりも高速に動作するもので、MS-BASIC の速度神話を打ち破るものとなりました。


TINY BASIC

あきよし さんのコメント
 (1998/1/13 11:20:31)

ワンボードマイコン上で、ユーザーが自分でBASICを作るのを楽しんでいたころ、DDJ 誌がそれらのBASICを統括すべくリファレンスをまとめました。
それが、TINY-BASIC です。

主な特徴は

・変数は A〜Z の26個で、すべて16bit(8bit でもよい)整数
・INPUT , PRINT ,LET, IF 〜 THEN , GOTO ,GOSUB,RETURN の7命令をサポート
・乱数を用意する(方法問わず)
・文字列は PRINT 中で使えれば良い
・演算はすべて整数型

というものでした。

最低限の仕様ですが、これだけあればゲームを作るには十分です。
そのため、この仕様は日本ではGAME-BASICなどとも呼ばれていました。


RE:BASIC

Saiey さんのコメント
 (1998/1/13 16:24:30)

なるほど、それでNECとMicrosoftは仲がいいんですね。
でもそれでMicrosoftが倒産してたら、今のパソコン界はどーなってたんでしょうねぇ。

ところでMZってHu系ですか?っていうか、SHARP以外のパソコンでHu系なのってどういうのがあるんでしょう?


Hu 系BASIC

あきよし さんのコメント
 (1998/1/13 18:52:23)

あるんでしょうか? SHARP 以外に(笑)
でも、当時は NEC 、SHARP が2大勢力だったので、「MS 系」と「Hu系」に別れていたのは間違いではないでしょう。

とりあえず、SHARP と関係の深かった任天堂は、NS-Hu BASIC という名前で Hu BASIC を採用していました。

X68k の OS 、Human68k というのも、この Hu から来ているのかな?

Hudson って、戦略からして当時は「日本の Microsoft 」を狙っていた節があるような気がします。


Saiey さんのコメント
 (1998/1/13 22:11:23)

日本のMicrosoft・・・。昔ハドソンがパソコン用OSや言語を作っていたなんて、今は知らない人が多いでしょうね。

今もそういうのやってるのかなぁ。


Hu-BASICとS-BASIC

Yabuki さんのコメント
 (1998/1/16 19:29:17 -
E-Mail)

>カーソル位置を指示する命令が、LOCATE が前者
>CURSOR が後者でしたね。
ではなかったと思います。

SHARPの8ビットのコンピュータには2種類BASICが
存在しました。S-BASICとHu-BASICです。

それでカーソルの位置指定の命令は、
Hu-BASICでもLOCATEで、S-BASICがCURSORでした。
Hu-BASICの基本内容は当時のMS系とほとんど同じ
でしたが、S-BASICは世代が古いベーシックという
感じでした。(MZ−700では。)

Hu−BASICの「Hu」は当然Hudsonの頭2文字
なのだから、S-BASICの「S」はSHARPのSなの
でしょう。

ただしMZ−2500にHu−BASICは存在し
ません。かわりにM25というBASICが存在し
ました。X1にもS−BASICはありません。

多分、シャープが最初にMZ−80Kにのっけた
BASICの互換性のためにS−BASICはあった
のではないでしょうか。


あきよし さんのコメント
 (1998/1/19 11:18:15)

なるほど。そうでしたか。勉強になります。

# S と Hu の違い

以前に私のページを見てくださった方から MZ-80B をいただいたのですが、たしか GX-BASIC(だっけかな)というマニュアルも付いていました。

GX-BASIC って、確か Microsoft が力を入れていた、次世代 BASIC だったはずです。(普及しなかったけど)

BASIC だけでもたくさんあるというのは、クリーンコンピューターの面目躍如なんでしょうね。


Saiey さんのコメント
 (1998/1/19 11:45:17)

GX・・・。なんかかっこいい名前。でもなぜ、Xシリーズ用でないんだー!。
# Great X-BASIC (^^;


GX うんちゃら

あきよし さんのコメント
 (1998/1/26 19:06:49)

なんか、 GX って「すげー」とか「ひゅーひゅー」とかいうような意味合いらしいです (^^;
コンピューターマニア・・・ハッカーが好む用語。

最近も Apple が QuickDrawGX とかいうテクノロジーを開発していたし。(これ以上の開発は断念してしまったけど、すでに Mac には標準添付)

発音的には Geek も同一のものとして捕らえて良いのかな?
Geek Port ってやつは、BeBOX に付いていました。

あ、よーく考えたら、 GX ってコンピューターの用語にたびたび登場するけど、全部消えてなくなってる!(笑)


ちょっと新しい話ですが

KFELLOW さんのコメント
 (1998/1/27 04:40:12)

昔はMSと並んで元気だったLattice、一時期はかなりさびしそうでしたが(良く知りませんがきっと組み込み用に専念してたんでしょう)、最近またその名前を見るようになりましたね。

私が初めて購入した言語はLattice C Personalというヤツでした。その時売られていたLattice Cの一つ前のバージョンにC-TOOL98というライブラリがついてて、それでいて2万くらいとお買い得だったのを憶えています。

とは言うもののすぐ後にTurbo Cがやってきて、市場は荒らされていったのでした。私も買ってしまった。

そういえばその頃日本でのTurbo Cをどこが扱うかでいろいろもめたんでした。あの頃のざべにいろいろ書いてありますね。実家に帰れば、まだとってある...サザンパシフィックとMSAですね...


TurboPascal

あきよし さんのコメント
 (1998/1/27 10:21:42)

大学の頃に TurboPascal を授業に使っていたのですが、むちゃくちゃ速いんで感動していました。

その頃は BASIC 中心のユーザー、X68k でアセンブラと C を少しやっていただけなのですが、「コンパイルは長い」というイメージがあったのです。アセンブルですら十分長い。

それが、286 の 98 で TurboPascal を使うと、まるで BASIC で実行したかのように、瞬時に走り出す。
それでいてしっかりとコンパイルされていて高速実行なのだから・・・惚れ込みましたね。

その後アルバイトしていたゲーム会社で、開発ツールを作る必要があって TurboC を使ったら、普通より速いとはいっても瞬時には実行してくれないのだもの。がっかりしました。

#TurboPascal が良くできすぎているだけで、TurboC は全然悪くないのですが


ハンドアセンブル

あきよし さんのコメント
 (1998/2/18 10:35:06)

「開発環境」とだけ名づけたスレッドなので、プログラム言語が「ない」という環境について・・・

昔は、アセンブラなんてものはなくて、ノートに書いたアセンブラ命令を、自分で機械語に翻訳するのは当たり前の作業でした。
これが当たり前でなくなったのは、Z80くらいからでしょうか・・・命令数がやたらと増えて、辞書引きだけでも大変な手間になりましたから。

#6502 は、16x16 の表、1枚に命令が収まるけど、Z80 ではプリフィックスがあるので数枚になってしまう。

今でも 6502 の $60 が RET だったことを覚えています。
Z80 は・・・ C9h だったっけかな?


ハンドアセンブルだと、命令を追加して番地がずれると、修正がえらい騒ぎでした。
だから、みんな「何もしない命令」である NOP を、所々に大量に挟んでおいたものです。


NOP

Saiey さんのコメント
 (1998/2/18 11:05:31)

Z80でハンドアセンブル、やってました。
でも、大きいのを作ろうとして、番地がずれたときの対処が大変すぎて、挫折しました。

なるほど、NOPをたくさん入れておけば良かったんですね!。そんなこと、全然考えなかったです。

こういうのは経験値の差かなぁ?
・・・私が無知なだけか。(^^;


アセンブラ

あきよし さんのコメント
 (1998/2/18 12:52:08)

ついでにアセンブラの話。

最初は、命令を入れるとそのコードを出力してくれる、という、「ハンドアセンブルの補佐役」だけでも重宝したものです。

やがて、番地だけは自分で入力してやる「1パスアセンブラ」が登場し、そのうち、ラベルを付けておけば自動的にアドレスを割り出してくれる、「2パスアセンブラ」が出てきます。
かってに無駄を省いて最適化する、「nパスアセンブラ」なんて変なものもありましたっけ。

1パス目でソースを読み込んで命令を元にアドレス値を作り出し、2パス目で再びソースを先頭から読んで、アドレス情報を元に実際のコードを生成する。
後には1回のパスで正しいアドレスを持ったコードを作成するようなアセンブラも現れましたが、いまでもこのような処理の基本は2パスです。

WebBrower の「テーブル」生成も、2パスだったりしますね。これは、一度テーブルの中見を全部確認しないと、テーブルの大きさをどれくらいにして良いかわからないためです。


No OPration

あきよし さんのコメント
 (1998/2/18 12:59:53)

NOP って命令は、「何もしません。でも、実行速度はかかります」といわれても、何がありがたいんだかわからないですよね (^^;

ほかには、自己書き換え(これも今では使わないテクニック)の応用として、良く似ているルーチンを2つもつよりもその一部を書き換えて代用する、なんていうときに、どうしても書き換え部分のサイズが合わないと、大きいほうに合わせて NOP を入れたりしました。

・・・ハンドアセンブル用とか、自己書き換え用とか、NOP の用途には今では使わないテクニックが多いのですけど、今の CPU では NOP は何に使っているのでしょう (^^;

#・・・と思って今調べたら、 PowerPC には NOP という命令は無いようだ (^^;


NOPの用途

Saiey さんのコメント
 (1998/2/18 16:16:30)

やったことないんで推測ですけど、例えばI/O周りでウェイトをかけるときとか、使われません?


なるほど

あきよし さんのコメント
 (1998/2/18 17:23:45)

たしかに、昔はそういうこともしましたねぇ。
それならば・・・とちょっと調べてみますと、こんな感じでした。

SHシリーズ(日立製組み込み用 RISC ) NOP あり
i960 (インテル製3D計算用 RISC) NOP なし
V60 (NEC 製電話交換機用 SISC) NOP あり
PowerPC(モトローラ製パソコン用 RISC) NOP なし

やっぱり、組み込みや制御など、I/O操作を中心に想定された CPU には、NOP がついているようです。
3D計算や、パソコンでの使用を前提にしたものには NOP がありません。

ほかの CPU も調べられると面白そうだけど、とりあえずはこんな所です。


逆アセンブル

あきよし さんのコメント
 (1998/2/18 18:47:55)

私が最初に所有した、CRT に接続可能なコンピューターは「ファミリーベーシック」なのですが、こいつで逆アセンブラを作成したことがあります。

当時は機械語のことも全然分かっていなくて、逆アセンブラをどのように使うものかも良く分かりませんでした。
で、ひたすら機能をよくしようと拡張するうち、フリーメモリは無くなってしまいました (^^;

まぁ、こいつで BASIC の ROM の中を覗いたりして、勉強にはなったのですが・・・

自分で作るには、アセンブラよりも逆アセンブラのほうが簡単ですね。


感動した逆アセンブラと言えば、 X68k のフリーウェア、dis.x です。
単純にメモリをアセンブラリストとして表示するのではなく、CPU の動作を真似しながらプログラムの流れを追い、データとプログラムを分離して、データ部はアセンブラリストではなくデータとして表示します。
68k のCPU 特性を利用したり、SJIS の特性を利用して文字列を探し出したり、とにかくあのてこの手で「人間が書いたような」ソースコードを作成してしまうのは感動的でした。


プログラム環境 (1)」へ続く。


[HOME] [TOP] [HELP] [FIND]

Mie-BBS v2.14 by Saiey