FreeBASIC Compiler Info
  • Platform: Win32, DOS, Linux
  • Licence: GNU General Public License (GPL)
  • Version: 1.05.0
  • Last Update: Jan. 31, 2016

--
--

--

スポンサーサイト

スポンサー広告

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
01
01

2037

FreeBASICの紹介

FreeBASIC::紹介

始めに

QBasicと互換性のあるオープンソース(GPL)の32ビットコンパイラであるFreeBASICの紹介です。2004年に登場してから有志によるライブラリが数多く作成され、多くのディスカッションが積み重ねられて、現在では様々な機能が取り入れられています。近年においては、オブジェクト指向の要素も取り入れられています。Basicでありながらコンパイラによって生成された実行ファイルは高速に動作し、実用に耐えうるだけの優秀なプログラミング言語なのです。

FreeBASIC公式サイト
http://www.freebasic.net/
FreeBASIC公式フォーラム
http://www.freebasic.net/forum/
SourceForge
http://sourceforge.net/projects/fbc/
FreeBASIC wiki
http://www.freebasic.net/wiki/wikka.php?wakka=FBWiki
スポンサーサイト
01
01

2037

FreeBASICの導入

FreeBASIC::解説

ここでは、FreeBASICを始めたい方への導入方法を提示しています。Windows環境を前提としています(私の場合、Windows7 64bitでコーディングしています)。コンパイラのインストール、環境変数の設定、「Hello World!」の表示までの解説です。

06
25

2017

FreeBASICは今後どうなるのか…

FreeBASIC::紹介

以前にも少し触れたのですけれども、FreeBASICの開発やバグ修正に精力的に活動していたdkl氏が、非アクティブ宣言しました。

彼がFreeBASICの発展にもたらした功績はとても大きいものです。OOP機能の一部、ブーリアン型、参照型などを導入しましたし、ライブラリ保守や膨大な量のバグ修正も行いました。彼が活動再開することを願いつつ、ありがとうと言いたいですね。

FreeBASIC開発チームが殆ど活動らしきものをしていないってわけではないと思うのですが、大分停滞している事は事実であるので、何とか開発が活性化して欲しいところです。

