Perlテックブログ

ITエンジニアの成長意欲を刺激する技術考察、モジュール開発の日記。Perlイベントや国内や海外のPerlの記事の紹介。

SPVMの仕様策定へ向けて - SPVM開発日記

SPVMの仕様を確定するために、ドキュメントと試験を並行して書いていく。最初は、未定義値と整数リテラル。ドキュメントはこちら。SPVM公式ドキュメント 1.0 ベータ

文字列リテラルと数値リテラルの改善 - SPVM開発日記

文字列リテラルと数値リテラルを見直す。C言語とPerlのリテラル表現を見比べて、どれが一番フィットするかを調査。

「YAPC 2019 東京」の前にPerlがどんなもんかサラッと見ておきたい学生さんは「Perl基本文法最速マスター」が便利

「YAPC 2019 東京」の前にPerlがどんなもんかサラッと見ておきたい学生さんは「Perl基本文法最速マスター」が便利です。30分くらいで、読み通せるので、ふむふむとなって、さらに、YAPCがいい感じになります。d.hatena.ne.jp「なんかちょっとだけPerlやった…

ネイティブAPIの名前を短く - SPVM開発日記

ネイティブAPIの名前を短くしたい。頻繁に使うものの名前は短く。

ネイティブAPIの整理 - SPVM開発日記

C拡張で利用できるネイティブAPIを整理する。

スレッドごとの例外変数とモータルスタック - SPVM開発日記

SPVMにはスレッド機構はないが、C拡張からスレッドを使ったときに、SPVMのデータが破損しないように実装したい。例外変数とモータルスタックがグローバルなので、スレッドを生成したときに破壊されてしまうので、スレッド単位で壊れないようにする。

ウィークリファレンス情報を改善して、オブジェクトサイズを小さくする - SPVM開発日記

オブジェクトサイズの最適化をしていく。現在は、ウィークリファレンスのための、フィールドが、3つある。「バックリファレンスの配列への参照」「バックリファレンスの長さ」「バックリファレンスのキャパシティ」弱参照というのは、普段は使わない機能なの…

疑似的なrequire - SPVM開発日記

疑似的なrequireを実装したい。C言語だと、「#ifdef」を使って、条件に応じて、ライブラリを読み込んだり、読み込まなかったりできるけれど、マクロがない言語だとこのようにできない。すべてを静的にコンパイルするのだけれど、ライブラリが存在するときだ…

インターフェースのチェックの改善 - SPVM開発日記

SPVMは、インタフェースという機能を持っている。これは、実装のないメソッドの定義をひとつだけ持てるパッケージです。 package SPVM::Comparator : interface { sub compare : int ($self : self, $x1 : object, $x2 : object); } オブジェクトの属するク…

インライン展開完了 - SPVM開発日記

以下のインライン展開ができるようになった。 rw,ro,woで定義されたフィールドアクセッサ rw,ro,woで定義されたパッケージ変数のアクセッサ 定数ひとつを返すサブルーチン 「new パッケージ名」だけをreturnする単純なコンストラクタ これで、アクセッサを使…

BEGINブロックは単なるサブルーチン - SPVM開発日記

よく考えると、BEGINは引数がなくって、戻り値がvoidの単なるサブルーチンだ。こういうサブルーチンをコンパイル後に呼び出すという処理を書けばよいだけだ。そんなに難しくない。

BEGINブロック - SPVM開発日記

パッケージ変数を初期化するためには、BEGINブロックが必要だということに気が付いた。コンパイルが終了した段階で、パッケージ変数を初期化できるBEGINブロックを準備。 BEGIN { } Perlは、文法表現が豊かなので、独自に考えなくって良いのがいいね。

デフォルトでプライベートなフィールド - SPVM開発日記

フィールドをデフォルトで、プライベートにしようと考えている。

アクセッサのインライン化 - SPVM開発日記

フィールドへのアクセッサとパッケージ変数へのアクセッサをインライン化するのに成功した。

フィールドのアクセッサの自動生成 - SPVM開発日記

アクセッサを自動的にインライン展開したいと書いたのだけれど、やってみると、これは、非常に難しく、今の僕には、できない気がしてきた。それなら、いっそ、フィールドのアクセッサを自動で生成できる構文を作れば、識別が簡単で、インライン化も簡単そう…

