perl/perl-Coro: Added (the only real threads in perl).

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
Sergei Fedosoff 2019-04-12 21:54:16 +07:00 committed by Willy Sudiarto Raharjo
parent f32d856233
commit 67f5f857da
4 changed files with 158 additions and 0 deletions

32
perl/perl-Coro/README Normal file
View file

@ -0,0 +1,32 @@
This module collection manages continuations in general, most often in
the form of cooperative threads (also called coros, or simply "coro" in
the documentation). They are similar to kernel threads but don't (in
general) run in parallel at the same time even on SMP machines. The
specific flavor of thread offered by this module also guarantees you
that it will not switch between threads unless necessary, at
easily-identified points in your program, so locking and parallel access
are rarely an issue, making thread programming much safer and easier than
using other thread models.
Unlike the so-called "Perl threads" (which are not actually real threads
but only the windows process emulation (see section of same name for more
details) ported to UNIX, and as such act as processes), Coro provides a
full shared address space, which makes communication between threads very
easy. And coro threads are fast, too: disabling the Windows process
emulation code in your perl and using Coro can easily result in a two to
four times speed increase for your programs. A parallel matrix
multiplication benchmark (very communication-intensive) runs over 300
times faster on a single core than perls pseudo-threads on a quad core
using all four cores.
Coro achieves that by supporting multiple running interpreters that share
data, which is especially useful to code pseudo-parallel processes and for
event-based programming, such as multiple HTTP-GET requests running
concurrently. See Coro::AnyEvent to learn more on how to integrate Coro
into an event-based environment.
In this module, a thread is defined as "callchain + lexical variables +
some package variables + C stack), that is, a thread has its own
callchain, its own set of lexicals and its own set of perls most
important global variables (see Coro::State for more configuration and
background info).

View file

@ -0,0 +1,97 @@
#!/bin/sh
# Slackware build script for perl-Coro
# Copyright 2019 Sergei Fedosoff
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=perl-Coro
VERSION=${VERSION:-6.54}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
SRCNAM="$(printf $PRGNAM | cut -d- -f2-)"
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $SRCNAM-$VERSION
tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
cd $SRCNAM-$VERSION
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
PERL_CANARY_STABILITY_NOPROMPT=1 \
PERL_MM_USE_DEFAULT=1 \
perl Makefile.PL \
PREFIX=/usr \
INSTALLDIRS=vendor \
INSTALLVENDORMAN1DIR=/usr/man/man1 \
INSTALLVENDORMAN3DIR=/usr/man/man3
make
make test
make install DESTDIR=$PKG
find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true
find $PKG -depth -type d -empty -delete || true
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a Changes COPYING README $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

View file

@ -0,0 +1,10 @@
PRGNAM="perl-Coro"
VERSION="6.54"
HOMEPAGE="https://metacpan.org/pod/Coro"
DOWNLOAD="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/Coro-6.54.tar.gz"
MD5SUM="aaf5ca766a7323feaab7c9aea77e6ea8"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="perl-EV perl-AnyEvent perl-common-sense perl-Guard perl-event"
MAINTAINER="Sergei Fedosoff"
EMAIL="eleksir@gmail.com"

19
perl/perl-Coro/slack-desc Normal file
View file

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
perl-Coro: perl-Coro (the only real threads in perl)
perl-Coro:
perl-Coro: Coro provides a full shared address space, which makes communication
perl-Coro: between threads very easy. And coro threads are fast, too: disabling
perl-Coro: the Windows process emulation code in your perl and using Coro can
perl-Coro: easily result in a two to four times speed increase for your
perl-Coro: programs. A parallel matrix multiplication benchmark (very
perl-Coro: communication-intensive) runs over 300 times faster on a single core
perl-Coro: than perls pseudo-threads on a quad core using all four cores.
perl-Coro:
perl-Coro: Homepage: https://metacpan.org/pod/Coro