The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Coro::MakeMaker - MakeMaker glue for the C-level Coro API

SYNOPSIS

This allows you to control coroutines from C level.

DESCRIPTION

For optimal performance, hook into Coro at the C-level. You'll need to make changes to your Makefile.PL and add code to your xs / c file(s).

WARNING

When you hook in at the C-level you get a huge performance gain, but you also reduce the chances that your code will work unmodified with newer versions of perl or Coro. This may or may not be a problem. Just be aware, and set your expectations accordingly.

HOW TO

Makefile.PL

  use Coro::MakeMaker qw(coro_args);

  # ... set up %args ...

  WriteMakefile(coro_args(%args));

XS

  #include "CoroAPI.h"

  BOOT:
    I_CORO_API("YourModule");

API

 /* perl-related */
 #define TRANSFER_SAVE_DEFAV      /* save @_ */
 #define TRANSFER_SAVE_DEFSV      /* save $_ */
 #define TRANSFER_SAVE_ERRSV      /* save $@ */
 /* c-related */
 #define TRANSFER_SAVE_CCTXT      /* save C context (stack) */
 #define TRANSFER_LAZY_STACK      /* try to allocate stacks lazily */

 #define TRANSFER_SAVE_ALL        (TRANSFER_SAVE_DEFAV | TRANSFER_SAVE_DEFSV \
                                   | TRANSFER_SAVE_ERRSV | TRANSFER_SAVE_CCTXT)

 #define CORO_TRANSFER(prev,next,flags) /* transfer from prev to next */
 #define CORO_SCHEDULE            /* like Coro::schedule */
 #define CORO_CEDE                /* like Coro::cede */
 #define CORO_READY(coro)         /* like $coro->ready */
 #define CORO_NREADY              /* # of procs in runqueue */
 #define CORO_CURRENT             /* returns $Coro::current */