Perlテックブログ

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

CライクなPerlのif文やfor文などの文法

Perlのifやforなどの文法は、C言語を元にして作られている。C言語やJavaやJavaScriptなどのCファミリーに慣れ親しんでいるなら、Perlの文法もスッと入ってくると思う。 // C言語のif文 if (条件) { ... } else if (条件) { ... } else { ... } # Perlのif文 …

SPVMに必要な機能の完成まで、あと5項目

SPVMの開発を2年くらい続けているのだけれど、だんだんとTODOリストが減ってきて、残り5項目になった。 C/C++言語の構造体を保持する仕組み 複数の数値型の値を持つクラスを連続した配列領域に配置する仕組み(value型) デフォルトでモータルで使えるC言語のA…

undefined symbol: Perl_xs_apiversion_bootcheck

undefined symbol: Perl_xs_apiversion_bootcheckというエラーXSを使っているときに出たので忘備録。このエラーは、.soファイルをコンパイルをしたときのperlと異なるPerlを使ったときにでる。perlbrewやplenvでインストールしたPerlで.soをビルドしたのに、…

Perl入学式 in 札幌(北海道) 第一回環境構築編 2018年7月14日(土)

Perl入学式 札幌が去年に引き続いて2年目の開催。第一回のカリキュラムが、7月14日から始まります。 7月14日 Perl入学式 in札幌 第1回 〜環境構築編〜 「プログラミングに少し興味があるんだけど」という北海道で札幌近くお住いの皆様、この機会に、参加して…

モジュール単位でプリコンパイルすることができるようになる予感

SPVM開発が順調に進んでおります。もう少しで、モジュール単位でプリコンパイルすることができるようになる予感というところです。ドキドキ。モジュール単位でプリコンパイルできると何がうれしいかというと、Perlの文法でソースコードを書いて、CPANからイ…

git rebaseの使い方をやっと理解したので忘備録

git rebaseの使い方をやっと理解したので忘備録を書いておこうっと。 他の人とのやりとりはgit mergeだけで十分 普段の作業はgit mergeだけで十分。ほぼすべての場合は、git mergeだけで十分。これを肝に命じておく。 git rebaseはコミット粒度を上げるため…

例外をどうやって伝播させるか?

例外の実装について調べたり考えたりしていた。一番多い内部実装はなんだと思いますか?「うーん、ちょっと内部まではわからないなぁ」「何らかの方法でジャンプしてたりするのかな」僕が調べた範囲では、setjmp、longjmpを使っている実装が多かった。Java, C…

C言語のラベルは必ず実行文を持たないといけないって知ってた?

C言語でときどきエラーになって原因がよくわからなくって、対処療法的にしてたんだけど、その理由が一つわかった。 C言語のラベルは必ず実行文を持たないといけないということだった。 こういうのは、エラーになっちゃう。実行分がないから。 { LABEL1 : } …

実行時になるまで呼び出す関数が存在するかどうかわからない共有ライブラリにおける関数チェック

C言語の関数呼び出しは、すべて静的なものだと思っていた時期が僕にもありました。でも関数ポインタを使えば、関数を動的に呼び出すことができます。 void* func_address = &foo; (*func_address)(); コンパイル時に、すべての関数名を静的にチェックするこ…

C言語のソースコードとヘッダファイルとライブラリのパスの仕様化する

C言語は本質的に自由な言語で、ソースコードやヘッダファイルやライブラリをどこに配置するのかということが、決まっていません。LinuxなどのOSが、どこにソースコードとヘッダファイルとライブラリを配置するかということを、独自にデザインしている。たと…

ソースコードでどう関数を並べたらわかりやすい?

ソースコードで関数を書いているときに、「どんな順番で関数を並べたらいいんだろうか」と思ったことはありませんか?「abc順?」「適当でいい?」「プログラムがわかりやすくなる方法はある?」僕がPerlやC言語のソースコードを書いているときに、こんな風に並…

ランタイムと配布時のC/C++バインディングの共通化

Perlでは、C言語のバインディングをランタイムにおいて行うInline::Cというモジュールがある。一方で、モジュールを配布するときには、XSという仕組みを利用する。もし、これらが同じ方法で行えたとしたら便利だと思わないだろうか。普段のちょっとした用途…

データと関数の組み合わせでオブジェクト指向を実現する

言語の設計思想として、あらゆるものをオブジェクト指向にしようという発想がある。言語の中で扱われるすべてのものが、オブジェクトとなる。つまり、オブジェクトが先に存在して、そこにメソッドが生えているという考え方だ。これは、オブジェクトとメソッ…

ダイナミックリンクライブラリの呼び出しが遅くなる理由

最近は、ダイナミックリンクライブラリの呼び出しが遅くなる理由はなぜかということについて考えていた。ダイナミックリンクライブラリというのは、実行時にLinuxであれば「.so」Windowsであれば「.dll」で、呼び出しとは、このファイルの中に記述された関数…

Perlはオペレーションシステムと密結合している言語

Perlテックブログに今日、名称が変わりました。PerlをPerlらしくしているものは何だろう。普段は空気のように意識していないけれど、そういう要素が、たくさんあって、それが積み重なっているはずだ。最近C言語をやっていて比較して気が付いたのだけれど、Pe…

Perlの文字列とC言語の文字列の長さについて