自分もバグなどを発見したら報告しているのですが、流石に知識不足、英語力不足などでコンパイラ開発には携われないので、他力本願であるのですけれども。様々な言語が増えてプログラミング学習の重要性が叫ばれるようになった今こそ、学習し易いFreeBASICに焦点が当たらないものかと思っています。新しい言語に目移りするけれども(w

01
08

2017

string型について

FreeBASIC::解説

ライブラリ作成にあたり、string型がどのような処理がなされているか調べてみました。

string型は、ASCIIやマルチバイト文字列を扱える可変長文字列(Variable-Length String)であり、32ビットコンパイラにおいて12バイトの記述子(Descriptor)を保持しています。と言っても、マルチバイト文字列が代入された場合、1文字の文字列長(len())が正しくカウントされません(C/C++で言う所のchar型なので)。当たり前ですが。

dim as string a = "あいうえお"

for i as integer = 0 to 9
    print hex(a[i]);
next i

print
print a

sleep

上記の例では、文字コードを羅列した後に、「あいうえお」と表示します。文字コードを見てみると、Shift-JISであることが分かります。では、詳しく見ていきましょうか。

内部ではFBSTRINGという名称の構造体が定義されており、それがstring型の本体となり、記述子として扱われます。そのフィールドには、datalengthsizeが宣言されています。dataは文字列の生データのポインタ、lengthは文字列の長さ、sizeはメモリを確保したバイト単位の長さになります。

dim as string a = "あいうえお"

この行の文字列「"あいうえお"」はワイド文字列として処理されます。実際に#print typeof("あいうえお")とすると、wstring * 6が返ります。そして、このワイド文字列がstring型に代入されると、マルチバイト文字列に変換されます。この変換はロケールに依存しており、Windows日本語環境の場合では一般的にShift-JISに変換されます。実際にコンパイラのコードを見ると、Cのwcstombs関数が使われています。wcstombs関数がどの程度まで変換できるかはっきりと分からないのですが、文字によっては文字化けが起きると思われます。

printステートメントは、ロケールに依存した表示をしてくれますが、open consでコンソールをoutputモードでオープンして、print #ステートメントで表示しても上手くいかないですね(この辺りはまだ調べていないので何とも)。

フィールドのstring

ユーザ定義型のフィールドにstring型を保持した場合、string型が確保したメモリは、そのオブジェクトの寿命が尽きた際に自動的に解放されます(string型用の暗黙のデストラクタが実行されるようです)。便利ですね。

注意点

allocateで動的にメモリを確保した領域にstring型を構築した場合、それをdeallocateする前にstring型の動的メモリを開放してやらないとメモリリークします。やり方は簡単で、*st = ""を行うだけです。その後にstrptr(*st)でポインタを取得すると分かるのですが、ポインタが0、つまりNull Pointerになっており、メモリが解放された事を示します。この辺りは仕方のないことなのですが、string型をユーザ定義型のようにデストラクタを明示的にコール(st->destructor)できればよいのですがね。

01
06

2017

FreeBASIC ライブラリの話

FreeBASIC::ライブラリ

あけおめ。

細々と開発を続けているFreeBASICのライブラリの話です。基礎的な部分の設計がほぼ固まり、それらを利用したライブラリの設計に取り掛かっている感じです。いわゆるコンテナであるCollectionsを長い間どうするか悩んで来たわけですが、色々と変更しまくっています。コードを書かなくてよかった。

CollectionsはC++やそのライブラリのBoostのコンテナを参考にしているのですが、設計を根本から考え直しました。設計にバージョンを付けるならv5.0位にはなっています(w

まず、Iteratorの排除から始めました。最初期からずっと悩み続けた要素で、直感的ではないし、コードが冗長になるし、安全ではないし、などの理由から内部処理では利用しますが、表面的にはIteratorを排除するに至ったのです。Collectionsは、Enumerableであり、Iterableであるので、EnumeratorとIteratorのオブジェクトを生成するようにしていましたが、Iteratorオブジェクトの生成を取りやめ、加えてRangeオブジェクトを生成するように変更しました。それに伴って各Collectionクラスのメンバーの見直し、実装方法の見直しをしたわけです。内部で利用するIteratorは、動的ポリモーフィズムを利用するので、ポインタで利用します。始端と終端を表す2つのIteratorをEnumeratorやRangeでラップする形で生成するわけです。ポインタの利用は何かと面倒臭いので、IteratorはCollectionsを利用する側からは不可視になり、気にしなくても良いようになります。

Collectionsは、List、Map、Setに分類しています。更に、ListはSeqList、ArrayList、LinearListに分類し、MapはHashMap、TreeMap、FlatMapに分類し、SetはHashSet、TreeSet、FlatSetに分類しています。

SeqListは、どのような実装であれランダムアクセス可能なCollectionsで、Sequence + Listの造語です。名称がイマイチな感じなのですが、より順序を意識したCollectionクラスであるといった意味を持たせています。それから派生するArrayListは、配列のようにメモリ上においても各要素が隣接している事を保証するCollectionsです。C++の将来のバージョンでContiguous Iteratorが導入されるのですが、それを意識したものです。Vectorがこれに属します。LinearListは、基本的に単方向Iterable、実装によっては双方向IterableになりうるCollectionsです。具体的な実装は、単方向と双方向のLinkedListとUnrolledLinkedListを予定しています。

MapとSetについてはまた別の機会に。

また、それぞれの分類に応じて抽象クラスを用意し、具象クラスにおいて最低限の実装で済むように、より効率的な実装が行えるようにしています。

とまあ、設計の段階で進んでは戻るを繰り返しています(w 最近は本格的なコードを書いていないので、そろそろコードも書いていきたいなあって考えています。

追記

Listから派生するSeqListは、やっぱり分かりにくくイマイチな名前なので、IndexedListに変更しました。JavaにあるAbstractSequentialListの様なのと勘違いしてしまう可能性もあるし。

おしまい。

10
23

2016

Civ6発売!

Game

Civ6がとうとう発売されましたね。勿論、プレイしておりますとも。

序盤を何度か繰り返して各ルールやデータなどを確認して、幾つか勝利を達成しました。まだ、国王レベルだけれども、科学勝利、制覇勝利、宗教勝利を達成しました。Civ5に比べると、かなり複雑なルールになったものの、全体的にシステムが共通化されているので、個別に覚えるのはデータ位ですね。取り敢えず、日本とノルウェーを使ってみました。日本は結構強力ですね。色んな勝利が目指せます。ノルウェーは単にバイキング好きってだけなんだけど、群島マップだと序盤から大海原へ旅立てるので、ある程度の海軍を揃えたら、こんにちは戦争が出来てしまいます。科学先行でフリーゲートが量産できるようになったら、制覇勝利は楽です。200ターン位で制覇しちゃいます。

宗教勝利は、よく考えられているシステムで宗教ユニットその物が宗教圧力みたいな感じです。他文明の聖都(宗教地区がある)を重点的に布教して、異教の宗教ユニットを量産させないように染めていきます。

今回、科学と文化が別々のツリーとなって、文化において政治体制や政策を色々と選択できるようになっています。このシステムが結構よく出来ていて、短期的な政策と長期的な政策との兼ね合いをとったりと悩ましいです。

全体的に、数値がまだ大味なような気がします。ハンマー(今回は歯車か)がやたら重かったり、各種購入コストが高かったりと、各産出力をしっかりと把握しておかないと無駄な生産や資金消費が全体に響いてきます。偉人には個別の能力があり、これがまたびっくりする位に強力です。

今回、蛮族が猛威を振るう感じなのですが、蛮族のスカウトや野営地を見つけたら早期に排除しないといけませんので、序盤はある程度戦闘ユニットを生産する必要があります。兎にも角にも序盤にやるべきことがアレもコレもある為、近隣の他文明や周囲のタイルを見て優先させるものを見出す必要があります。各技術や社会制度の条件を満たすとブーストがかかりますが、ブーストがかかったものを優先的に取得していれば大丈夫ってわけでもありません。このブーストは取得しやすくなるためのものではあるけれど、悩ます要因でもありますね。

感想としては、面白いです。ただ、UIが見辛い(特にマップ)、操作クリック数が増えた、ユニットのオート切り替わり(誤操作してしまう原因)、指導者のアジェンダが極端などなど、不満な点は幾つかあります。今後、アップデートで色々と変わるでしょうし、DLCによって追加される要素もあるでしょうから、楽しみです。

Profile

Solbianca

Author : Solbianca
それなり

Categories
Recent Posts
01/01(Thu)
FreeBASICの紹介
01/01(Thu)
FreeBASICの導入
06/25(Sun)
FreeBASICは今後どうなるのか…
01/08(Sun)
string型について
01/06(Fri)
FreeBASIC ライブラリの話
10/23(Sun)
Civ6発売!
10/09(Sun)
FeeBASIC 開発の停滞
10/09(Sun)
FreeBASIC v1.05.0 日本語マニュアル
02/06(Sat)
FreeBASIC v1.05.0 リリース
10/03(Sat)
FreeBASIC v1.04.0 リリース
Recent Coments
02/02(Sat) » 渡辺真
ptr ptr ptr ptr ptr ptr ptr ptr ptr pgr ptr ptr ptr ptr ptr ptr ptr ptr ptr
01/25(Fri) » Solbianca
ptr ptr ptr ptr ptr ptr ptr ptr ptr pgr ptr ptr ptr ptr ptr ptr ptr ptr ptr
01/03(Thu) » Solbianca
ptr ptr ptr ptr ptr ptr ptr ptr ptr pgr ptr ptr ptr ptr ptr ptr ptr ptr ptr
01/03(Thu) » 渡辺真
ptr ptr ptr ptr ptr ptr ptr ptr ptr pgr ptr ptr ptr ptr ptr ptr ptr ptr ptr
01/03(Thu) » Solbianca
ptr ptr ptr ptr ptr ptr ptr ptr ptr pgr ptr ptr ptr ptr ptr ptr ptr ptr ptr
01/03(Thu) » Solbianca
ptr ptr ptr ptr ptr ptr ptr ptr ptr pgr ptr ptr ptr ptr ptr ptr ptr ptr ptr
01/02(Wed) » 渡辺真
ptr ptr ptr ptr ptr ptr ptr ptr ptr pgr ptr ptr ptr ptr ptr ptr ptr ptr ptr
Linx
Downloads
FreeBASICManual翻訳率: 60%
Last Update : Oct.09.2016
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。