Perlテックブログ

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

コンスタントプールの再実装 - SPVM開発日記

SPVMはPerlの実装と、Java VMの仕様を読むことから始まり、両者のアイデアを取り入れながら、付け足したり、削ったりしながら微調整を繰り返しています。SPVMは、Javaのコンスタントプールの機能を実装していたんだけれど、その後取り外してしまいました。コ…

C言語でファイル名だけを取得する方法 - Linux, Windows対応

C言語でファイル名だけを取得する方法について書いておきます。LinuxのスラッシュとWindowsのバックスラッシュに対応しています。後ろからスラッシュかバックスラッシュを探して、見つかった場合は、その次の位置のポインタを返します。見つからなかった場合…

整数で割り切れれたときはその数を、割り切れなかったときは1大きい数を求めるアルゴリズム

整数で割り切れれたときはその数を、割り切れなかったときは1大きい数を求めるアルゴリズムです。C言語で必要なメモリブロックの数を計算するのによく利用するのでここにメモしておきます。 計算 結果 7 / 3 3 6 / 3 2 5 / 3 2 4 / 3 2 3 / 3 1 3 / 2 1 3 / …

リファレンスの機能を実装しつつ、変数領域作成で、mallocしない方法

現在SPVMのメモリ最適化を進めています。今まさにやろうとしていることは、サブルーチン呼び出しを行ったときの、変数領域のメモリ最適化です。 mallocの回数を減らしたい mallocをたくさん呼び出すことは、非常に遅いことだといわれています。mallocを呼び…

PerlはC言語とC++文法を包括しているという発見

SPVMの開発は、C/C++をもっとも簡単にバインディングできるということを一つの目標としています。C/C++で書かれた、ライブラリを、同じ形で関数として表現したい。こういった場合に、Perlの二つの文法が役にたつことを発見した。 例外処理 リファレンス 「リ…

メモリの最適化に取り組む - SPVM開発日記

インクリメント、特殊代入の実装が無事終わった。それとexeの生成の試験がCPANでコケまくっているので、近いうちに修正しなくっちゃ。 メモリの最適化 次は、メモリの最適化に取り組んでいきます。メモリ最適化なんだけど、何をするかというと、mallocの回数…

インクリメントの抽象構文木は意外と難しい - SPVM開発日記

weakenの試験を書き終えて、今日は、インクリメントのバグの修正を行っている。インクリメントは単純そうに見えて意外と構文木を構成するのは難しい。インクリメントには前置と後置の二種類がある。 前置のインクリメント 後置のインクリメント 前置のインク…

タグ付きポインターというマニアなテクニックを紹介してみる

SPVMの可変長配列の構文は、かなり複雑に膨らみそうな予感がしたので、あきらめ。今日は、ウィークリファレンスの試験をして、壊れている部分の修正をしてる。PerlやSPVMは、リファレンスカウント方式のGCで、相互参照あるいは循環参照が起こると、それらの…

「Perlコア」だけで実現する簡単に「クラス」を作る方法

Perlはクラスの仕組みがわかりにくいというご意見をいただいたので、Perlコアだけで、クラスを作成する方法を簡単に解説したい。理解している方からすれば、そうは感じないかもしれないですが、書くのはeasyかもしれないですけど、どう考えてもsimpleではな…

Mojolicious 8.0でMojo::URLのqueryメソッドの追加とマージが入れ替わったので、アップデートには注意

Mojolicious 8.0でMojo::URLのqueryメソッドの追加とマージが入れ替わったので、アップデートには注意。github.com grep -r -- "->query" dir で検索して $url->query({foo => 1}) としている部分と $url->query([foo => 1]) としている部分をすべて入れ替え…

可変長引数の実装 - SPVM開発日記

オートボクシングとアンボクシングの実装は順調に書けた。 可変長引数 次は可変長引数の実装だ。可変長引数というのは、複数の値を受け取れる関数のことだ。たとえば、C言語のprintf関数は、ひとつの引数でもよいし、三つ渡してもよい。 printf("foo"); prin…

オートボクシングの実装 - SPVM開発日記

数値から文字列への自動変換ができるようになった。変数展開は、"aaa$foo->{x}bbb"や"aaa$foo->[0]bbb"を解析するのが難しすぎて、頓挫しちゃった。こっちはあきらめる。 オートボクシングとオートアンボクシング 今日からは、オートボクシングとオートアン…

文字列を簡単に出力する機能 - SPVM開発日記

昨日、型セマンティクスがすべて確定して実際に実装するところまで書けた。 数値型 汎用オブジェクト型 クラス型 配列型 インターフェース型 値型- リファレンス型 の「代入」「自動型変換」「実行時型変換」「実行時型チェック」を矛盾なく実装した(つもり)…

Perlのイベント 六本木.pm #1 2018年9月14日

LT return520さん#roppongipm 「1年間Perlでゲーム作りました。」@return520さん pic.twitter.com/l75ViFXAsG— kabukawa (@kabukawa) 2018年9月14日setoazusaさん#roppongipm 「技術書典に行こう!(仮)」@setoazusaさん pic.twitter.com/SswYM6MqkH— kabukaw…

型の互換性に関する考察 - SPVM開発日記

SPVMの型の互換性について、いろいろと調査している。オブジェクト型についてまとめると以下のようになる。 汎用オブジェクト型 object object[] インターフェース型 Comparable Comparable[] クラス型 Point Point[] 配列の次元数は255まで増やすことができ…

