Lazarusをアップデートしたので、再びまとめてみた。
「WindowsでFreePascalコンパイラのクロスコンパイル環境を設定する」の続きを読む
タグ : FreePascal,Linux,binutils,cygwin,i386,x86_64,クロスコンパイル
2012/03/25 22:53:49 | Trackbacks (0) | Comments (0) | Technology
FreePascalでApacheモジュールを開発するときに利用するユニットにhttpdがあります。このhttpdユニットはApacheのバージョンに合わせて、1.3用・2.0用・2.2用が用意されています。
普通にhttpdをusesするとファイル名の順番から1.3用が利用されてしまいます。いまどきは2.2以上なので、2.2用を使ってコンパイルしなければなりません。
今まではコンパイラオプションのユニット検索パスで、2.2用が入っている/units/$FPCTARGET/httpd22のディレクトリを指定することで回避していました。
が、先ほどfpc.cfgを見ていたらhttpdの振り分けが記述してありまして...。シンボルとして「FPCAPACHE_2_2」を設定してあげれば2.2用を読みに行ってくれるようです。Lazarusなら、プロジェクト>コンパイラオプション>その他タブ>カスタムオプションで「-dFPCAPACHE_2_2」を追記しておけばオッケーです。
まぁ自分でパスを追加しても問題はおこらないのですが、シンボル定義して勝手に切り替えてもらったほうがエレガントだとおもうので。ってゆーか、fpc.cfgとか読まないし、ドキュメント皆無みたいなもんだし、マイナーな言語は大変ですね(笑)
タグ : Apache,FreePascal,モジュール
2010/12/16 00:22:37 | Trackbacks (0) | Comments (0) | Technology
はい、またやってました、クロスコンパイル。ってかこれ今やるべきことじゃないんだけど、FreePascalのメーリングリストで同じように悩みを持っている人がいて、それ見たらなんかやってた(笑)。
今回は64bitのLinuxがターゲット。過去の失敗経験をもとにCygwinでBinutilsのコンパイルからやってみたら、なんとかうまく行ったので手順を書き記しておく。
mkdir -p /usr/local/src/ cd /usr/local/src/
wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.20.1.tar.gz tar xvzf binutils-2.20.1.tar.gz cd binutils-2.20.1
./configure --target=x86_64-linux
make clean make all make install
エラーが起こるとすればconfigureとmakeなので、エラー内容をよく見て必要なパッケージやライブラリを入れていけばいずれはコンパイルできるようになると思われる。
コンパイラをコンパイルするんです。(じゃぁそのコンパイラは何でコンパイルされたんでしょう。コンパイラ?じゃぁそのコンパイラは...なんてね)
make clean make OS_TARGET=linux CPU_TARGET=x86_64 all make OS_TARGET=linux CPU_TARGET=x86_64 \ INSTALL_PREFIX=[Lazarus Dir]\fpc\[FPC Ver] install
これでWindowsで作成したHello Worldが64bit CentOSで動くようになった! 今回のステップを踏めば別のプラットフォーム向けもできそうだね。
あ、ちなみにLCL(Lazarus Component Library)のクロスコンパイルは試してません。とりあえず今のところ使ってないから、なくていっかな。過去の経験より手をつけるとはまるので。
タグ : 64bit,Binutils,Cygwin,FreePascal,Linux
2010/11/04 06:20:21 | Trackbacks (0) | Comments (0) | Technology
最近はPHPをやめて、ウェブシステムをネイティブコードのApacheモジュールで開発しています。
まぁネイティブコードと言ってもPascalですけどね!! しかもFree Pascal (笑)。みんなにバカにされるんだろうなぁ、そんなもんで開発すんな!ってね。まぁほら、使わないと発展しないどころか廃れちゃうじゃん? 世の中ネイティブコードがC/C++だけとか面白くないし。ちゃんとメジャーなプラットフォームでコンパイルできるし、64bitも吐けますから。Object Pascalって軽く使うだけならメモリとか意識しないですむし、オブジェクトとかスコープの概念が理解しやすいなど、メリットもあると思うんだよね。このあたりは言語宗教だね。
ま、いずれにせよ、もうかなりの時間かけて環境とかライブラリ作っちゃってるし、後戻りできないよねー。
で、肝心の性能。単純にHello World返すだけならPHPとネイティブコードだとあまり動作スピード変わらないんだけど、オブジェクトとかガリガリ使ってくるとやっぱりネイティブの方が速いみたい。
個人的にはメモリ管理が出来るのがよい。どこでメモリを開放する/されるか知っているのでなんか安心。開放し忘れのリスクはあるけれど、try..finally使ったり生成と破棄のコードを同時に書くなど注意するようにしている。あ、そうそう、文字列処理とかリストの処理はメモリ管理ができたほうが実行速度速いね。基本的に文字列やリストの操作ってのは内部的にはメモリの再確保なんで、ネイティブなら先にガバッとメモリ確保するなどそのあたりでメリットがある。
あとは、変数の宣言と型指定があるのが良い。PHPのようにどこでも変数が現れて、何でも入るってのはなんか気持ち悪い。Integerの変数ならDBに問い合わせるときにエスケープする必要がないって保証できるじゃん? コードや変数は必然的に長くなるけどねぇ、個人的精神衛生のために我慢。
あれ、Apacheのモジュール作るときの覚え書き書こうと思っていたのに、思ったことを適当に書いちゃったな。マネージドやインタプリタもいいけれど、それのベース作ってるのはだれ?ネイティブじゃないの?と思う。プログラムが全部ネイティブである必要はないけれど、ネイティブも操れるくらいの方ができることの幅も広がると思うんだよね。
タグ : Apache,Free Pascal
2010/08/14 06:45:42 | Trackbacks (0) | Comments (0) | Technology
いやぁ結局Linuxはダメだったんだけどね。書いておかないと忘れちゃうので。
「FreePascalでクロスコンパイル (再来)」の続きを読む
タグ : 32bit,64bit,FreePascal,Lazarus,Linux,クロスコンパイル
2010/07/26 05:45:52 | Trackbacks (0) | Comments (0) | Technology
最近はLazarus使ってFreePascalでプログラム書いているのだけれど、せっかくクラスとか書いたら公開したいなぁと思うわけです。ところで、時代はDelphi 2010なわけで、Delphiで扱う文字列がUnicodeになっているわけです。そこで気にしたいのは、バイト単位で文字列を操作する部分はUnicodeとAnsiどちらでも動くようにするということ。
まぁぶっちゃけるとMIMEの処理を行いたいわけだけど、ISO-2022-JPの文字列をstringに突っ込むとどうなるんだろうとか、Base64のエンコード・デコードをしたときにデータを格納すべき変数のデータ型は?とかが、いろいろ分からないのです。データを全部TStream系とかarra of Byteか何かで処理すれば気にしなくていいんだけれど、そうすると文字列検索なんかが面倒になる。ちなみにIndyとかはarray of ByteをTBytesとして宣言して使っているっぽい。
まぁこんな感じで悶々と考えたわけだけれど、結論としてDelphi 2009以降がないとわからん!ってことであきらめました。とりあえずstringはすべてAnsiStringとして考えておくことにします。
タグ : Base64,Delphi,FreePascal,Lazarus,MIME,Unicode
2009/11/05 03:21:01 | Trackbacks (0) | Comments (0) | Technology
MySQLはSELECT文にLIMITが入っていればどんな時も結果件数を制御できた気がするんだが。例えばこんなSQL文は実行できるはず。
この文をphpMyAdminから発行してもちゃんと結果が返ってくるのに、FreePascalからデータベースドライバ経由でこれを発行しても結果が返ってこない。ってかエラーをRaisすらしない。こういう場合はどうするか。
ORDER BY句をつけなければいけないらしい。まぁ普通はLIMITを使うときは何らか並べ替えがあって、それを一定数取り出したいときだから特に問題になることでもない。しかしながら、並び順はなんでもいいから(普通はMySQLのデータ格納順)、とりあえず一定数取り出したいなんて時はそれが使えないことになる。
タグ : FreePascal,LIMIT,MySQL
2009/10/22 17:38:51 | Trackbacks (0) | Comments (0) | Technology
いま、こんな感じです。
完成したら見せてもいいのだけれど、まだ見せれない部分もあるので。ぼかしつつ...。
やっとExtJSにも慣れてきた感じ。ExtJSのドキュメント見たり、ExtPascalのヘルプ見たりとあっちこっちを見ながら実装するという結構大変な作業だわ。サーバー側をPHPにしておけばよかったと何度思ったことか(笑)。
しかーし、その代わりレスポンスはめっちゃ早い!まだローカルでの接続しかしていないけれど、データベース接続してデータ読みだしたりしながらインターフェースのJavaScriptを構築してブラウザに送出するまで20msくらい(Core2 Duo 2.66Ghz / Memory 4GB / Windows Vista)。ext-all.jsを読みだすのでも10msくらいかかっているから、それの倍ちょっとで処理できている感じかな。
まだ若干マスターしきれていないのがDataStoreのあたりかな。ExtPascalでラッピングされているので、DataStoreの非同期通信をどう受け取ればいいのか調査中。
2009/10/21 21:53:34 | Trackbacks (0) | Comments (0) | Technology
ずっと2週間くらい悩まされてきたことがやっと分かりましたよ。
ExtPascal内で動的にオブジェクトの属性を設定するときは、プロパティを参照するのではなく、メソッドで設定を行わなければならない。例えばボタンの有効状態を無効にしたければ、Button.Disabled := Trueではなく、Button.disable()を呼ばなければならないということです。
まぁよく考えてみれば、純粋にJavaScriptでExtJSを使うときもメソッド経由にしないと状態を設定することができないから当然と言えば当然なんです。Delphiのようにプロパティが暗黙にセッター・ゲッター関数になったりしていないから、動的に属性を変更するときはメソッドを呼ばなければいけないんですね。
基本的にExtPascalでは生成したオブジェクトのJavaScript内での名前しか覚えていないようです。そのためExtPascal内でpublicな変数でも、直接属性を設定するとアクセスエラーになるようです。
それにしてもコードでコンポーネントを配置していくのは面倒だなぁ。DelphiのフォームビルダがどれだけUIを設計する作業を簡便化しているかよく実感できる。
タグ : Delphi,ExtJS,ExtPascal,JavaScript
2009/10/20 20:48:24 | Trackbacks (0) | Comments (0) | Technology
今ハマり中のExtJS3.0の日本語APIドキュメントが公開されたようです。いやぁ本当助かります。
公開したのはxenophyという会社で、xFrameworkPXというPHPのフレームワークを開発した会社でもあります。この会社のしゃちょーさんは、僕がPHPの高速化について調べているときにたまたま見つけたブログの執筆者で、PHPやDelphiなど似たような言語を使っているというだけで、(勝手に)ちょっと注目している方です。
ということで引き続きExtPascalがんばって使い倒しますか。
2009/10/17 23:55:51 | Trackbacks (0) | Comments (2) | Technology