レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
おちゃめくらぶ掲示板
-
BASIC誕生50周年記念日
本日5月1日はBASICが誕生して50年という記念すべき日らしいにょ。
http://gigazine.net/news/20140501-fifty-years-of-basic/
BASICは初心者向けの学習のための言語として生み出されたのだけどBeginner's All-purpose
Symbolic Instruction Codeの頭文字をとってBASICになったとはいえ「BASIC(基本)」という
単語からこじつけてつけたネーミングとも言えるにょ。
つまり、最初から簡単に使えることを目標にしたプログラミング言語というわけにょ。
BASICではどうしてもGOTOを多用しがちでありスパゲッティプログラムになってしまうことも
多い(これも本当はGOTOがあるからダメではなくプログラムの作り方にも問題がある)ため
他言語の経験者からは嫌われてしまう場合もあるけどそれは言い換えれば行き当たりばったり
で作ってもちゃんと動くコードが書けるというお手軽さを意味するにょ。(BASICでは多くの
処理系で変数も宣言無しで使えるお手軽仕様となっているけどこれも宣言をした方が間違え
にくいため初心者には優しいというメリットを主張している人もいる)
とはいえ、GOTOをできるだけ使用せずにプログラミングできる構造化命令(WHILE〜WEND、
REPEAT〜UNTIL、DO〜LOOPなど)が加わっていくことにはなったけどね。(GOTOを使用する
ことが前提の仕様となっているBASICでGOTOを使わずに組んでも可読性が上がるという単純な
話ではない)
BASICが良い点は多くの処理系がインタープリタ型であるということにょ。
コンピュータは本来マシン語以外は理解できないけどインタープリタ型は随時マシン語に
変換作業を行うため速度面ではどうしても不利になってしまうにょ。(とはいえ、マシン
パワーが上がればインタープリタ型でも十分な速度が出るのはプチコンを見ても明らか)
しかし、インタプリタ型であるため入力して即実行が可能になるにょ。(逐次変換である
ため一旦BREAKで停止して続きを再実行することも容易に可能だし、特定のルーチンのみの
動作確認をすることも容易に可能)
そして、プログラムリストの形で公開されることも多いため他者が作ったプログラムの
解析も容易にょ。(これがマシン語だとダンプリストでの公開がメインとなっていて
解析するためには自力で逆アセンブルする必要が多かった)
そして、ベーマガなどの一般ユーザーが作ったプログラムを掲載する雑誌が多く発売される
ことで「自分が作ったプログラムを不特定多数の人に公開」「掲載プログラムを元に学習
してオリジナルのプログラムを制作」という循環も進んだにょ。
今はネットによって不特定多数の人に公開するということは極めて簡単になったものの
制作者がソースコードを公開していない限りはそのプログラムの仕組みはかつてのマシン語
プログラムの解析のように自力で解析していくしかないにょ。
BASICにはメリット、デメリットの両面はあるけどやはり個人的にはメリットの方が大きいと
思うにょ。
BASICのデメリットはある程度上達してそれなりに規模の大きなプログラムを作らないと
出てこないため初歩的なプログラミングを学んでからは他の言語に移行すればいいだけの話
だからね。
これがいきなりハードルが高い言語に手を出してしまうと途中で挫折してしまう可能性があり
プログラミングの楽しささえ分からないまま終わってしまうことになるにょ。
とはいえ、80年代(8ビットパソコン全盛時)のようにパソコンを買えば標準でBASICが
付いてくる時代ならばそれが最も初心者が手を出しやすいものだったけど今となっては開発
環境は多種多様に存在するため初心者に対してBASICを推す理由も弱くなっているにょ。
(初心者向けならば多くの人が使っていて情報を多く入手できる開発環境の方が有利であり
言語仕様だけで初心者向けか否かを判断するというのは良いとはいえない)
自分専用のPCを持ってない人に対してならば最もハードルが低いプチコンをオススメするん
だけどね。
自分が思い描いているものが形になり、「プログラミングというのは楽しいものである」と
いうことが理解できることが初心者にとっては何よりも重要になるにょ。
そして、自力で学習ができる環境があるかという点も重要になってくるにょ。(他人に教えて
もらう場合でも現役で使っている人が少ないと回答を得られない場合が多い)
さて、話は変わるけど私がBASICに出会ったのは今から30数年前にょ。
私の記憶が確かならば科学(今は無き学研の「科学」と「学習」シリーズ)にコンピュータの
記事として掲載されていたにょ。
BASICというものを使えば自分でコンピュータゲームが作れると知って近所の電器店にその
コンピュータ(要するに「パソコン」のことで当時は「マイコン」と呼ばれていることが
多かった)のカタログをもらいにいったにょ。
最初に手に入れたのは「PC-8001」と「MZ-80K」にょ。
それから頻繁にカタログだけをもらいにいきいつの日か手に入れることを夢見ていたにょ。
(8ビットパソコンおよびPC-98はほぼ全機種のカタログを所持していたけどあまりに大量に
あったため98年に引っ越した際にすべて処分した)
しかし、80年頃は安い機種でも本体だけで10数万円、ディスプレイをセットだと20数万円
という実売価格は小遣いやお年玉で何とかなる金額ではなかったにょ。(そんな中で81年に
定価89800円のパピコンことPC-6001が登場してしばらくして定価5万円以下という安価な
MSXが登場して何とか手の届きそうな金額まで下がってきたけどそれはもう少し後の話)
1983年に学校にポケコン(PC-1251)を持ってきている人がいて変わった関数電卓だと思って
いたらコンピュータであったのに驚いたにょ。(ちなみに関数電卓は三角関数や指数、対数
関数の計算のために82年頃に買って持っていたため店頭でポケコンを見たときには見た目から
コンピュータではあく電卓の仲間だと思っていた)
その小さな画面(24桁1行)でちゃんとゲームも動いていたからね。
そして、すぐに電器店に行ってPC-1251がどれくらいの金額なのかを見てきたにょ。
すると2万円台だったので1年間ほどお年玉と小遣いを貯めれば何とかなる金額だったにょ。
そして、翌84年に念願の初めての自分用のコンピュータであるポケコン(PC-1245)を手に
入れたにょ。
PC-1251ではなくPC-1245だったのは単純に予算の都合にょ。(さすがに1年間お年玉にも
小遣いにも手つかずというのは無理だし)
事前に互換性があるということが分かっていたので少しでも早く手に入れたかったためにょ。
というわけで、今年で私のポケコン歴(=BASICプログラミング歴)は満30年になるにょ。
PC-1245を手に入れてからというもの片時も手放さずプログラミングを行っていたにょ。(その
ため学年トップクラスの成績だったのが数ヶ月後には学年で20位くらいまで下がって
しまったし、1.0だった視力もメガネが必要なレベルにまで下がってしまった)
とはいえ、メモリは1486バイト(公称は2.2KBだったけどこれは固定変数やVRAMやBASICの
ワークエリアを含んだ合計サイズ)しかなかったし、当時は作ったプログラムをセーブする
手段を持たなかった(本体だけを買うのが精一杯でカセットインターフェイスを買えな
かった)ということで作ったプログラムはすべて紙にリストを書き写していたにょ。
BASICを覚えてからは店頭に置いてある展示用のパソコンでプログラムを作って遊んでいたにょ。
やはり最も多く入力したのが自作の100m走ゲームにょ。
2つのキーを交互に押すだけのものなので2、3分あれば作れたからね。(ある程度の機種依存
命令はベーマガやPioのリストを見て勉強していた)
友人が持っていたPC-8801mkIIや学校のマイコン部にあったPC-8001mkIIでもプログラミングを
していたにょ。(マイコン部はPC-8001mkIIが1台だけという環境だったのでその順番待ちで
自前で用意しているポケコンを使っている時間の方が長かったけど)
そんなPC-1245だけど不慮の事故で壊れてしまいPC-1401を買ったにょ。
本当は大画面のPC-1350が欲しかったけど手元にポケコンがないというのが困るので全財産を
はたいても特売で売られていたPC-1401を買うのが精一杯だったためにょ。(すでに後継機で
あるPC-1431が出ていたためPC-1401は安価になっていたけどPC-1431はマシン語が使えなかった
ので安くてマシン語も使えるPC-1401を買った)
PC-1401はPC-1245用に作ったプログラムもほとんど手直し無く動作した(リロケータブルでは
ないマシン語プログラム、BASICでもROMルーチンをコールしているプログラムやPOKEを使って
VRAMに直接表示していたプログラムは手直しが必要だった)わけだし、何よりメモリが3534
バイト(公称4.2KB)もあったというのが大きかったにょ。
とはいえ、やっぱり大画面の魅力に惹かれて結局PC-1350も買ってしまったにょ。(当時は
シャープのポケコンとしては最大となる24桁x4行、150x32ドットの液晶)
ただし、画面が大きくても速度はPC-1401と同レベル(PC-1245より少し速い程度)だし、
メモリは3070バイト(公称5KB)と大画面の割りに少なかったのでオールBASICでは
アクション系のゲームやグラフィックをふんだんに使ったゲームは厳しかったにょ。
それは、ポケコンマシン語ブックに掲載されていたBASICコンパイラを使うことである程度
解決されたにょ。(コンパイラを使うとフリーエリアが1KB以下になるし、少しでもフリー
エリアを稼ぐ構造になっていて2段階ローダを採用していたためコンパイルは非常に面倒
だったためあくまで速度が必要なもののみに使用していた)
PC-1350を買ってすぐに漢字が使えるPC-1360Kが発表されたのは少しショックだったけど
速度はPC-1350の方が少し速かったのでその点だけはショックが薄れたにょ。(PC-1360Kが
遅かったのは恐らくバンク切り替えが発生しているためだと思われる)
そして、PC-E500が1988年に登場したにょ。
40桁x4行(240x32ドット)というポケコンの中では最大の液晶画面に加えてメモリは標準で
32KB(フリーエリアは28600バイト)もあったからね。
PC-1245の約20倍、PC-1350と比べても約9倍のメモリ(フリーエリア)にょ。
そして、演算速度はPC-1350の約5〜7倍と超高速だったにょ。(PC-8801に匹敵するレベルの
高速演算であり、同時期に発売のZ80互換CPUを搭載した工業高校向けポケコンのPC-G801
よりも少し高速だった)
使われているCPUは最大1MBのメモリ空間にアクセス可能な最先端のシャープオリジナル8bit
CPUのSC62015だったにょ。(私はPCやポケコンなどを今までに30台以上購入してきたけど
買い換えによって一番感動できたのがこのPC-E500への買い換えによるものでこれは
1世代違うだけで5〜7倍も高速になるというのは普通はあり得ないレベルだから当然)
この速度によってPC-1245/1401ではマシン語に頼っていたり、PC-1350ではコンパイラが
ないと作れなかったゲームもBASICだけで作れるようになったにょ。
もっとも、速いことに感動したのは最初だけでPC-1350から5〜7倍程度速くなるくらいでは
数10倍の高速化ができるコンパイラよりはさすがに速度面では不利になったにょ。
それでもBASICプログラムを高速化するテクニックを身につけるで平均で3倍くらい高速化
(PJやベーマガといった雑誌掲載のプログラムをBASICだけで2〜9倍に高速化できた)が可能に
なってきたためPC-E500のBASICのみでPC-1350のコンパイラ並の速度のゲームが作れるように
なったにょ。(シュプールなどの疑似3Dゲームはこのような高速化テクニック無しでは実現は
不可能なレベル)
◎E500BASIC高速化のすべて
http://ochameclub.web.fc2.com/E500/TECH/basic1.htm
91年にはメモリが標準で64KBに強化された後継機のPC-E550が発売され93年には構造化命令が
加わったPC-E650が発売されたにょ。(ちなみにこのPC-E650はE500からCPUは変わってない
もののシャープの市販向けのポケコンとしては最終モデルとなり2000年代前半まで10年以上の
長い間継続販売された)
PC-E650が発売された当時はPC-E500+256KB RAMカードで不満はなかったのでPC-E650を
買ったのはPC-E500の調子が悪くなってからにょ。(98年に秋葉原で購入)
PC-E500関係についてはおちゃめくらぶのWebサイトの方で詳しく書いているのでそれを
参考にしてもらえたらいいにょ。
http://ochameclub.web.fc2.com/E500/POCKECOM.HTM
ポケコン以外での私のBASIC使用状況はどうなのかというと(ザウルスのICカード使用機種
でも使用できた)シャープの電子手帳用BASIC、PS2用の「BASIC STUDIO」、Windows環境
ではVisual Basic、99BASIC、(BASICとは少し違うけど)HSPなどを使用してきたにょ。
とはいえ、PCでのプログラミングはポケコンほどはハマらなかったため必要最小限の
知識しかないにょ(自分しか使わないツールを作ったりなど)
というか、VBはBASICを使っているという感覚がほとんど無かったため買ってからほとんど
使ってないにょ。(JavaであるVJ++は先日片づけた際に箱が見つかったけどVBは見つから
なかったため一体どこにしまったのやら・・・)
ポケコンBASIC以外でまともに使い込んだBASICはDSiや3DSで動作するプチコン(mkIIを
含む)だけにょ。
プチコンは速度面だけを見ればPC-E500と比べて演算速度は(BASIC同士で比較したら)
100倍くらい速く(描画速度は数100〜数1000倍高速)、画面も256x192と広大でポケコンと
比べたら圧倒的に優れているにょ。(ポケコンのマシン語と比較すればさすがのプチコンも
演算速度のアドバンテージは無くなるけど)
何せよほど凝ったゲームを作らない限りは60fpsで動作するわけなのでインタープリタ型
BASICであってもマシンパワーの向上によって十分に実用レベルの速度を得られるという
のを証明して見せているにょ。(私が限界まで高速化したポケコンゲームであっても
オールBASICでは多くのものが7〜10fpsしか出ないけどこれはプチコンより100倍以上遅い
というのを考えれば仕方がないし、演算速度は100倍、描画速度は数100〜数1000倍遅い
と考えれば7〜10fpsというのはすごく高速化されていることが分かると思う)
そして、これは高性能なPCでの動作ではなくDSiというPCよりも遙かに劣る性能でしかない
携帯ゲーム機でさえその性能ということにょ。
しかも、携帯ゲーム機だからこそポケコンと同様に普通に持ち歩いて使うことも可能にょ。
しかし、ポケコンと比べるとハードウェアキーボードを持たないということや演算精度が
低い(PC-E500シリーズは有効数字20桁の高精度演算をサポートしている)という点や、
バッテリ駆動時間が短い(プチコンは普通に使えば本体のスペックのためやむを得ない
けど4〜6時間程度の使用でバッテリ切れになるのに対してPC-E500ならば単四電池で公称
70時間駆動ということでバッテリを気にせず使える)という点はネックとなっていて
ポケコンを完全に置き換えられるものではないにょ。(PC-E500はBTEXT命令によって
メモリが許す限りBASICプログラムを同時編集が可能だったし)
それでもPCでプログラミングをするよりはお手軽だし、何よりセルフ開発であるため
携帯機単体でプログラミング可能でコンシューマゲーム機であるが故に環境が固定である
というのがプログラムを作り込む(極限までの高速化を行ったり、1画面プログラムのように
制限付きのプログラムを作ったりとかUIを最適化したりする)際には非常に魅力となるにょ。
機種によって仕様が異なるスマホの場合は機種ごとに最適化の方法が変わってくるわけ
だし、画面解像度が異なるだけではなく文字サイズも簡単に変更ができるため1画面
プログラムなんてもはや全く無意味な制限となっているにょ。(私がプチコンを買った
最大の理由は1画面プログラムを作ってみたかったからなたので環境が固定化されている
というのは私にとっては非常に大きなメリットとなっている)
プチコンも詳しくはおちゃめくらぶのWebサイトの方で詳しく書いているのでそれを参考に
してもらえたらいいにょ。
http://ochameclub.web.fc2.com/petitcom/petit.htm
私はマシン語(SC61860)やC言語は80年代からJavaは90年代からその他言語は2000年に入って
から覚え始めたけどどれも基本をかじった程度の知識しかないため自己紹介のプロフィール
欄に「使える言語」として書くにはあまりに心許ないにょ。(たまに近所を運転する程度の
ペーパードライバーが「趣味はドライブです」というような感じだし)
とはいえ、他の言語を知ることでBASICのメリットやデメリットを知ることは出来たにょ。
多人数で開発したりとか大規模なプログラム(数100KB〜数MB)であればBASIC(ここでの
BASICはVBなどは除いた旧世代のもの)は問題ばかりが目立ってしまうけど個人のみで開発
する比較的な小さなプログラム(数KB〜10数KB程度)であればBASICで何ら問題はないにょ。
プチコン3号はユーザー定義関数とローカル変数のサポートによって一般的な旧世代のBASIC
では苦手となる大規模なプログラムや複数人数での開発もmkIIよりは容易になっていると
思われるにょ。
複数人が各自で別のサブルーチンを作った場合にはグローバル変数しか使えないため変数名が
バッティングしないようにするだけでも結構大変で宣言無しで変数が使えるため長い変数を
付けてしまうとタイプミスによるバグの原因にもなったりするからね。
ユーザー定義関数がどんな仕様になるのか分からないけど再帰処理もできるとのことなので
FullBasicやVBのsub〜end subと同レベルのことはできそうにょ。
そして、プチコン3号では構造化命令が加わるみたいなのでスパゲッティではない読みやすい
プログラムも作りやすくなりそうにょ。
冒頭に書いたようにBASICプログラムがスパゲッティになりやすいかはGOTOがあるからでは
なく作り方次第で変わるにょ。(1画面プログラムのように無理にGOTOを使わないで作ったら
かえって可読性が下がる場合さえある)
もっとも、私は可読性よりも速度やリストの長さを優先して作ることが大半なので構造化
命令を使う機会はあまりないかもしれないにょ。
プチコンで作る場合には私が主に作っているシンプルなゲームならば速度は十分であることが
多いため短さを優先することが多いけどこれもゲーム性を犠牲にしては意味がないため
ゲーム性を損なわず短くするように心がけているにょ。
可読性はほとんど無視して作ることが大半であるためリスト短縮や速度をあまり気にして
いない「試しに作ってみた」系のプログラムは自分ルールでできるだけ早いコーディングを
行っている(この掲示板での文章も書く早さを重視しているのでそれと似た感じになって
いる)ためリストも長く可読性も優れているとは言い難いものになっているにょ。
だから、ある程度見せられるレベルのプログラムになってから発表することが多いにょ。
講座用に作ったプログラムならば最初から可読性重視で作っているけどね。
|
|
|
掲示板管理者へ連絡
無料レンタル掲示板