コンパイル時型チェックと実行時型チェックの分離 - SPVM開発日記

今週一週間は、SPVMの小さなバグをとっていく。文法チェックの試験をもう少し増やす。それと、コンパイル時型チェックと実行時型チェックを明確に分離したい。まだ、自分の中でまとまっていないので、考えをまとめる。 コンパイル時型チェック コンパイル時…

「Perlってオワコンかな?」と思ったときに読むコンテンツ 7選

Perlゼミのコンテンツ Perlゼミのコンテンツ。情報量豊富。最新のPerlの書き方が覚えられる。 Perlプログラミングを学びたい人向けのPerl入門講座です。Perlはテキスト処理に最適化されたプログラミング言語です。Linuxシステム管理、Web開発という分野でも…

実行ファイルの作成に成功。次はWindowsネイティブアプリを作れることを試す。- SPVM開発日記

SPVMでexeファイルの作成に成功した。共有ライブラリも問題なく読み込めるようになった。試験環境は、以下のようなコマンドを打って、実行ファイルを作れる。 perl Makefile.PL make && perl -Mblib -- blib/script/spvmcc -I t/default/lib TestCase::MyExe…

共有ライブラリ(.so)が直接gccの引数に指定できるだなんて知らんかった

昨日SPVMのexeファイルの生成に成功しました。これで、SPVMにもPerlにも依存しない、実行ファイルが出力できるようになった。Windowsネイティブアプリや、macOSアプリ、iphoneアプリなんかを、Perlの文法で開発できる道が開けた。(androidはJava挟まんといか…

「perlってもうweb業界のCOBOLだよな・・・」と思っているあなたへ

たった三行でWebアプリ開発 Mojolicious::Lite たった三行で、Webアプリが開発できるMojolicious::Lite。Mojolicious::Liteを使って3行アプリ作成Mojoliciousは非同期I/O + プリフォークで、HTTPアクセスの並列性能がとてもよく、スケールできるフレームワー…

Attachment EP - 『webデザイン×イラスト』の掛け合わせで伝わる情報に作り変える!

イメージに物語を感じる、すごくわかりやすいデザインだと感じたので、紹介。 『webデザイン×イラスト』の掛け合わせで伝わる情報に作り変える!オザワタクヤのポートフォリオサイト。ウェブデザインに使用するイラストレーション、インフォグラフィック、キ…

型チェックをコンパイル時に移動する | SPVM開発日記

今SPVMのコンパイル情報とランタイム情報とを分離する作業をを行っているのですが、これがなかなか難しい。分離すると、ロジックが二重管理になっちゃうものがあるんだけど、これを何とか解決せねば。 ランタイムに含まれる型チェック 今は、型チェックの関…

ポータブルな表現は文字列、非ポータブルな表現はポインタ | SPVM開発日記

SPVMでexeを出力できるように、実装を続けているんだけれど、パッケージとか、サブルーチンとか、パッケージ変数とか、フィールドとかいった情報を、いったんポータブルな表現に変換するということをやっている。そして、このポータブルな表現から、ランタイ…

Perl開発したラリー・ウォールも言うようにプログラマーの美徳は「怠惰・短気・傲慢」

東京大学で教えている西内啓さんのツイートがプログラミング教育の話題で盛り上がっていて、Perlを作ったラリーウォールの名言がプログラマーの気性として語られていたので、記念にとっておきます。「子どもたちがプログラミング学ぶとよい」という話には同…

Mojo::JSONとCpanel::JSON::XSの相互運用が始まった

最近のMojoliciousのアップデートの一番大きくうれしいのは、Mojo::JSONとCPanel::JSON::XSの相互運用が始まったことだ。github.com Cpanel::JSON::XSとは Cpanel::JSON::XSのJSON::XSに対する変更点は、以下のように記述されている。 JSON :: XSの変更点 文…

実行環境とコンパイル環境の分離 - SPVM開発日記

今exeファイルを作ろうと奮闘しているところ。いろいろ調べると、意外と難しい。でも、いけそうな感じもする。先にやらないといけないことは、実行環境で利用するデータとコンパイル環境で利用するデータを分離しなくちゃいけないということ。今は、コンパイ…

「Ansibleは現代のPerl」といったねた元

ちょいと古いけど、Ansibleは現代のPerlというネタ元を拾ってきた。ちょっと、たとえに、無理がある気もしますけどね...。redhat.lookbookhq.com

exeファイルを作り出す - SPVM開発日記

ループ展開は複雑で、難しすぎたので、ひとまずあきらめの心境。難しいことやるまえに、まずは先にベンチやんなきゃね。ビルドツールもSPVMコアには必須ではない気がしてきたので、こちらは将来CPANモジュール化してくれる人が現れるのを期待して、リリース…

コンパイラオプションとリンカオプション | SPVM開発日記

Perlには、ExtUtils::CBuilderというクラスプラットフォームで、C/C++ソースコードのコンパイルと共有ライブラリ作成を助けてくれるモジュールがある。SPVMは、内部的にこのモジュールを利用して、コンパイルと共有ライブラリの作成を行っている。SPVMのひと…

ccflagsの取り扱い | SPVM開発日記

gccを使ってコンパイルするのだけれど、そのオプションを構成する方法について考えている。gccのコマンドラインオプションなので、最終的には出力は空白区切りの文字列になる。でも、プログラムで扱う場合は、配列にしておいてもよい気がするのだけれど、文…