値型の名前の規則の変更 - SPVM開発日記

値型の名前の規則の変更する。現在は Complex_d2 Complex_f2 となっているのを Complex_2d Complex_2f に変更する。何回もタイピングしているんだけど、どうしても、数字を先に打ってしまう。これは三次元という言い方を3Dといういうから、それに引っ張られ…

サブルーチンIDを0から始める実装 - SPVM開発日記

現在サブルーチンIDは、ハッシュのキーにしやすかったという理由で、1から始まっているのだけれど、0から始まった方が実装が簡単で自然なので、0から始める実装に変える。現在サブルーチンの探索は、並べ替え済み配列を二分探索するという方法でやっているの…

フィールドの並べ替え - SPVM開発日記

オブジェクトサイズを小さくすることに取り組んでいます。そのための一つとしてフィールドの並べ替えを行う。数値型は大きいものから順番に並べることによって、詰めることができる。数値型の最大が8バイトなので、8バイトのアラインメントで詰める。 double…

吉祥寺.pm参加中

twitter.comkichijojipm.connpass.com

オブジェクトの最適化 - SPVM開発日記

オブジェクトのサイズを小さくして、オブジェクト生成のコストを小さくする最適化をする。mallocするにしても、mallocの回数を減らして、サイズを小さくすると速くなるという。

SPVMの公式ドキュメントへのリンク

SPVMの公式ドキュメントへのリンクです。SPVMの公式ドキュメント 1.0 ベータ

定数関数のインライン展開 - SPVM開発日記

ごく簡単な関数だけインライン展開したいというのがある。 定数関数 フィールドのゲット フィールドのセット パッケージ変数のセット パッケージ変数のゲット 構文木をコピーするのは大変だから、バイトコード置き換えでできる範囲で、簡単なインライン展開…

ファットカンマ - SPVM開発日記

ファットカンマを書けるようにすると、キーと値が見やすくなる。 my $hash = SPVM::Hash->new_with_array([(object)z => 1, y => 2, z => 3]);

変数展開の改善 - SPVM開発日記

変数展開を改善して配列アクセスとハッシュアクセスができるようにしたい。 "aaa$foo->[0]bbb" "aaa$foo->[$p]bbb" "aaa$foo->{x}bbb" きちんと実装するには、パーサーに再起させる必要がある?簡易的に実装するなら、定数と変数だけに限定するか。

配列と文字列のコピー関数 - SPVM開発日記

文字列と配列のコピーは頻度が高いので、コピー関数を実装したい。 copy_string copy_byte_array copy_short_array copy_int_array copy_long_array copy_float_array copy_double_array copy_object_array

サブルーチンのインポート - SPVM開発日記

サブルーチンをインポートできる機能をつけよう。 use Foo (bar, baz);

現在のSPVMの完成度は40% - SPVM開発日記

現在のSPVMの全体的な完成度は40%くらい。 文法 90% CレベルAPI 50% 内部最適化 40% ドキュメント 5% 試験 10% サンプル 5% 標準関数 5% 標準ライブラリ 5% CレベルAPIと内部最適化と文法が完成してくれば、残りはどんどん進みそう。

フィールド名が予約語とぶつからないようにする - SPVM開発日記

Perlの書きやすさの一つとして、予約語が変数名やサブルーチン名とかぶってもよいというのがある。これをサブルーチンですでにやっているのだけれど、フィールド名でもなんとかできないかなぁ。

Perlとの文字列のやり取り - SPVM開発日記

SPVMには、Perlのデータ型とSPVMのデータ型を変換するAPIが準備される。文字列をどうやって渡そうかと考える。Perlは、バイト列としての文字列なのか、decodeされた内部的な文字列なのかを、判定することができない。だから、自動判定はできなくって、決め打…

constなミュータブルな文字列 - SPVM開発日記

イミュータブル文字列の実装を始めたのだけれど、どうもC言語のラッパーとしてのSPVMという観点で見たときに、相性がよくない。やっぱり、constを使って、ある程度の安全性を導入しつつ、ミュータブルな文字列でいこうかなぁ。デフォルトの文字列の実装に何…