スポンサーサイト

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

--.--.-- | スポンサー広告

[Lua] Luaの数値型の精度の問題

こないだSquirrelの記事で予告したので、忘れないうちに書くことにします。
Luaの公式メーリングリストでもかなり何度も話題になっている()ところですが、
Luaの数値型の精度について、特にDirectX等と一緒に使う場合には注意しなければなりません。

ゲームなどの用途では、色(RGBA)を表すのに32bitの整数で表現することがよくありますが、このような値をLua変数に代入し、演算した場合に化けてしまう場合があります。(ちなみに、Lua5.1からは0xFFのような形式で数値を書けるようになりました)

Luaでは変数に数値を入れることができますが、数値を扱うための「数値型」という型がひとつあるのみで、整数型や浮動小数点型というものはありません。整数だろうが浮動小数点だろうが、おかまいなくこの「数値型」の値として同じ(C言語における)型の変数で扱われます。この数値型の実装には、デフォルトではC言語でのdouble型が使われます。

では、デフォルト状態で、Luaの変数は32bitの整数を完全に表現できるでしょうか?

これは通常はOKです。double型は、整数を扱う場合には53ビット分の精度がありますので、32bitのint型の役割を十分に果たします。整数と整数の四則演算(値が小数になるような割り算を除いて)では、誤差が発生することもありません。このため通常は特に問題はないところです。

しかし、これがうまく機能しなくなる場合というのがあります。


【“[Lua] Luaの数値型の精度の問題”の続きを読む】

テーマ:プログラミング - ジャンル:コンピュータ

2006.03.24 | Comments(1) | Trackback(2) | Lua

[Lua] ラグナロクでLua?/SciTEのセッションファイル

えーっと、どうやら最近ここのブログに飛んでくる人の大半がラグナロクオンライン(以下RO)のホムンクルス関連で来られているみたいです。
ついこないだ、ROにLuaを使用したホムンクルス制御システムが搭載されたためなんですが、Luaが広まりつつあることが喜ばしい反面、私はROやってないので参加できずどうも歯がゆいところ。そういや5日間無料チケット持ってたような・・・。

ちなみに、SciTE関連のページのアクセスが多いようなんですが、私もここしばらくSciTEでLuaのプログラムを書きまくっていますし、そこそこ快適なエディタかなと思います。

せっかくなので、ちょっとしたSciTEのTips(Windows向け)をご紹介。
SciTEでは、複数のファイルの編集状態を「セッションファイル」に保存することができます。そこで、このセッションファイルをダブルクリックすればセッションファイルに含まれるファイル群が一括でオープン!、となれば便利なのですが、なかなか簡単にそうもいきません。単純な関連付けではテキストファイルとして開いてしまいます。

そこで、以下のファイルをバッチファイルとして任意の場所に保存し、エクスプローラで.sesに関連付けてください。
セッションファイルをダブルクリックすれば、セッションファイルに含まれるファイル一式を抱えた状態でSciTEが起動してくれます。

OpenSciTESesion.bat(674 byte) update 2006/11/10