ちょっと最近このことについて考えていた。 C言語の文字列は、終端文字で管理されている C言語の文字列は、終端文字で管理されている。 const char* string = "abcde"; 一見すると、5つだけの文字に見えるが、6文字目に「\0」で表現されるヌル文字が存在する…

SPVMは文字列型を実装しない予定

「えー、今どき文字列型のない言語なんてあるのか...」なんて思うかもしれない。普通の言語だったらありえないんだけど、SPVMはPerlにできないことに特化するという方針なので、文字列処理は、Perlにお任せしようと思う。パフォーマンス的にも、C言語でカリ…

Perl6は未来的な言語、Perl5は現実的な言語

Perl6というネーミングは、失敗だったと僕は思っている。でも、実際に今Perl6があるのだから、名前の問題に関して、Perl5はPerl6と共存していくほかないと考えるようになりつつある。それならば、最善のブランディングとはなんだろうか。 Perl6は未来的な言…

SPVMのJITの実装とプリコンパイルとキャッシュ

今目指しているSPVMのJITの実装について語る。実行時コンパイルの手法はさまざまなんだけど、できる限りPerlishな方法で、実現したいと考えている。 パッケージ単位のJITコンパイル 一般的にJITコンパイルというと、関数単位のJITだ。JavaScriptのv8しかりJa…

Perl入学式東京 残り8枠、第二回目からなんだけど、ぜひ参加してね。

1週間後にせまった、Perl入学式東京は残り8枠になっています。第一回目の参加者は、15人くらいだったら、22人ということは、2回目から初参加の方もいらっしゃるはず。Perl入学式 in東京 第2回 〜構文基礎編〜 5月26日 残り8枠サポーターでサポートするので、…

予約語を変数名と関数名で使えるようにするコンパイラの実装について

SPVMを開発しているときに、予約語を変数名と関数名で使えるようにするコンパイラの実装についての考察が深まったのでここに記す。 変数名が予約語とぶつからないようにする方法 変数名は短い。完全修飾名というものを持たない。だから、予約語や標準関数名…

SPVMのJITの単位をサブルーチンからモジュールへ

SPVMのJITの単位をサブルーチンからモジュールへ変更することを考えている。そして、サブルーチンが実行されるタイミングで、コンパイルするのではなくって、モジュールがuseされたタイミングでコンパイルする。 三種類のコンパイル方法 コンパイルには、大…

【海外記事】Perlのイベントのインスタグラム

Perlのイベントの写真が掲載されているインスタグラムのURLを教えてもらったので、ここで紹介。こんな風にインスタグラムに、イベント画像を投稿するのも楽しいかもねぇ。 www.instagram.com

【海外記事】Perlツールチェーンサミット2018でのCPANテスター

私は上の進歩をたくさん作っCPANテスターで今年のPerlのツールチェーンのサミット(PTS) 。PTSは、Perlツールチェーンを維持し改善するための年次イベントです。Perlツールチェーンには次のようなものがあります:CPANディストリビューションの構築とインス…

【海外記事紹介】スイスのPerlワークショップ - Ovid + Call for Papersを発表

スイスPerlのワークショップ で2018年5月15日15:49 下SPW 今年9月にベルンで開催されたスイスのPerlワークショップの基調講演者として、Curtis "Ovid" Poe氏 を発表しました。 私たちに参加して、開発者としての彼の経験から、そしておそらく宇宙旅行者とし…

SPVMロードマップ - OSサポート、64bit命令、多次元配列、C99数学関数

OSサポート SPVMの試験がたくさんのOSで通るようになってきた。Linuxに加えて、Windows, Mac OS X, Free BSDで試験が通っている。 多次元配列のサポートに苦労する これから2週間くらいは、型システムをもう一度見直す作業をする。SPVMの型は、intやStringな…

【イベント紹介】Hokkaido.pmの#14を開催します!

Hokkaido.pmの#14が開催されます。 hokkaidopm.connpass.comHokkaido.pmの#14を開催します! 一年ぶりの開催ですよー!開催概要 いつもの産業振興センタールーム9で開催します。ゲストスピーカー DeNA 執行役員 システム本部長 小林 篤様セッション内容 DeN…

5月25日(金) 19:30からの吉祥寺.pm14に参加します。

5月25日(金)の吉祥寺.pm14に参加します。 吉祥寺.pm14 - connpass吉祥寺.pm14帰ってきたよ、吉祥寺テーマ「エンジニアリングで解決したこと、しなかったこと」ストレートに技術で解決!という話から、エモい話、エンジニア以外の方(デザイナ、ディレクター…

【ブログ紹介】Perl Toolchain Summit 2018まとめレポート

Perl Toolchain Summit 2018 Wrap-up Report | i hack on things アクセス方法 今年はノルウェーのオスロで開催されたPerl Toolchain Summitに参加しました。私のスケジュールに矛盾があったため、私は当初は出席できないと思っていました。たくさんの心を行…

【ブログ紹介】Pull Request Challengeの後には何がありますか?

What after the Pull Request Challenge?CPAN-PRC土曜日2018年1月6日 今週私は、これがCPANプル・リクエスト・チャレンジ(PRC)の最終年度になると発表しました。何人かの人々が私がなぜ止まっているのかを尋ね、それを保つように提案しました。このポスト…