Code Archive Skip to content Google About Google Privacy Terms
XSでメモリリークを避ける基本原則は、それほど難しくない。すなわち、作ったSV(およびSVファミリ)はすぐsv_2mortal()するのである。mortalなSVはスコープ*1から抜けるときに解放されるため、メモリリークは起こらない。つまり、あるスコープ内で新しく作ったすべてのSVをmortalな状態にしておくということだ。 この原則のもとでコードを書くと、誤ってリファレンスカウントを増やさなかったケースでは警告が頻繁に起きる。しかし、少なくともメモリリークは起こらない*2。メモリリークの検出は難しいので、警告が出るのは福音であろう。 もちろんこれは原則で、メモリリークにまつわることで覚えなければならないことは決して少なくない。 たとえば、XSUBの戻り値をSV*にするとき、sv_2mortal(RETVAL)してはいけない。これはPerlの仕様ではなくxsubppが勝手にsv_2mort
B::Foreach::Iteratorというモジュールを書いた*1。 use B::Foreach::Iterator 0.02; foreach my $key(foo => 10, bar => 20, baz => 30){ printf "%s => %s\n", $key => iter->next; } iter->next()*2はforeachループのイテレータをひとつ進め、その値を返す。 また、iter->peek()はイテレータを進めることなく、次のイテレータを返す。 このモジュールを実装するにあたってpp_hot.cのpp_iter()を読んだのだが、確かにforeach ($min .. $max)は内部で配列を生成していない。また、foreach (reverse ...)についても最適化が行われており、reverse()した一時配列を作るのではなく、イテレータ
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
id:tokuhirom さんが http://d.hatena.ne.jp/tokuhirom/20081209/1228829454 で下地をつくってくださったので(perl-users.jp むけまとめも期待してます),ちょっとアドバンスドな話題を。 例題 http://www.sra.co.jp/people/m-kasahr/eb/ http://www.sra.co.jp/people/m-kasahr/eb/ の Perl binding を開発するとしましょう。 http://www.sra.co.jp/people/m-kasahr/eb/ の使い方は,たとえば次のような感じです。 EB_Book *book_pointer; book_pointer = (EB_Book *) malloc(sizeof(EB_Book)); eb_initialize_book(bo
参考にしたサイト集 perlxs - perldoc.perl.org perlxstut - perldoc.perl.org perlguts - perldoc.perl.org perlapi - perldoc.perl.org http://d.hatena.ne.jp/tokuhirom/20081209/1228829454 Perl XS メモ - typemap と MAGIC をからめて - daily dayflower http://pub.ne.jp/wakapon/?entry_id=1109553 http://pub.ne.jp/wakapon/?entry_id=1109664 準備 $ h2xs -A -n MyXSS Makefile.PL CC => 'g++', 型 SV スカラー AV 配列 HV ハッシュ CV コード GV グロブ RV リ
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
DynaLoader.pmとXSLoader.pmまわりのお話.動作の仕方や,両者の違いなどを見ていく.参考にしたのはperl5.10.0のソースツリー. 1. XSUBとnewXS DynaLoaderの本質はXSUBなので,まずはそのあたりから見ていく.XSUBを使ったモジュール(=Pure-Perlじゃないモジュール)を作成するときには,DynaLoader.pmやXSLoader.pmを使う.例えばthreads.pmの場合,冒頭に以下のような記述がある. # Load the XS code require XSLoader; XSLoader::load('threads', $XS_VERSION); これでXSUB(単にCのサブルーチン; XSコード)をPerl処理系に組込んだことになる.この「組込む」という工程には,newXSが使われる.例えばthreads->creat
Module::Setup でらくらくモジュール作成 - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? こんにちわ!こんにちわ!acotie hackathon の懇談会来てるのに一人寂しくビール飲んでる Yappo です。 皆様お元気ですか?僕は寂しいです。 さて今日は今さっき shipit したての Module::Setup について紹介しましょう。 what is Module::Setup? Module:Setup とは miyagawa さん作の pmsetup を CPANize した物です。 で、 pmsetup は何かというと Module::Starter などのモジュール開発を始める上の雛形を便利な感じで作ってくれる物です。 まぁ pmsetup でも良かったんですが、みんな好き
perlxs入門その3でc++なクラスでxsを作る方法を試してみたけど、もうちょっときれいな形にしたい。 普通だとクラスの定義だけしてるファイル、クラスのメソッドを実際に定義したファイル、実行するファイルとわけるらしいので、xsでもそんな感じにしてみる。 というわけで整理すると man.h#ifndef INC_MAN // for INC_MAN include guard #define INC_MAN // #include <iostream> using namespace std; class Man { private: string name; int age; public: Man(string name, int age); virtual ~Man(); int get_age(); string get_name(); void set_age(int age);
The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending. /* -*- c -*- */ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include <libxml/xmlreader.h> #include <stdlib.h> #include <ctype.h> #include <string.h> /* このモジュールの至る所で sv_2mortal している理由は、エラー処理を * croak に任せている為。定命でなければエラー時にメモリリークが
名前¶ perlapio - perl の入出力抽象インターフェース 概要¶ PerlIO *PerlIO_stdin(void); PerlIO *PerlIO_stdout(void); PerlIO *PerlIO_stderr(void); PerlIO *PerlIO_open(const char *,const char *); int PerlIO_close(PerlIO *); int PerlIO_stdoutf(const char *,...) int PerlIO_puts(PerlIO *,const char *); int PerlIO_putc(PerlIO *,int); int PerlIO_write(PerlIO *,const void *,size_t); int PerlIO_printf(PerlIO *, const char *,..
-*- buffer-read-only: t -*- !!!!!!! DO NOT EDIT THIS FILE !!!!!!! This file is built by autodoc.pl extracting documentation from the C source files. 名前¶ This file contains the documentation of the perl public API generated by embed.pl, specifically a listing of functions, macros, flags, and variables that may be used by extension writers. The interfaces of any functions that are not listed here ar
前置き こんにちは,gfxです。好きなソースはタルタルソースとsv.cです。JPerl Advent Calendar 2009 Hacker Trackも8日目ですね。そろそろTipsを読むだけでは飽き足らず,モジュールを書きたくなってきたんじゃないでしょうか。そんなわけで,今日はModule::Install::XSUtilを紹介します。 本題 皆さんの中にはよくXSを書く方もいらっしゃると思いますが,XSモジュールを含むディストリビューションはビルド環境の設定が結構大変ですよね。build_requiresにExtUtils::ParseXSやXSLoaderを指定したり,make_maker_argsにOBJECT => '$(O_FILES)'を指定したりする必要がありますし,Cコンパイラは使えるか,Cコンパイラの警告を有効にしたい,ppport.hは十分に新しいか,などなど考え
元ネタ:Perl基礎文法最速マスター(id:perlcodesample) XSを始めるための手順といくつかの要素の解説です。C言語をある程度知っている人でも,これを読んだだけでXSの基礎をマスターしてXSを書くことができるようにはなっていません。リファレンスでもありません。 XSとは,狭義ではPerlでエクステンションを書くためのマクロ言語の名前ですが,広義ではエクステンションを書くための技術の総称です。ここでは,広義のXSを俯瞰します。 XSはいろいろと特殊なのでテンプレは無視で行きます。 目次: h2xsで空のディストリビューションを作る XSファイルの構成 スレッドコンテキスト SVファミリ GCとスコープ さらなる学習のために h2xsで空のディストリビューションを作る 以下のコマンドで空のXSディストリビューションを作ることができます。 h2xs -A -b 5.8.1 -n
Provided by: manpages-ja-dev_0.5.0.0.20071115-1_all 前 statfs, fstatfs - ファイル・システムの統計を得る 式 #include <sys/vfs.h> /* または <sys/statfs.h> */ int statfs(const char *path, struct statfs *buf); int fstatfs(int fd, struct statfs *buf); 式 関数 statfs() はマウントされたファイル・システムについての情報を返す。 path はマウントされたファイル・システムにあるファイルのパス名である。 buf は statfs 構造体へのポインターで、およそ以下のように定義される: struct statfs { long f_type; /* ファイルシステムの型 (下技仮) */
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く