Web Board

日記へ / ツリー表示 / 新規投稿 / 新着表示

[[32bit版jgawk]]

コメントをつける / 削除する
Subject: Re: 32bit版jgawk
Date: 2013/04/05 00:49
From: 三五六
X-URL: (URL)

こんにちは。
わかりやすい、まとめをありがとうございました。(本家)

>但し、100%の互換性はなく、16ビットjgawk用に書かれたスクリプトはエラーが出ることがあります。
違いがある以上、そういうことは有る。ということで流してください。
既にあるスクリプトを走らせるには、処理系の変更は常にリスクがありますね。

一時期、mawk32を愛用していた時期が有りましたが、null文字が扱えないのは困りました。(awkはC言語と似てるのに、文字列にnull文字を含むことが出来る)

定義済みファイル名に、/dev/tty(コンソール出力)というのを、MSDOS版jgawkはサポートしていますが、windows版(gawkm115.zip)では、エラーになります。代わりに、(両方でサポートしている)/dev/stdoutが有りますし、そもそもファイル名指定しなければ、標準出力にでますけれども。
上記エラー例を、どこかで、見た気がします。私は遭遇したことはないです。
MSDOS版は、ロングファイル名も未対応なので、使いにくいですし、使った記憶も有りません。(awkを最初に使ったのはunixでした)

三五六

コメントをつける / 削除する
Subject: Re: 32bit版jgawk
Date: 2013/04/05 01:58
From: 卯

こんにちは。こちらこそありがとうございます。色々知らない事だらけです。
「/dev/tty」というのは確か馬目さんのスクリプト中で見かけて、こんなのWindowsで書いていいのか…と思ったらawk内部で記述する分にはOKだったという事がありました。そんな話もすっかり忘れていた先日、自分の外部変形のコメント行に/dev/ttyへprintするような処理を書きかけていたのを発見し、もうこれでいいやとそのまま使ってしまいました。うちはgawkm115.zipの物ですけどきちんと動いてますよ。まあ何も書かない場合と同じ事が起こっているのかも知れませんが、少なくともエラーは出てないです。
細かい仕様違いはありますけど、Rubyのバージョン違いに比べたら全然大した問題じゃない感じで、awkはお手軽で好きです。(複雑なのはわからない)

コメントをつける / 削除する
Subject: Re: 32bit版jgawk
Date: 2013/04/17 08:00
From: 三五六
X-URL: (URL)

超遅レスすみません。

たしか、以前確認して、自分用覚書には「エラーになる」書いたハズ。
再度確認しましたが、やっぱり、家ではエラーです???

【テストファイル tty_test.awkの内容】
D:\>type tty_test.awk
BEGIN{
print "Test print";
print "Test /dev/stdout" > "/dev/stdout";
print "Test /dev/stderr" > "/dev/stderr";
print "Test /dev/tty" > "/dev/tty";
}

【jgawk.exeで試す。】
D:\>jgawk -f tty_test.awk
Test print
Test /dev/stdout
Test /dev/stderr
jgawk: tty_test.awk:6: fatal: can't redirect to `/dev/tty' (No such file or directory)

【gawk.exeで試す。】
D:\>gawk -f tty_test.awk
Test print
Test /dev/stdout
Test /dev/stderr
gawk: tty_test.awk:6: fatal: can't redirect to `/dev/tty' (No such file or directory)


【jgawk.exeのバージョン情報】
D:\>jgawk --version
GNU Awk 3.0.6 + multi-byte extension 1.15
Copyright (C) 1989, 1991-2000 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

Subject: Re: 32bit版jgawk
Date: 2013/04/17 12:45
From: 卯

わかりました!!
改めて自分が書いた物を見返してみたら"/dev/stderr"でした。確かに"/dev/tty"はエラー出ます!
適当に書いてすみません…。

検索したら三五六さんの2005年の書き込みが出てきました。なるほどなるほど…。
ざっくり言えばUNIX系端末ではどのコマンドでも/dev/errが普通に通用し、Windows端末には本来そんな物はないのでエラーになるがawk.exeの計らいで画面に出力される場合もある、と。awkスクリプトの互換性を追求すれば、どんな端末でも同じスクリプトが動いてほしいというWindows版awk.exeのお節介もわからないではないですが…さらにUNIX系コマンド使いの矜持として/dev/ttyと記述するのもわからないではないですが…現時点で(そして高い可能性で当面の間)MS-DOSやWindows上でしか動かないjw_cad用のスクリプトでそれをやるのはどうかなと思ったりして。awkスクリプトの作法でなく、jw_cad用外部変形の作法として/dev/ttyを使うのを避けるようにしようかと思います。

コメントをつける / 削除する
Subject: 64bitアプリ
Date: 2013/04/06 10:58
From: AF <afsoft@tiger.livedoor.com>
X-URL: (URL)

卯さん、こんにちは。
先日、うちの「AFJWV」等で使用しているJWWデータ読込み部分を、DelphiXE3という開発環境で 64bit化してみました。まずは、WindowsAPIを使用する部分で注意しないといけないという事。引数等の型をそのまま使え(勝手に Integerとかにしない)っていう事だそうです。私のプログラムではほとんど使っていないのでこれはスルー。
次に、ポインタを使っている場合、ポインタなアドレスを Integer(32bit)で扱っているとダメ、って事らしいです。私のはこれに引っ掛かって、書き直しをしました。Delphiではそうでもないですが、C言語だとポインタを使うことが多いと思いますので、C言語を使っている人にとっては相当大変かも!?
特に注意するのはその2点っぽいです。あと、ブログでも書きましたが、Direct2Dでの画像描画が真っ黒になりました。回避方法があるかもしれませんけれども。
メリットとしては、3.2GBを越えるメモリ空間が扱えるらしい、って事と、64bit幅の整数計算が出来るらしい?って事と、多少なりとも高速化する部分があるらしい?って事なようですね。当然、WOW64 で動かずネイティブで動作するんでしょうから、その分、速くて安定すると想像しますし、「Program Files(x86)」ではなくて「Program Files」に入れられるんだと想像します。
デメリットとしては、32bit環境では動作しないことと、あと、ファイルサイズが大きくなるって事ですね。簡単なサンプルプログラムが 32bitだと 2MB程のものが、64bitにすると 3MB程になってました。
取りあえず少し触ったところでそんな感じ。

コメントをつける / 削除する
Subject: Re: 64bitアプリ
Date: 2013/04/06 13:31
From: 卯

そのまま簡単に移行するわけにはいかないのですね…。
これからのプログラミングはやはりそこを注意するのが作法なんでしょうか。そうあってほしい。