SCITEPATHとLUAPATHはそれぞれSciTEのインストールフォルダとLua.exeのパスに書き換えてください。Luaはver5以降のexe必須です。(手前味噌ですがこちら

実装としては・・・Luaでコマンドラインをすこーし加工しています。-eオプションを使うとインラインでスクリプトを書ける、という機能を利用しています。

バッチファイルの内容は以下のような感じですが、最後の行は表示の関係で1行を3行に分割していますのでご注意ください。


@echo off

rem <SciTEセッションファイル関連付け支援バッチファイル>

rem SciTEのセッションファイル(*.ses)にこのバッチファイルを
rem 関連付けてください。
rem セッションファイルのファイル群を抱えてSciTEが起動します。
rem by はむ!(2006/3/19)

rem SciTEのインストールフォルダ(フルパス)を記述してください
SET SCITEPATH=G:\lua_tools\wscite166\wscite\

rem Luaのexeのパスを記述してください
rem(フルパス、またはパスが通っている場合はコマンド名のみでOK)
SET LUAPATH=Lua.exe

rem セッションファイルをパラメータとしてSciTEを起動
"%LUAPATH%" -e "cmd=[[start \"\" \"%SCITEPATH%\SciTE.exe\"
\"-loadsession:]]..string.gsub([[%1%]], [[\]], [[\\]])
..[[\"]];print(cmd);os.execute(cmd);"


コマンドウィンドウが残ってしまうのは愛嬌ってことでご勘弁を。
なにか良い方法あれば教えてくださいませ。


追記(2006/11/10)

kuzeさんのアドバイスにより、startコマンドを使用してコマンドウィンドウを消去することができました。
また、SCITEPATHにスペース文字を含んでも大丈夫なように " をつけました。

テーマ:プログラミング - ジャンル:コンピュータ

2006.03.19 | Comments(2) | Trackback(0) | Lua

[Lua] LuaJIT 1.1.0 リリース&VC++.Net向けプロジェクトファイル

以前にもご紹介しましたが、Luaの実行を高速化するLuaJITのLua5.1対応版がリリースされました!
なお、Lua本体と違ってx86系CPU用のみですのでご注意を。

LuaJIT公式サイト
http://luajit.luaforge.net/


修正点はこちら
http://luajit.luaforge.net/luajit_changes.html
一部SSE2を使ったり、インライン化やアライメント調整、オプティマイザの調整、ライブラリ関数の最適化、などで高速化したようです。

最適化コードの用件を満たさない場合には動的にオプティマイズ解除を行うようにすることで、生成コードがコンパクト(約30%減)になったようです。


性能評価はこちら
http://luajit.luaforge.net/luajit_performance.html
前回の1.0.3と比較してもめちゃめちゃ高速化してますね・・・。すげぇの一言。

なお、GCテストと同様のことをさせると、なんか序盤でつっかかって良い成績が出ませんでした。前バージョンの1.0.3でテストしたときはLua5.1と同様の挙動をしていただけに少々謎です。GCそのものにはあまり、というか全く手を入れていないようですが・・・。

ちなみにLuaJITもMITライセンスなので、Luaと同様、商用アプリにも使いやすいのが良いですね。


ただ紹介するだけも何なので、VC.Net(2003)用プロジェクトファイル作ってみました。
LuaJIT110_vc7proj.zip(3,689 byte)

LuaJIT1.1.0を展開したディレクトリの中にぶっこんでluajit.slnを開いてReleaseビルドすればOK!です。binディレクトリにexeとdllができます。

テーマ:プログラミング - ジャンル:コンピュータ

2006.03.16 | Comments(1) | Trackback(0) | Lua

[Lua] Squirrel :Luaの後継者?

たしか2chのLuaスレで見つけたんだったと思いますが、最近squirrelがちょっと気になる存在です。

公式サイトはこちら。
http://www.squirrel-lang.org/

なぜ気になるかというと、LuaからDNAを受け継ぎつつ、ゲーム用の組み込みに関してLuaで問題のある点を綺麗にクリアしているためです。(もしくは、クリアしようとしている・・・かな)

squirrelの作者はFarCryでエンジンにLuaを組み込んだ人らしく、Luaについて良い点・悪い点を知り尽くしているということで、期待が持てます。

全体のつくりや言語の基本的な特徴はLuaに非常に類似したものですが、
以下の点でLuaよりいいかも・・・と思わせます。


【“[Lua] Squirrel :Luaの後継者?”の続きを読む】

テーマ:プログラミング - ジャンル:コンピュータ

2006.03.10 | Comments(0) | Trackback(0) | Lua

[Lua] Lua5.1のGC実行効率に関する考察

先日リリースされたLua5.1ですが、インクリメンタルGCが特徴のひとつとなっています。

GC(ガーベージコレクション)は、不要になったメモリを回収し、解放する機構のことですが、これが結構時間のかかる動作で、最近Luaを使った自作システムのプロファイルをAMD CodeAnalystで取ってみたら実行時間のほとんどがGCにかかっていた・・・ということもありました。基本的には動作の早いLuaだけに、GCがある種のネックともなっています。

Lua5.1では、インクリメンタルGCによって、Lua5.0までは一括で全メモリに対して実行するしかなかったGCを、細切れに実行することができるようになりました。特にゲームなどの半リアルタイム用途のアプリにおいて、GCが実行される時に突然大きく負荷がかかることを防止することができます。

・・・というのが口上ではありますが、しかし、そもそもGCってどうなの?どういう特性を持っているの?というとなかなかよくわからないものです。

また、Lua5.1ではcollectgarbageでいくつかパラメータを設定できますが、どういう値を設定すればいいのか、なかなか手がかりがないものと思います。

そこでいろいろ実験してデータを取ってみました。


注意)この実験では、ガーベージとして長めの文字列を使用したため、ガーベージが溜まることによる悪影響が現実的な場合の数十倍程度大きく表れている可能性があります。詳細はこちらの記事でご確認ください。


【“[Lua] Lua5.1のGC実行効率に関する考察”の続きを読む】

テーマ:プログラミング - ジャンル:コンピュータ

2006.03.06 | Comments(0) | Trackback(0) | Lua

[Lua] Lua5.1final SJIS対応版

Lua5.1正式版がリリースされたということで、
いつものように日本語(SJIS)対応済みソースとWindows向けバイナリを作成しました。ついでにVC++6/VC++2003.Netのプロジェクトも同梱しています。

ちなみに・・・Luaの日本語化というと、sowwaさんが作られたものがあるのですが、少し実装方針が異なります。
sowwaさんの日本語化では文字の読み込み段階でSJIS文字を2バイト一組で読むように修正されていますが、私のほうはパーサのループで読み飛ばすようにしています。あと私のほうは識別子には日本語は使えません(これは個人的には不要かなぁと思っています)

修正内容はかんたんですので、パッチファイルを覗いてみてください。いじるのも容易と思います。こっそり台湾BIG5エンコーディングにも対応しています(mbenc.hで切り替え)。

ソースそのものは特にWindows用ではありませんので、
Luaの動作するプラットフォームであればコンパイル可能と思います。

ちなみに・・・Luaのexeを起動して、

print"ソース"

などと打ってみれば、SJIS対応がされているかどうかわかります。


Lua5.1正式版
SJIS対応版ソース + exe + VC6/VC2003プロジェクト

lua-5.1-beta-mbenc.zip(2006/2/28 636,086byte)
README | 修正内容( .patch )

Lua5.0からの違いについては前回の記事をどうぞ。

Lua5.0.2(安定版)や前バージョンのSJIS対応版などは物置にあります。

technorati:

テーマ:プログラミング - ジャンル:コンピュータ

2006.02.28 | Comments(0) | Trackback(1) | Lua

[Lua] Lua5.1 final リリース!

RC4まで既に出てましたが、ついにfinalきました~パチパチ
去年の年内って言ってましたが延びましたね。

http://www.lua.org/ftp/lua-5.1.tar.gz

manual

Lua5.0からの大きな変更点は・・・
・インクリメンタルガーベージコレクタを採用!
 →これによりGCを細かい単位で実行可能に。
・load関数で、ユーザーが設定したLua関数によってソースとなるデータを取得することが可能に。
 →これによりマクロプロセッシングの可能性が。
・モジュールシステムの修正
 →サードパーティによるモジュールの提供がより容易に。
・テーブルの長さオペレータ#の導入
 → t={1,2,3}; length=#t のような感じです
・オペレータ%の導入(modと同様の動作)
・varargの修正
 →以下のようなコードが使えるようです。


function a(...)
local t = {...}
return ...
end

・C関数とユーザーデータ型は「環境」を持つように。
 →データを環境においておくことができます。

下にマニュアルにある非互換性を書いておきます。


【“[Lua] Lua5.1 final リリース!”の続きを読む】

テーマ:プログラミング - ジャンル:コンピュータ

2006.02.18 | Comments(0) | Trackback(0) | Lua

[Lua] RemDebugへの長い長い道のり

現在進行中のプロジェクトで、Luaコードのデバッガを準備しておきたくなり、
いろいろやってみましたが・・・それは苦難の道のりでした。

これは自前のexeにカスタムLuaをリンクしている場合のお話です。


【“[Lua] RemDebugへの長い長い道のり”の続きを読む】

テーマ:Windowsプログラミング - ジャンル:コンピュータ

2006.01.12 | Comments(1) | Trackback(0) | Lua

[Lua] Lua5.1beta SJIS対応版 + VCプロジェクトファイル

Lua5.1betaがフリーズされたので、日本語(SJIS)対応済みソースとWindows向けバイナリを作成しました。ついでにVC++6/VC++2003.NetのプロジェクトとLuaコアライブラリファイルも同梱しています。

Lua5.1beta
SJIS対応版ソース + exe + VC6/VC2003プロジェクト

lua-5.1-beta-mbenc.zip(2005/11/19 598,533byte)
README | 修正内容( .patch )

Lua5.1betaのフリーズ(修正完了)はMLのこのあたりでアナウンスされました。
alphaからの変更点はこちらにまとめてあります。


Lua5.0.2(安定版)や5.1alphaのSJIS対応版などは物置にあります。

テーマ:プログラミング - ジャンル:コンピュータ

2005.11.26 | Comments(0) | Trackback(0) | Lua

[Lua] Lua5.1(beta) リリース!

Lua5.1betaきました~
現在バグ報告などを受け付けている状態で、1週間程度でフリーズされる予定です。

Lua5.1beta パッケージ(今後数日で内容は変化するかもです)
http://www.lua.org/work/lua-5.1-beta-rc.tar.gz

MLの記事
http://lua-users.org/lists/lua-l/2005-11/msg00005.html


【“[Lua] Lua5.1(beta) リリース!”の続きを読む】

テーマ:プログラミング - ジャンル:コンピュータ

2005.11.03 | Comments(0) | Trackback(0) | Lua

[Lua] SciTE1.66 使用感

SciTE(1.66)の使用感についてのレポート。
Luaスクリプトを編集した場合の使用感です。

日本語用設定などは前回の記事をどうぞ。

良いところ
・タブでファイルを切り替えられる
・日本語が特に問題なく使える(エディット・実行結果表示)
・構文解析はかなりしっかりしている。コメントが入り組んでいても間違いがない。
・コマンドラインの実行結果が右側のペインに表示されるのは非常に便利。
・ちゃんと設定すればファイルのコンパイルや実行などはメニューから可能
・選択領域をタブキーでインデント、SHIFT+タブでアンインデントできるのは楽
・動作は全体的に軽い

悪いところ
検索で日本語が使えない→1.67で治っているようです
・オートコンプリート(文字列補完)をonにすると余計なものを補完しようとする(設定の問題かも)
・1つのファイルを分割表示できない(MLで確認済み)。またカスケード表示などもできない。
・編集中ファイルの外部での変更を自動検出しない
・セッションファイル(閲覧ファイルリスト:プロジェクトファイルに相当)を直接エクスプローラから開くのには工夫が必要→対策方法はこちら


まっとうな構文解析がついた、ビルド機能つきLuaエディターとしては及第点じゃないかなと思います。

編集中にLuaAPIの関数コメントなどを表示する方法は↓


【“[Lua] SciTE1.66 使用感”の続きを読む】

2005.10.09 | Comments(0) | Trackback(0) | Lua

[Lua] SciTE 1.66:プログラミング用エディタ

2007/6/15 SciTEの設定はこちらにまとめました>SciTE@空想具現化プログラミング

Luaの編集用に良いエディタはないかな・・・ということで、SciTEの最新版をダウンロードして、触ってみました。SciTEというのは、プログラミング用のテキストエディタで、さまざまなプログラミング言語の構文処理に優れています。
SciTE公式サイト http://www.scintilla.org/SciTE.html

たぶんSciTEは「サイト」という読みなんだと思うのですが、そうすると上のURLは「サイト公式サイト」・・・げふんげふん

1年ほど前に触ってみた時は日本語処理に難がある印象でしたが、今回触ってみると案外良い感触でした。テキストの折り返しをしても日本語が化けないようになっていました。

このエディターはScintillaという構文解析エンジンをベースにしているそうで、構文解析はしっかりしていて、キーワードやコメントのカラーリング・関数などの折りたたみも可能です。
また、編集中のファイル(の種類)に対する実行設定ができ、実行結果は右のペインに表示されるのもなかなか便利。半ばIDEのような感覚で使うことができます。

Luaだけでなく、C/C++/python/Ruby/SQL/VBなどなど、名の知れた言語はサポートしているようで、珍しいところではMakefileやShell、アセンブラなどもありました。(・・・と思ってアセンブラに変更してみたら例外吐きましたがorz)

SciTE画面写真small


ダウンロードはこちらから可能ですが、そのままでは日本語が表示されないので少々設定が必要です。

使用感についてはこちらの記事をどうぞ。
エクスプローラからセッションファイルをダブルクリックで開くようにする方法はこちら


【“[Lua] SciTE 1.66:プログラミング用エディタ”の続きを読む】

2005.09.26 | Comments(1) | Trackback(1) | Lua

[Lua] Lua5.1alpha最終版 リリース

Lua5.1alphaのバグを一通りfixした最終版がリリースされました。
http://www.lua.org/work/lua-5.1-alpha.tar.gz

↑URLは今までのalphaと同じですが、中身は変わってます。

次はbetaとのこと。5.1のfinal版は今年中にリリースされる予定のようです。

SJIS対応ソース&exe&VC++プロジェクトファイルを更新しておきました。
こちらのページをご覧ください。

2005.09.10 | Comments(0) | Trackback(0) | Lua

[Lua] LuaJITで実行速度アップ!

LuaJIT 1.0.3 が初公開されました。
これは、簡単に言えば、より高速にLuaスクリプトを実行する環境です。
Lua5.1alphaをベースにしているようです。

http://luajit.luaforge.net/


【“[Lua] LuaJITで実行速度アップ!”の続きを読む】

2005.09.10 | Comments(0) | Trackback(0) | Lua

[Lua] 更新情報:LuaEdit2.4.1 tolua++1.0.6

tolua++ 1.0.6 C/C++とLuaとのバインドを行う tolua++ の最新版です。私の接続環境ではサイトにつながらないのですが、proxyで迂回すれば見られるようです。

LuaEdit 2.4.1 Lua開発環境LuaEditです。バグフィックスと操作性の改善が主な点です。少し手に馴染む感じになってきたのではないでしょうか?ただ実行時のワーキングディレクトリの設定などは、提案してみましたがまだ実装されていないようです。

これに伴い、以下のページを更新しました。
Lua開発環境

[Lua] LuaとC/C++をつなぐ(その2)

2005.09.07 | Comments(0) | Trackback(0) | Lua

新しい記事へ <<  | HOME |  >> 古い記事へ

広告:

FC2Ad

カテゴリ展開メニュー

  • 未分類(13)
  • Lua(38)
  • プログラミング(11)
  • 食べ物(3)
  • SPAM(2)
  • ゲーム開発(4)
  • GIS/GPS/GoogleMaps(2)
  • スポーツ(1)
  • Skype API(1)
  • AR(1)

はてブ ランキング

ブログ全体: このWikiのはてなブックマーク数

プロフィール

はむ!

Author:はむ!
よく使う言語・環境:
C++,C,Lua,java,VBA,DB
たまにPHPとかjavascript
血液型:O型

メール: lua%ham.nifty.jp
(%を@に変えてください)
ついったー: @hammmm

Lua関連アンテナ

ブロとも申請フォーム

この人とブロともになる

全記事表示リンク

全ての記事を表示する

ブログ内検索


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