a21_memo01
の編集
http://essen.osask.jp/?a21_memo01
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
BracketName
EssenRev4
FormattingRules
FrontPage
Help
InterWiki
InterWikiName
InterWikiSandBox
K
MenuBar
PHP
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
RecentDeleted
SDL2_01
SandBox
WikiEngines
WikiName
WikiWikiWeb
YukiWiki
a21
a21_bbs01
a21_count
a21_memo01
a21_tl9a
a21_txt01
a21_txt01_10
a21_txt01_1a
a21_txt01_2
a21_txt01_2a
a21_txt01_2b
a21_txt01_3
a21_txt01_4
a21_txt01_5
a21_txt01_6
a21_txt01_6a
a21_txt01_7
a21_txt01_8
a21_txt01_8a
a21_txt01_9
a21_txt01_9a
a21_txt02
a21_txt02_1a
a21_txt02_1b
aclib00
aclib01
aclib02
aclib03
aclib04
aclib05
aclib06
aclib07
aclib08
aclib09
aclib10
aclib11
aclib12
aclib13
aclib14
aclib15
aclib16
aclib17
aclib18
aclib19
aclib20
aclib21
aclib22
aclib23
aclib24
aclib25
aclib_bbs
arm64_01
avm0001
edu0001
edu0002
esb02b_hrb
esb_dbg
esbasic0001
esbasic0002
esbasic0003
esbasic0004
esbasic0005
esbasic0006
esbasic0007
esbasic0008
esbasic0009
esbasic0010
esbasic0011
esbasic0012
esbasic0013
esbasic0014
esbasic0015
esbasic0016
esbasic0017
esbasic02a
esc0001
escm0001
essen_hist
esvm0001
esvm0002
esvm0003
esvm0004
esvm0005
esvm0006
esvm_i0
hh4a
idea0001
idea0002
idea0003
impressions
jck_0000
jck_0001
kawai
kbcl0_0000
kbcl0_0001
kbcl0_0002
kbcl0_0003
kbcl0_0004
kbcl0_0005
kbcl0_0006
kbcl0_0007
kclib1_0000
kclib1_0001
kclib1_0002
kclib1_0003
kclib1_0004
kclib1_0005
kclib1_0006
kclib1_0007
kclib1_0008
kclib1_0009
kclib1_0010
kpap0001
members
memo0001
osask4g
osask4g_r2
p20200311a
p20200610a
p20200610b
p20200624a
p20200711a
p20200716a
page0001
page0002
page0003
page0004
page0005
page0006
page0007
page0008
page0009
page0010
page0011
page0012
page0013
page0014
page0015
page0016
page0017
page0018
page0019
page0020
page0021
page0022
page0023
populars
seccamp
seccamp2019
sechack
sechack2019
seclang01
sh3_2020
sh3_2020_kw
sh3_2020_nk
sh3_2021_kw
sh3_2021_nk
sh3_kw_hist
termux001
termux002
text0001
text0001a
text0002
text0002a
text0003
text0004
text0005
text0006
text0006a
text0007
text0008
text0010
text0011
text0012
text0013
text0014
text0015
text0016
text0017
text0018
text0019
text0020
text0021
tl1c
tl2c
tl3c
tl3d
* [[a21]]に関する雑記#1 -(by [[K]], 2021.01.26) ** 2021.01.25(月) -今日は[[a21_txt01_3]]のTL-3を書きました。我ながらシンプルにわかりやすく書けた気がします。 -ラベル名をうまく使って、分岐先のpc値を高速に求められるようにしたので、結構高速に動いてくれそうな気がします。 -でもなあ、goto命令だからなあ。やっぱり嫌がられてしまうかなあ・・・。 ** 2021.01.26(火) -うーん、この先の拡張を考えると、トークンコードの処理は別の関数に切り出しておくほうがよさそうだなあ・・・。じゃあさかのぼってTL-2から修正するかな。 -TL-4で高速化して、TL-5で「式」を扱えるようにして、TL-6で型を導入したらいいかなあ・・・。 ** 2021.01.27(水) -TL-4での高速化はやっぱりやめます。それはTL-5でやることにします。 -TL-4でやるべきは「REPLの導入」だと思いなおしました。・・・TLシリーズはせっかくのスクリプト言語(インタプリタ)なので、そのメリットを生かさないともったいないです。だからREPLの導入はぜひやるべきだと確信しました! -その後の予定としては、TL-5で少し高速化して、TL-6でもっと高速化して、TL-7でwihleループやブロックifなどを導入して、TL-8かそれ以降でグラフィック命令を導入します。 -そのあたりまでできたら、次はTJシリーズに移行して、JITコンパイラかな・・・。 ~ -TL-4ができました。REPLできるのはすごく楽しいです。これがたった7.5KBのアプリで実現できるなんて! →[[a21_txt01]] ** 2021.01.28(木) -TLシリーズでどこまでやるかで少し悩んでいます。たぶんやりすぎないほうがいいんです。道半ばにしておいて、「自分だったらこうするのに」をいくつか残しておくほうが、その後の開発にチャレンジする人が増えると思うのです。 -ということで型も浮動小数点演算も配列も構造体も関数もローカル変数も全部見送ろうかなと思っているのですが、どうかなあ。 -具体的な改造コードを提示しないまでも、こうすればできそうだよね?くらいの話は書くかなあ。 ~ -[memo]あとでどこか別のところにまとめるつもりだけど、インタプリタ言語のメリット: --[1] 実行ファイルがいらない。ソースコードだけあればよい。あとで、実行ファイルだけになって、「ソースは失われてしまった」みたいな事故が起きない。 --[2] インタプリタ言語のソースコードは(たいてい)機種依存しないので、移植しなくていい。将来新しいCPUとかOSが出ても無修正で対応できる。 --[3] JITコンパイラとかであれば、それぞれの環境に応じた実行コードを生成して実行してくれる(可能性がある)。 --[4] インタプリタはREPLができる。 -対応するデメリット: --[1] ソースがあっても処理系がないと動かない(どのバージョンで動かすかわからなくなったとか)。 ~ -現在手元で開発中のTL-6ですが、どうせやるならJITコンパイルしない範囲での最速を目指してやろうということで、ちょっと頑張ってみました。結果はgcc比で13.7倍。我ながら、これはなかなかいいんじゃないかなと思いました。 --その後さらに頑張って、11.3倍まで速くできました。 ** 2021.02.02(火) -現在、TL-7で、演算子をどこまでサポートするかで悩んでいます。 -たくさんサポートすると、それだけでプログラムはかなり長くなってしまいます。 -でも少なすぎると、おんぼろすぎて、TL-7が魅力的には見えなくなってしまいます。 ** 2021.02.05(金) -プログラムで変数に対する説明が省略されすぎじゃないかと言われて、その通りだと思ったので少しずつ直していきます! ** 2021.02.06(土) -今になって、lexer()とgetTc()を統合すればもっとすっきりと書けるということに気づきました。 -それで、どういう話の流れにしたら最小の手間で自然にその結論に到達できるかを悩み中です。 ** 2021.02.15(月) -私はTL-7でどうにかしてスタックマシンを構成しないで、式の評価をやりたいです。しかもできるだけ自然な感じで。・・・アイデアはあるんです。きっとできると思っています。 ** 2021.02.16(火) -TL-7が手元ではできた!・・・454行で、9.50KB。これはかなりコンパクトだと自分では思います。それでいて、ちゃんと優先順位を反映して計算できています。やったね! ** 2021.02.17(水) -プログラムを差分で書いて説明しているけど、差分ではなく全部が欲しいという人もいるだろうなあ・・・。TL-1から全部をまとめてzipとかでダウンロードできるようにしたらいいのかなあ。 ** 2021.02.18(木) -現在、手元では開発中のTL-9で、マンデルブロー集合の描画プログラムが動いています。しかもかなり高速で、同じことをC言語で書いて gcc -O3 でビルドして動かしたものと比べて、4.0倍しか遅くありません。これはすごい! -今のTL-9は725行で、実行ファイルでは17.0KBです。グラフィック描画のためにaclライブラリを使っています(17.0KBの中にaclライブラリも含まれます)。 ** 2021.02.19(金) -TL-9でどこまでやるかを考えています。 --演算子:% --組み込み関数:xorShift() --組み込み関数:getPix() --組み込み関数:fillRect0() --この4つがあれば、[[esbasic02a]]の (4-3)「迷路作成(穴掘り法)」 が移植できるはずです。演算子も組み込み関数も簡単にできるのでこれは余裕そうです。 -さらに、 --配列変数のサポート。 --関数定義と関数呼び出し。 --演算子:& --演算子:/ --演算子:< >= <= --組み込み関数:ff16sin() --組み込み関数:ff16cos() --組み込み関数:inkey() --組み込み関数:wait() --ここまでやれば、[[esbasic02a]]の (4-4)「キューブ回転」 が移植できるはずです。 -その先も、文字列の簡易サポートをして、組み込み関数をさらに増やせば、 --(4-5)「インベーダゲーム」 --(4-6)「ブロック崩し」 -も移植できると思うのですが、そこまでやるかどうかは悩みどころです・・・。 -でも、やったほうがおもしろいかなあとは思います。 ---- -さらに考えを進めて、一つのソースコードで、gccでコンパイルして動かすことができて、かつTL-9でも動作できるような、そんな仕様ができないものかと検討中です。 --[1] lexer()を改造して、#を記号として認識させる。 --[2] ついでにコメントも書けるようにしてやる(おまけ)。 --[3] #ifndef TL9 ~ #endif で囲まれた範囲は、TL-9からはコメントとして無視してやる(gccには認識される)。 --[4] #ifdef TL9 ~ #endif で囲まれた範囲は、TL-9からは通常通り解釈してやる(gccには無視される)。 --[5] #includeは無視する。 --[6] 組み込み関数の名前や仕様をaclライブラリの本来のものに似せる。 ** 2021.02.26(金) -TL-9aまで作ってみて、自分で「これはとても良い出来栄えだ」と思いました。こんなにいいゴールに行けるのなら、今のようなレベルではなく、もっと気合を入れて説明を書きたいです。 -ということでTLシリーズを書き直して、HLシリーズとして出直します。 --TL-9aについては、ここで詳しく紹介しています。→[[a21_tl9a]] ** 2021.03.12(金) -[1] -今日はtwitterで、「10日くらいでできる!プログラミング自作入門」のことを紹介しました。たくさんの人からいいね!してもらえて、たくさんの人にテキストを見てもらえて、私はとっても嬉しいです!本当にどうもありがとうございます。 --https://twitter.com/hkawai3/status/1370198988096368643 -[2] -やっぱり、言語の自作といえば、セルフホストは目標の一つだよなあ。HL-9aにあと何を足したら、HL-1を実行できるようになるかなあ。 --関数の定義と呼び出し機能。 --char型の配列をどうするか問題。ついに型に手を出すべきか?(簡易なものならまあできそう) --printf()をどうするか。まあprintfを使って実装してしまえばいいだけかもしれないけど。 -うーん、これは100行じゃできなさそうだなあ。300行くらいかなあ。 -300行頑張って、HL-9aが動かせるようになるなら本気でやりたいけど、HL-1だもんなあ。・・・うーむー。 -まあでもそこからさらに数百行頑張れば、HL-9aくらいはできるかもしれないけれど・・・。 ** 2021.03.23(火) -自作言語を作る場合に、セルフホスト(自分自身のソースコードをコンパイルできる)を目指す目標設定があります。 -私はこれがいい目標になっていることを認めつつも、しかしこれだけが目標だとそもそも何のために言語を作るのかというところが怪しくなると思っていて、だから今まではこれを目標に設定しないでやってきました。 -私としては、かっこいいグラフィックが表示できてデモの見栄えが良いような言語を目指していたのです。 -しかしいざそこまでできて、この言語でさらに高みを目指すにはどうしたらいいのかを考えると、私は「生産性の高い言語」を作りたいと思うようになりました。 -そして生産性をどう測るかですが、やっぱり同じプログラムを書いて記述量が少なくて済むほうこそが、生産性が高いと言えると思うのです。 -さて私は何を作る際に生産性を高めたいのかというと、今は言語を作っているので、言語を作りやすい言語を目指したいです。・・・あれ?そうなると、セルフホストできるようにした上で、自分自身を簡潔に記述できればよさそうです。 -ということで、私は次はセルフホストを目指します! ** 2021.04.05(月) -HL-9aをJITコンパイラ化しても、全然速くならない!もとのHL-9aが速すぎた!!・・・まさかそんなことがあるのか・・・。 ** 2021.04.06(火) -やはりレジスタ変数をサポートしたほうがいいのだろうか・・・。もはやそれ以外に勝ち目がないからなあ(レジスタ変数を使えば目に見えて速くなるのは確認済み)。 -うーん、説明が面倒になるから、できればレジスタ変数は話題にしたくはなかったんだけどなあ・・・。 -しかしレジスタ変数を扱わないと、結局JITコンパイラのメリットは何もわからないということになってしまうよなあ。それは避けたいよなあ。 -よし、いろいろ試行錯誤した結果、難易度をあまり上げずに高速化するめどが立ちました! ** 2021.04.08(木) -JITコンパイラで性能を出すためにどうしたらいいのかを試行錯誤した結果、レジスタ変数を使うようにしたら十分な効果があることがわかりました(前述のとおり)。 -それでふと思いついたのですが、HL-9aだってレジスタ変数を使うように改造することが可能なのです。それでそのように書いてみました。・・・しかし速くなりませんでした。 -原因を調べてみたところ、HL-9aの場合は変数アクセスのほかに、ic[](=内部コードを格納した配列)へのアクセスも必要で、そこをどうにかしない限りメモリアクセスは少ししか減らないので、速さが大して変わらなかったのだとわかりました。 -なるほどなあ。 ** 2021.04.09(金) -mandel.cの実行速度比較メモ。 --gcc(x86の32bit): 4.0秒(さすがに速い!) --HL-9a(x86の32bit): 27.6秒 --HL-14(仮)(x86の32bit, JITコンパイラ版, レジスタ変数なし): 5.9秒 --HL-14(仮)(x86の32bit, JITコンパイラ版, レジスタ変数あり): 3.7秒 -おお、かなり速くなった!・・・あれ?gccよりも速くなってしまった?!64bitと比較したらどうかな? --gcc(x64): 3.2秒(おおー!さすがだー) // 配列や構造体への連続代入 // 自動enum。クラス名を書けば、enumしてくれる。 * こめんと欄 #comment
タイムスタンプを変更しない
* [[a21]]に関する雑記#1 -(by [[K]], 2021.01.26) ** 2021.01.25(月) -今日は[[a21_txt01_3]]のTL-3を書きました。我ながらシンプルにわかりやすく書けた気がします。 -ラベル名をうまく使って、分岐先のpc値を高速に求められるようにしたので、結構高速に動いてくれそうな気がします。 -でもなあ、goto命令だからなあ。やっぱり嫌がられてしまうかなあ・・・。 ** 2021.01.26(火) -うーん、この先の拡張を考えると、トークンコードの処理は別の関数に切り出しておくほうがよさそうだなあ・・・。じゃあさかのぼってTL-2から修正するかな。 -TL-4で高速化して、TL-5で「式」を扱えるようにして、TL-6で型を導入したらいいかなあ・・・。 ** 2021.01.27(水) -TL-4での高速化はやっぱりやめます。それはTL-5でやることにします。 -TL-4でやるべきは「REPLの導入」だと思いなおしました。・・・TLシリーズはせっかくのスクリプト言語(インタプリタ)なので、そのメリットを生かさないともったいないです。だからREPLの導入はぜひやるべきだと確信しました! -その後の予定としては、TL-5で少し高速化して、TL-6でもっと高速化して、TL-7でwihleループやブロックifなどを導入して、TL-8かそれ以降でグラフィック命令を導入します。 -そのあたりまでできたら、次はTJシリーズに移行して、JITコンパイラかな・・・。 ~ -TL-4ができました。REPLできるのはすごく楽しいです。これがたった7.5KBのアプリで実現できるなんて! →[[a21_txt01]] ** 2021.01.28(木) -TLシリーズでどこまでやるかで少し悩んでいます。たぶんやりすぎないほうがいいんです。道半ばにしておいて、「自分だったらこうするのに」をいくつか残しておくほうが、その後の開発にチャレンジする人が増えると思うのです。 -ということで型も浮動小数点演算も配列も構造体も関数もローカル変数も全部見送ろうかなと思っているのですが、どうかなあ。 -具体的な改造コードを提示しないまでも、こうすればできそうだよね?くらいの話は書くかなあ。 ~ -[memo]あとでどこか別のところにまとめるつもりだけど、インタプリタ言語のメリット: --[1] 実行ファイルがいらない。ソースコードだけあればよい。あとで、実行ファイルだけになって、「ソースは失われてしまった」みたいな事故が起きない。 --[2] インタプリタ言語のソースコードは(たいてい)機種依存しないので、移植しなくていい。将来新しいCPUとかOSが出ても無修正で対応できる。 --[3] JITコンパイラとかであれば、それぞれの環境に応じた実行コードを生成して実行してくれる(可能性がある)。 --[4] インタプリタはREPLができる。 -対応するデメリット: --[1] ソースがあっても処理系がないと動かない(どのバージョンで動かすかわからなくなったとか)。 ~ -現在手元で開発中のTL-6ですが、どうせやるならJITコンパイルしない範囲での最速を目指してやろうということで、ちょっと頑張ってみました。結果はgcc比で13.7倍。我ながら、これはなかなかいいんじゃないかなと思いました。 --その後さらに頑張って、11.3倍まで速くできました。 ** 2021.02.02(火) -現在、TL-7で、演算子をどこまでサポートするかで悩んでいます。 -たくさんサポートすると、それだけでプログラムはかなり長くなってしまいます。 -でも少なすぎると、おんぼろすぎて、TL-7が魅力的には見えなくなってしまいます。 ** 2021.02.05(金) -プログラムで変数に対する説明が省略されすぎじゃないかと言われて、その通りだと思ったので少しずつ直していきます! ** 2021.02.06(土) -今になって、lexer()とgetTc()を統合すればもっとすっきりと書けるということに気づきました。 -それで、どういう話の流れにしたら最小の手間で自然にその結論に到達できるかを悩み中です。 ** 2021.02.15(月) -私はTL-7でどうにかしてスタックマシンを構成しないで、式の評価をやりたいです。しかもできるだけ自然な感じで。・・・アイデアはあるんです。きっとできると思っています。 ** 2021.02.16(火) -TL-7が手元ではできた!・・・454行で、9.50KB。これはかなりコンパクトだと自分では思います。それでいて、ちゃんと優先順位を反映して計算できています。やったね! ** 2021.02.17(水) -プログラムを差分で書いて説明しているけど、差分ではなく全部が欲しいという人もいるだろうなあ・・・。TL-1から全部をまとめてzipとかでダウンロードできるようにしたらいいのかなあ。 ** 2021.02.18(木) -現在、手元では開発中のTL-9で、マンデルブロー集合の描画プログラムが動いています。しかもかなり高速で、同じことをC言語で書いて gcc -O3 でビルドして動かしたものと比べて、4.0倍しか遅くありません。これはすごい! -今のTL-9は725行で、実行ファイルでは17.0KBです。グラフィック描画のためにaclライブラリを使っています(17.0KBの中にaclライブラリも含まれます)。 ** 2021.02.19(金) -TL-9でどこまでやるかを考えています。 --演算子:% --組み込み関数:xorShift() --組み込み関数:getPix() --組み込み関数:fillRect0() --この4つがあれば、[[esbasic02a]]の (4-3)「迷路作成(穴掘り法)」 が移植できるはずです。演算子も組み込み関数も簡単にできるのでこれは余裕そうです。 -さらに、 --配列変数のサポート。 --関数定義と関数呼び出し。 --演算子:& --演算子:/ --演算子:< >= <= --組み込み関数:ff16sin() --組み込み関数:ff16cos() --組み込み関数:inkey() --組み込み関数:wait() --ここまでやれば、[[esbasic02a]]の (4-4)「キューブ回転」 が移植できるはずです。 -その先も、文字列の簡易サポートをして、組み込み関数をさらに増やせば、 --(4-5)「インベーダゲーム」 --(4-6)「ブロック崩し」 -も移植できると思うのですが、そこまでやるかどうかは悩みどころです・・・。 -でも、やったほうがおもしろいかなあとは思います。 ---- -さらに考えを進めて、一つのソースコードで、gccでコンパイルして動かすことができて、かつTL-9でも動作できるような、そんな仕様ができないものかと検討中です。 --[1] lexer()を改造して、#を記号として認識させる。 --[2] ついでにコメントも書けるようにしてやる(おまけ)。 --[3] #ifndef TL9 ~ #endif で囲まれた範囲は、TL-9からはコメントとして無視してやる(gccには認識される)。 --[4] #ifdef TL9 ~ #endif で囲まれた範囲は、TL-9からは通常通り解釈してやる(gccには無視される)。 --[5] #includeは無視する。 --[6] 組み込み関数の名前や仕様をaclライブラリの本来のものに似せる。 ** 2021.02.26(金) -TL-9aまで作ってみて、自分で「これはとても良い出来栄えだ」と思いました。こんなにいいゴールに行けるのなら、今のようなレベルではなく、もっと気合を入れて説明を書きたいです。 -ということでTLシリーズを書き直して、HLシリーズとして出直します。 --TL-9aについては、ここで詳しく紹介しています。→[[a21_tl9a]] ** 2021.03.12(金) -[1] -今日はtwitterで、「10日くらいでできる!プログラミング自作入門」のことを紹介しました。たくさんの人からいいね!してもらえて、たくさんの人にテキストを見てもらえて、私はとっても嬉しいです!本当にどうもありがとうございます。 --https://twitter.com/hkawai3/status/1370198988096368643 -[2] -やっぱり、言語の自作といえば、セルフホストは目標の一つだよなあ。HL-9aにあと何を足したら、HL-1を実行できるようになるかなあ。 --関数の定義と呼び出し機能。 --char型の配列をどうするか問題。ついに型に手を出すべきか?(簡易なものならまあできそう) --printf()をどうするか。まあprintfを使って実装してしまえばいいだけかもしれないけど。 -うーん、これは100行じゃできなさそうだなあ。300行くらいかなあ。 -300行頑張って、HL-9aが動かせるようになるなら本気でやりたいけど、HL-1だもんなあ。・・・うーむー。 -まあでもそこからさらに数百行頑張れば、HL-9aくらいはできるかもしれないけれど・・・。 ** 2021.03.23(火) -自作言語を作る場合に、セルフホスト(自分自身のソースコードをコンパイルできる)を目指す目標設定があります。 -私はこれがいい目標になっていることを認めつつも、しかしこれだけが目標だとそもそも何のために言語を作るのかというところが怪しくなると思っていて、だから今まではこれを目標に設定しないでやってきました。 -私としては、かっこいいグラフィックが表示できてデモの見栄えが良いような言語を目指していたのです。 -しかしいざそこまでできて、この言語でさらに高みを目指すにはどうしたらいいのかを考えると、私は「生産性の高い言語」を作りたいと思うようになりました。 -そして生産性をどう測るかですが、やっぱり同じプログラムを書いて記述量が少なくて済むほうこそが、生産性が高いと言えると思うのです。 -さて私は何を作る際に生産性を高めたいのかというと、今は言語を作っているので、言語を作りやすい言語を目指したいです。・・・あれ?そうなると、セルフホストできるようにした上で、自分自身を簡潔に記述できればよさそうです。 -ということで、私は次はセルフホストを目指します! ** 2021.04.05(月) -HL-9aをJITコンパイラ化しても、全然速くならない!もとのHL-9aが速すぎた!!・・・まさかそんなことがあるのか・・・。 ** 2021.04.06(火) -やはりレジスタ変数をサポートしたほうがいいのだろうか・・・。もはやそれ以外に勝ち目がないからなあ(レジスタ変数を使えば目に見えて速くなるのは確認済み)。 -うーん、説明が面倒になるから、できればレジスタ変数は話題にしたくはなかったんだけどなあ・・・。 -しかしレジスタ変数を扱わないと、結局JITコンパイラのメリットは何もわからないということになってしまうよなあ。それは避けたいよなあ。 -よし、いろいろ試行錯誤した結果、難易度をあまり上げずに高速化するめどが立ちました! ** 2021.04.08(木) -JITコンパイラで性能を出すためにどうしたらいいのかを試行錯誤した結果、レジスタ変数を使うようにしたら十分な効果があることがわかりました(前述のとおり)。 -それでふと思いついたのですが、HL-9aだってレジスタ変数を使うように改造することが可能なのです。それでそのように書いてみました。・・・しかし速くなりませんでした。 -原因を調べてみたところ、HL-9aの場合は変数アクセスのほかに、ic[](=内部コードを格納した配列)へのアクセスも必要で、そこをどうにかしない限りメモリアクセスは少ししか減らないので、速さが大して変わらなかったのだとわかりました。 -なるほどなあ。 ** 2021.04.09(金) -mandel.cの実行速度比較メモ。 --gcc(x86の32bit): 4.0秒(さすがに速い!) --HL-9a(x86の32bit): 27.6秒 --HL-14(仮)(x86の32bit, JITコンパイラ版, レジスタ変数なし): 5.9秒 --HL-14(仮)(x86の32bit, JITコンパイラ版, レジスタ変数あり): 3.7秒 -おお、かなり速くなった!・・・あれ?gccよりも速くなってしまった?!64bitと比較したらどうかな? --gcc(x64): 3.2秒(おおー!さすがだー) // 配列や構造体への連続代入 // 自動enum。クラス名を書けば、enumしてくれる。 * こめんと欄 #comment
テキスト整形のルールを表示する