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!」の表示までの解説です。

11
24

2017

Firefox57 Foxy Gestures

misc.

FireGesturesが余りにも便利だったために、代替となるジェスチャ系アドオンのやれることの少なさに辟易としている人が多数いると思われます。自分もその1人です(w

現在、ジェスチャ系のアドオンはFoxy GesturesとGesturefyの双璧といった感じでしょうか。自分は、ユーザスクリプトが使用可能なFoxy Gesturesを利用しています。簡単なものばかりですが、APIの勉強がてらユーザスクリプトを幾つか書いてみました。

参考: Firefox 57(Quantum)で動かなくなった「FireGestures」の代替に選ばれたのは、「Foxy Gestures」と往年の名ソフトでした。

フルスクリーン化

通常ウィンドウや最大化したウィンドウをフルスクリーンにします。フルスクリーンの際にジェスチャを実行すれば、通常ウィンドウに戻ります。


executeInBackground(() => {
    getCurrentWindow().then(win => {
        if(win.state == "normal" || win.state == "maximized") {
            browser.windows.update(win.id,{state: "fullscreen"});
        } else {
            browser.windows.update(win.id,{state: "normal"});
        }
    });
}, []);

ウィンドウサイズの順次変更

登録したジェスチャをする度に、ウィンドウを「最小化、通常、最大化、フルスクリーン」の順序で変更するスクリプトです。

一段階上げる(Normal→Maximized→Full Screen)


executeInBackground(() => {
    getCurrentWindow().then(win => {
        if(win.state == "normal") {
            browser.windows.update(win.id,{state: "maximized"});
        } else if(win.state == "maximized") {
            browser.windows.update(win.id,{state: "fullscreen"});
        } else {
            browser.windows.update(win.id,{state: "normal"});
        }
    });
}, []);

一段階下げる(Full Screen→Maximized→Normal→Minimized)


executeInBackground(() => {
    getCurrentWindow().then(win => {
        if(win.state == "fullscreen") {
            browser.windows.update(win.id,{state: "maximized"});
        } else if(win.state == "maximized") {
            browser.windows.update(win.id,{state: "normal"});
        } else if(win.state == "normal") {
            browser.windows.update(win.id,{state: "minimized"});
        }
    });
}, []);

アクティブタグのピン留め

アクティブなタブをピン留めし、ピン留めされたアクティブなタブを元に戻します。


executeInBackground(() => {
    getActiveTab(tab => {
        if(tab.pinned){
            browser.tabs.update(tab.id, {pinned: false});
        } else {
            browser.tabs.update(tab.id, {pinned: true});
        }
    });
}, []);

ウィンドウのリサイズとセンタリング

ウィンドウの横幅をスクリーンの利用可能なサイズの2/3のサイズにし、高さをスクリーンの表示可能なサイズいっぱいまで伸ばし、ウィンドウをセンタリングします。ウィンドウサイズを変更したり、移動したりした時にいつものサイズと位置に戻したい場合に有用です。


executeInBackground(() => {
    const height = window.screen.availHeight;
    const width = window.screen.availWidth / 3 * 2;
    const topPos = window.screen.availTop;
    const leftPos = (window.screen.availWidth - width) / 2;

    getCurrentWindow().then(win => {
        browser.windows.update(win.id,
            {height: height, width: width, top: topPos, left: leftPos});
    });
}, []);

とまあ、比較的簡単なものばかりです。MDN Web Docsあたりを見て勉強しております。

おしまい。

11
18

2017

Firefox「過去は振り返らない、これがオレのジャスティス。」

misc.

Firefox Quantumの話です。Firefox57からWebExtensions APIが導入され、アドオンの多くが使用不可になりました。巷では阿鼻叫喚となっていると思われます。まあ、大分前からアナウンスされていたわけですし、Firefox56の頃にアドオンの見直しや更新停止などをしておいたおかげで、すんなりと移行できました。ただ、やはり現在の段階では実現不可なアドオンも使用していたわけで、それらが必要なのでWaterfoxも併用することにしました。All-in-One Sidebarが対応不可なのが本当に痛いですね。

Firefox Quantumを使用してみた感想としては、UIがChromeモドキから自分好みになった、確かに動作が早くなった、って感じです。

このバージョンはアドオン製作者からもユーザからも不評だったりするのですが、これまでFirefoxのシステム奥深くにまで入り込んでいたアドオンがWebExtensions APIを介することによりメリットもあるわけです。言われている通りセキュリティが向上しますし、Firefox自体のアップデートでアドオンが使用不可になることも減るわけです。そのAPIも随時拡張されるようなので、有用なアドオンも増えていくことでしょう。アドオン製作者がそっぽを向かない限り(w

今回、StylishがFirefoxのUIを操作不可になったので、UIをカスタマイズする場合はプロファイルにchromeディレクトリを作成し、そこにuserChrome.cssuserContent.cssを作成して記述します。例の如く、今回もカスタマイズしてみました。


/*
    Location Bar.
*/
#urlbar,
.searchbar-textbox {
    font-size: 1em !important;
}

.urlbar-textbox-container {
    padding-right: 4px !important;
}

:root[uidensity=compact] .urlbar-icon {
    width: 20px !important;
    height: 20px !important;
}

/*
    Tabs.
*/
#TabsToolbar > #tabbrowser-tabs,
#TabsToolbar > #tabbrowser-tabs > arrowscrollbox {
    min-height: 22px !important;
    max-height: 22px !important;
}

#TabsToolbar[movingtab] > #tabbrowser-tabs {
    padding-bottom: 0 !important;
    margin-bottom: 0 !important;
}

