From 67f5f857da5ff0c6068c05b9af4052ca76815544 Mon Sep 17 00:00:00 2001 From: Sergei Fedosoff Date: Fri, 12 Apr 2019 21:54:16 +0700 Subject: perl/perl-Coro: Added (the only real threads in perl). Signed-off-by: Willy Sudiarto Raharjo --- perl/perl-Coro/README | 32 ++++++++++++ perl/perl-Coro/perl-Coro.SlackBuild | 97 +++++++++++++++++++++++++++++++++++++ perl/perl-Coro/perl-Coro.info | 10 ++++ perl/perl-Coro/slack-desc | 19 ++++++++ 4 files changed, 158 insertions(+) create mode 100644 perl/perl-Coro/README create mode 100644 perl/perl-Coro/perl-Coro.SlackBuild create mode 100644 perl/perl-Coro/perl-Coro.info create mode 100644 perl/perl-Coro/slack-desc diff --git a/perl/perl-Coro/README b/perl/perl-Coro/README new file mode 100644 index 0000000000..829b494763 --- /dev/null +++ b/perl/perl-Coro/README @@ -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). diff --git a/perl/perl-Coro/perl-Coro.SlackBuild b/perl/perl-Coro/perl-Coro.SlackBuild new file mode 100644 index 0000000000..f514741909 --- /dev/null +++ b/perl/perl-Coro/perl-Coro.SlackBuild @@ -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} diff --git a/perl/perl-Coro/perl-Coro.info b/perl/perl-Coro/perl-Coro.info new file mode 100644 index 0000000000..95fd559863 --- /dev/null +++ b/perl/perl-Coro/perl-Coro.info @@ -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" diff --git a/perl/perl-Coro/slack-desc b/perl/perl-Coro/slack-desc new file mode 100644 index 0000000000..2903ad057f --- /dev/null +++ b/perl/perl-Coro/slack-desc @@ -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 -- cgit v1.2.3-80-g2a13