.close-icon > .toolbarbutton-icon {
    width: 16px !important;
    height: 16px !important;
}

.tabs-newtab-button > .toolbarbutton-icon {
    width: calc(var(--toolbarbutton-inner-padding) + 16px) !important;
}

.tab-line {
    display: none;
}

.titlebar-placeholder[type="pre-tabs"], .titlebar-placeholder[type="post-tabs"] {
    width: 16px !important;
}

.tabbrowser-tab[visuallyselected="true"] {
    overflow: hidden !important;
    border: 1px solid var(--tabs-border) !important;
    border-bottom: none !important;
    border-radius: 4px 4px 0 0 !important;
}

.tab-background[selected="true"] {
    border: none !important;
}

/*
    Sidebar.
*/
.sidebar-header,
#sidebar-header {
    font-size: 1.2em !important;
    padding: 4px !important;
}

.tree-bodybox {
    font-size: .9rem !important;
}

取り敢えずロケーションバーとタブ辺りは満足いく感じ、サイドバーや他はもう少し手を加えようかと考えています。とにかく、タブの上段にある線が気にいらなかったので消したった。全くもって後悔していない(w

こんな感じ。

fx57.png

追記

サイドバーのセパレータの色、行の色分けも追加してみた。


treechildren.sidebar-placesTreechildren::-moz-tree-row(even) {
    background-color: rgba(0,0,0,.02) !important;
}

treechildren.sidebar-placesTreechildren::-moz-tree-row(selected) {
    background-color: rgba(0,0,0,.3) !important;
}

treechildren.sidebar-placesTreechildren::-moz-tree-separator {
    border: none !important;
    border-bottom: 1px solid rgba(0,0,0,.1) !important;
}

おしまい。

10
21

2017

FreeBASICの不満点

FreeBASIC::解説

今回は、FreeBASIC v1.05時点の不満点を列挙してみたいと思います。あくまで個人的な不満点ですけれども。

クラス修飾子

他言語に見られるfinal/sealedstaticabstractなどのクラス修飾子が存在しません。abstractstaticはメンバ関数がそれらであれば問題ないのですが、コードを書く際に記述忘れやミスをコンパイルが通知する上で必要ですし、final/sealedは継承不可なクラスを作成するのに必要です。

FreeBASICのtypeは、まだ構造体にポリモーフィズムやカプセル化の要素が付加されただけですので、これらの機能が欲しいところです。

インナークラス

クラス内にクラス宣言が出来ません。インナークラスとアウタークラスが強い結び付きがある場合に有用なのですけども。何故か関数内に宣言するローカルクラスはあったりします。使い所が思いつかないですけれども。

また、クラス内にtype Foo as Barのような型エイリアスも宣言できません。C++のtypedefのようなことがしたいのですけれども。前方宣言を外に出さないで、Pimplイディオムとかやりたいのですけども。

フィールドの初期化

コンストラクタがフィールドを初期化する際、フィールドのコピー代入演算子を呼び出し、フィールドの初期化用コンストラクタを呼び出さないのです。コンストラクタからconstのフィールドも初期化出来ません。C++のメンバイニシャライザが欲しいところです。

これが一番実装して欲しい機能です。

追記: フィールドがユーザ定義型の非constメンバであれば、コンストラクタ内でthis.foo.constructor(...)のように直接そのコンストラクタを呼び出す事で初期化可能です。その場合、dim as Bar foo = anyのようにフィールドにanyキーワードでコンパイラに「未初期化」を提示してやると、無駄な多重構築を回避できます。それをしておかないとインスタンス化した際にデフォルト構築の後にコンストラクタで更に初期化構築をしてしまいます。

静的フィールドの初期化

静的フィールドを保持可能になったFreeBASICですが、その初期化には必ず定数でなければなりません。フィールドと同じ型を返す関数などから初期化は出来ないのです。それを実現しようとするとC++のconstexprみたいな機能が必要になってきますけれども。

重複定義

2つのソースファイルに全く同じクラスの宣言と定義を記述し、それらソースファイルをコンパイルすると、当然重複定義のエラーになります。メンバ関数は定義側にprivate function UDT.Foo ...のようにprivateを付加して内部リンケージにすることで、そのメンバ関数はローカルとして扱われてそのエラーを回避可能なのですが、静的フィールドの定義ではそれが出来ません(static as const Foo UDT.Bar = ...)。普通の静的変数(static as const Foo Bar = ...)は内部リンケージになるのですけれども。

マクロを使用した疑似テンプレートエンジンを作成している際にこれに悩まされました。重複定義エラーは当然ですし、普通はネームスペースを使用するけれども。

とまあ、機能的に不足しているのが現状です。他にも上げたらキリがないけれども。

06
25

2017

FreeBASICは今後どうなるのか…

FreeBASIC::紹介

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

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

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

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

Profile

Solbianca

Author : Solbianca
それなり

Categories
Recent Posts
01/01(Thu)
FreeBASICの紹介
01/01(Thu)
FreeBASICの導入
11/24(Fri)
Firefox57 Foxy Gestures
11/18(Sat)
Firefox「過去は振り返らない、これがオレのジャスティス。」
10/21(Sat)
FreeBASICの不満点
06/25(Sun)
FreeBASICは今後どうなるのか…
01/08(Sun)
string型について
01/06(Fri)
FreeBASIC ライブラリの話
10/23(Sun)
Civ6発売!
10/09(Sun)
FeeBASIC 開発の停滞
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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。