[#379166] question: threads behaviour — Raphael Bauduin <rblists@...>

Hi,

14 messages 2011/03/01

[#379190] exec using sh -c or directly running the command, depending on the system — Xavier No謖le <xavier.noelle@...>

Hello !

8 messages 2011/03/01

[#379261] How can i get the first letter of this string — duc nguyen <minhduct4@...>

Hello, i'm a newbie. I have a question that how can i get the first

10 messages 2011/03/03

[#379285] Extracting the shortest string from an array — Iñaki Baz Castillo <ibc@...>

Hi, given the following array:

12 messages 2011/03/03

[#379299] How to assign an element to a hash only if its value is not nil? — "Thomas W." <thomas@...>

hash = {}

13 messages 2011/03/03

[#379327] extconf.rb spitting out SH Makefile on windows? — Mr Eiland <mreiland1978@...>

Title says it all, I'm running ruby extconf.rb in a visual studio 2008

18 messages 2011/03/03
[#379883] Re: extconf.rb spitting out SH Makefile on windows? — Luis Lavena <luislavena@...> 2011/03/15

On Mar 15, 3:09=A0am, Mr Eiland <mreiland1...@yahoo.com> wrote:

[#379410] Ruby - Missed some core computer science world ? — Lucky Dev <lucky.developer@...>

I am doing ruby programming and been developing rails3 apps for some

16 messages 2011/03/06

[#379423] How to get class of BasicObject ancestor (Ruby 1.9.2)? — Alexey Petrushin <axyd80@...>

There's no :class method on BasicObject, is there any way to get class

9 messages 2011/03/06

[#379430] (ArgumentError) - in `initialize': wrong number of arguments (4 for 0) — Micah Wolfe <52w7te9ara@...>

Greetings all,

12 messages 2011/03/06

[#379469] basic programming question, help please — Kaye Ng <sbstn26@...>

class Square

17 messages 2011/03/07
[#379471] Re: basic programming question, help please — Mayank Kohaley <mayank.kohaley@...> 2011/03/07

The class method in Ruby is represented using self.<method name> or <class

[#379487] http post and authorization header for twitter — boo boo <s.w.timko@...>

I am trying to send an authorization header to the twitter api

16 messages 2011/03/07

[#379524] Duplicate methods removal in Ruby's TODO ? — David Unric <dunric29a@...>

Hi,

15 messages 2011/03/08

[#379597] Comparison between C++ and Ruby Variables — "Mayank K." <mayank.kohaley@...>

I have blogged about the comparison between c++ and ruby variables and

10 messages 2011/03/09

[#379686] What do you use with Ruby for GUI programming and why? — Robert <sigzero@...>

Is there a push to one toolkit or the other?

29 messages 2011/03/11
[#379713] Re: What do you use with Ruby for GUI programming and why? — Steve Klabnik <steve@...> 2011/03/11

I use Shoes. I'm biased; I'm one of the maintainers.

[#379715] Re: What do you use with Ruby for GUI programming and why? — Shadowfirebird <shadowfirebird@...> 2011/03/11

> I use Shoes. I'm biased; I'm one of the maintainers.

[#379755] send() with a block? — 7stud -- <bbxx789_05ss@...>

Why don't the ruby docs say that send() can take a block?

23 messages 2011/03/12
[#379756] Re: send() with a block? — "Sean O'Halpin" <sean.ohalpin@...> 2011/03/12

On Sat, Mar 12, 2011 at 8:45 PM, 7stud -- <bbxx789_05ss@yahoo.com> wrote:

[#379757] Re: send() with a block? — Peter Zotov <whitequark@...> 2011/03/12

On Sun, 13 Mar 2011 06:01:31 +0900, Sean O'Halpin wrote:

[#379845] Ruby jobs — Toby Gambill <toby.gambill@...>

All=20

25 messages 2011/03/14

[#379846] Understanding YAML and this practice in general — Fily Salas <fs_tigre@...>

Hi,

12 messages 2011/03/15

[#379889] SHA1 Decryption!! — Gormare Kalss <gormare@...>

Hello! I hope that no one will be offended by this question!! Ive been

12 messages 2011/03/15

[#379945] TCPSocket: how to realize that the other endpoint has closed the connection? — Iñaki Baz Castillo <ibc@...>

Hi, I open a TCP connection with a server:

10 messages 2011/03/16

[#379998] Inserting hash value slows down as table gets larger — Philip Rhoades <phil@...>

People,

11 messages 2011/03/17

[#380037] matching a word in any number of characters — Chad Perrin <code@...>

I have need of some code to match any of a number of words in any number

12 messages 2011/03/18

[#380074] Method Call from inside a file. — Tridib Bandopadhyay <tridib04@...>

I coded a new method within gc.c file defining as--

11 messages 2011/03/19

[#380085] A question about Ruby 1.9's "external encoding" — Albert Schlef <albertschlef@...>

I have the following program:

11 messages 2011/03/20

[#380116] The best practices to learn Ruby — Fily Salas <fs_tigre@...>

Hi,

22 messages 2011/03/20

[#380205] How could I make the Ruby 1.9 string ignore the invalid utf-8 byte sequence in split? — Stanley Xu <wenhao.xu@...>

Dear buddies,

8 messages 2011/03/22

[#380220] Ruby corrupts after a period of time — Chip Burke <cburke@...>

I have recently upgraded from Ruby 1.8.7 to 1.9.2p180 on Fedora. After a

19 messages 2011/03/22

[#380262] Converting PHP to Ruby — "Jack W." <jack.whitman403@...>

Hi all,

13 messages 2011/03/23

[#380306] shortcut for add unless nil ? — Iain Barnett <iainspeed@...>

Hi,

24 messages 2011/03/24
[#380308] Re: shortcut for add unless nil ? — Xavier Noria <fxn@...> 2011/03/24

You could do something like this (untested):

[#380339] Re: shortcut for add unless nil ? — Iain Barnett <iainspeed@...> 2011/03/25

[#380347] Re: shortcut for add unless nil ? — Robert Klemme <shortcutter@...> 2011/03/25

On Fri, Mar 25, 2011 at 7:02 AM, Iain Barnett <iainspeed@gmail.com> wrote:

[#380369] Re: shortcut for add unless nil ? — Colin Bartlett <colinb2r@...> 2011/03/25

On Fri, Mar 25, 2011 at 7:52 AM, Robert Klemme

[#380382] Re: shortcut for add unless nil ? — Iain Barnett <iainspeed@...> 2011/03/25

[#380385] Re: shortcut for add unless nil ? — Robert Klemme <shortcutter@...> 2011/03/25

On Fri, Mar 25, 2011 at 4:42 PM, Iain Barnett <iainspeed@gmail.com> wrote:

[#380389] Re: shortcut for add unless nil ? — Iain Barnett <iainspeed@...> 2011/03/25

[#380394] Re: shortcut for add unless nil ? — serialhex <serialhex@...> 2011/03/25

...personally i think it would be nice to be able to define new operators

[#380325] Regexp, matching only the content within parentheses — Emil Kampp <ekampp@...>

Hi.

12 messages 2011/03/24

[#380359] How to get the value of a singleton class? — Joey Zhou <yimutang@...>

Here is a sample code:

14 messages 2011/03/25
[#380360] Re: How to get the value of a singleton class? — Robert Dober <robert.dober@...> 2011/03/25

On Fri, Mar 25, 2011 at 1:23 PM, Joey Zhou <yimutang@gmail.com> wrote:

[#380361] Do I need to upgrade to the latest version of Ruby — Fily Salas <fs_tigre@...>

Hi,

10 messages 2011/03/25

[#380368] Dynamic classes — PsiPro <arjesins@...>

So I am working on some metaprograming and have some questions about

13 messages 2011/03/25

[#380401] How to "find" new lines — Damir Sigur <damir@...>

I am new to ruby, and was trying to make a small code which would check

12 messages 2011/03/25

[#380520] A two-minute Ruby flavoured survey to help shape a new service. — "Mic P." <micpringle@...>

Please take a few seconds to fill out the following survey ...

12 messages 2011/03/28
[#380528] Re: A two-minute Ruby flavoured survey to help shape a new service. — Chad Perrin <code@...> 2011/03/28

On Tue, Mar 29, 2011 at 03:46:17AM +0900, Mic P. wrote:

[#380558] Why can a floating point number be used as an array index? — Jeff Dik <s450r1@...>

Why can a floating point number be used as an array index? Anybody

11 messages 2011/03/29

[#380573] Encoding issues when parsing HTML in 1.9 — ctdev <ctdev421@...>

Hi, I'm having some encoding problems while parsing HTML with Nokogiri

12 messages 2011/03/30

[#380586] functional paradigm taking over — Robert Klemme <shortcutter@...>

Hi,

133 messages 2011/03/30
[#380593] Lambda Shambda — Mike Stephens <rubfor@...> 2011/03/30

Although a Ruby fan, I must say I'm spending all my time looking at

[#380612] Re: Lambda Shambda — Chad Perrin <code@...> 2011/03/30

On Wed, Mar 30, 2011 at 06:38:19PM +0900, Mike Stephens wrote:

[#380617] Re: Lambda Shambda — Robert Klemme <shortcutter@...> 2011/03/30

On Wed, Mar 30, 2011 at 4:49 PM, Chad Perrin <code@apotheon.net> wrote:

[#380641] Re: Lambda Shambda — Chad Perrin <code@...> 2011/03/30

On Thu, Mar 31, 2011 at 12:19:25AM +0900, Robert Klemme wrote:

[#380664] Re: Lambda Shambda — Phillip Gawlowski <cmdjackryan@...> 2011/03/31

On Thu, Mar 31, 2011 at 1:24 AM, Chad Perrin <code@apotheon.net> wrote:

[#380669] Re: Lambda Shambda — Chad Perrin <code@...> 2011/03/31

On Thu, Mar 31, 2011 at 12:30:07PM +0900, Phillip Gawlowski wrote:

[#380683] Re: Lambda Shambda — Mike Stephens <rubfor@...> 2011/03/31

Chad Perrin wrote in post #990130:

[#380812] Re: Lambda Shambda — Josh Cheek <josh.cheek@...> 2011/04/02

On Thu, Mar 31, 2011 at 5:08 AM, Mike Stephens <rubfor@recitel.net> wrote:

[#380825] Re: Lambda Shambda — Mike Stephens <rubfor@...> 2011/04/03

Josh Cheek wrote in post #990579:

[#380831] Re: Lambda Shambda — Phillip Gawlowski <cmdjackryan@...> 2011/04/03

On Sun, Apr 3, 2011 at 7:29 AM, Mike Stephens <rubfor@recitel.net> wrote:

[#380839] Re: Lambda Shambda — Everett L Williams II <rett@...> 2011/04/03

*Let's not pay too much attention to the code snobs on here. I've yet to

[#380840] Re: Lambda Shambda — Phillip Gawlowski <cmdjackryan@...> 2011/04/03

On Sun, Apr 3, 2011 at 2:17 PM, Everett L Williams II

[#380893] Re: functional paradigm taking over — Mike Stephens <rubfor@...> 2011/04/04

This thread has been touching upon three issues - functional languages

[#380907] Re: functional paradigm taking over — Everett L Williams II <rett@...> 2011/04/04

*Mike,*

[#380910] Re: functional paradigm taking over — Johnny Morrice <spoon@...> 2011/04/04

> But, as I have said, I have seen some absolutely

[#380913] Re: functional paradigm taking over — Johnny Morrice <spoon@...> 2011/04/04

> I've seen some absolutely amazing things done with befunge! Networked

[#380925] Re: functional paradigm taking over — Chad Perrin <code@...> 2011/04/04

On Mon, Apr 04, 2011 at 09:29:13PM +0900, Johnny Morrice wrote:

[#380926] Re: functional paradigm taking over — Johnny Morrice <spoon@...> 2011/04/04

> I have not seen "befunge" as a euphemism for brainfuck before. Is

[#380933] Re: functional paradigm taking over — Chad Perrin <code@...> 2011/04/04

On Tue, Apr 05, 2011 at 12:42:20AM +0900, Johnny Morrice wrote:

[#381261] Re: functional paradigm taking over — Robert Dober <robert.dober@...> 2011/04/10

On Mon, Apr 4, 2011 at 8:07 PM, Chad Perrin <code@apotheon.net> wrote:

[#381324] Re: functional paradigm taking over — Kevin <darkintent@...> 2011/04/12

Aren't all programs languages as the program describes a particular problem

[#381330] Re: functional paradigm taking over — Phillip Gawlowski <cmdjackryan@...> 2011/04/12

On Tue, Apr 12, 2011 at 8:18 AM, Kevin <darkintent@gmail.com> wrote:

[#381331] Re: functional paradigm taking over — Kevin <darkintent@...> 2011/04/12

No I'm not confusing them, all programs provide the vocabulary (Means of

[#381356] Re: functional paradigm taking over — Chad Perrin <code@...> 2011/04/12

On Tue, Apr 12, 2011 at 04:47:17PM +0900, Kevin wrote:

[#381400] Re: functional paradigm taking over — Kevin <darkintent@...> 2011/04/13

Why don't you actually go take a look at the definition of language,

[#381401] Re: functional paradigm taking over — Josh Cheek <josh.cheek@...> 2011/04/13

On Wed, Apr 13, 2011 at 12:53 AM, Kevin <darkintent@gmail.com> wrote:

[#381403] Re: functional paradigm taking over — Kevin <darkintent@...> 2011/04/13

That is all well and good. But does that fact make the definitions I am

[#381408] Re: functional paradigm taking over — Phillip Gawlowski <cmdjackryan@...> 2011/04/13

On Wed, Apr 13, 2011 at 8:38 AM, Kevin <darkintent@gmail.com> wrote:

[#380623] string/array slices — Patrick Tyler <patrick.a.tyler@...>

Hello,

15 messages 2011/03/30

[#380689] how to refine the code to avoid using fork on windows? — Ethan Huo <firewall888@...>

here is the thing, i need to move a previous ruby program from Linux to

9 messages 2011/03/31

[#380710] Simple array.each do |x| question — "Kyle X." <haebooty@...>

Hello, I am new to ruby and cannot understand why this code is not

18 messages 2011/03/31
[#380711] Re: Simple array.each do |x| question — Roger Braun <roger@...> 2011/03/31

Hi

[ANN] posix-spawn 0.3.0 -- first public release (codename, "tigers blood")

From: Ryan Tomayko <rtomayko@...>
Date: 2011-03-05 03:49:31 UTC
List: ruby-talk #379378
<https://github.com/rtomayko/posix-spawn>
$ gem install posix-spawn

tmm1 and I are pleased to announce the initial release of posix-spawn,
a small extension library that implements a subset of Ruby 1.9's new
Process::spawn [1] in a way that takes advantage of fast process
spawning (IEEE Std 1003.1 posix_spawn(2) systems interfaces [2]) where
available and runs on all MRI Rubys >= 1.8.7.

 - Fast, constant time process spawning across a variety of platforms
 - A largish compatible subset of Ruby 1.9's Process::spawn interface
   as well as 1.9 enhancements to Kernel#system, Kernel#`, etc. under
   Ruby >= 1.8.7.
 - High level and hopefully portable POSIX::Spawn::Child class for
   quick and dirty (but correct!) non-streaming IPC scenarios.

See the README for usage and graphs of benchmark results on Linux and
Darwin, or run them yourself:

    $ uname -a
    Linux aux1 2.6.26-2-xen-amd64 #1 SMP Thu Aug 20 2009 x86_64 GNU/Linux
    $ ruby --version
    ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
    $ gem install posix-spawn
    $ posix-spawn-benchmark
    benchmarking fork/exec vs. posix_spawn over 1000 runs at 100M res
                                 user     system      total        real
    fspawn (fork/exec):     0.080000  14.920000  38.040000 ( 39.029493)
    pspawn (posix_spawn):   0.040000   0.010000   0.560000 (  0.939422)

Work on the library started when tmm1 found, through the use of his
brilliant rbtrace [3] program, a number of slow points in the GitHub
codebase where fork/exec is used heavily to spawn processes. In some
cases, a single fork() system call was using >30ms while in others
using only ~1ms. Our testsuite fork()'d especially slowly. Hmmm.

On Linux, fork(2) slows down as the parent process uses more memory
due to the need to copy page tables for COW. In many common uses of
fork(), where it is followed by one of the exec family of functions to
spawn child processes (Kernel#system, IO::popen, Process::spawn,
etc.), this overhead can be removed by using posix_spawn() or vfork()
instead.

After implementing a simple fast process spawner extension using
posix_spawn() and gaining some familiarity with the posix_spawn family
of C functions, we noticed that it could potentially be used to
implement a large subset of features provided by Ruby 1.9's
Process::spawn.

We love Process::spawn.

We love Process::spawn so much in fact that over the past few months,
even before surfacing any of the issues with Linux fork() slowness, an
effort had been underway at GitHub to move two key libraries (Grit,
the Ruby interface to Git, and Albino, a Ruby wrapper around the
excellent Pygments syntax highlighter) to use Process::spawn
compatible method invocations (implemented with fork/exec under
Ruby 1.8.7) so that we could take advantage of Process::spawn under
Ruby 1.9.

Once we had a basic Process::spawn interface implemented on top of
posix_spawn(), we were able to take some higher level utility classes
from this work on the Grit and Albino projects and include them in
posix-spawn as a nice POSIX::Spawn::Child class. It is:

 - Simple, requiring little code for simple stream input and capture
 - Internally non-blocking (uses select(2)), so it handles all pipe
   hang cases due to exceeding PIPE_BUF limits on one or more streams
 - Potentially portable, due to the abstraction over lower-level
   process and stream management APIs

We hope to now remove large bodies of Ruby 1.8.7 spawn emulation code
and replace it with posix-spawn.

As the project continued to take shape, we noticed how much more
feature-rich the Kernel#system, IO.popen, etc. methods were in Ruby
1.9. Having been built on the foundation of the new Process::spawn,
they allow for setting up the child's environment, redirecting
arbitrary fds, and all the other great stuff in Process::spawn. We
were able to write Ruby 1.8.7 compatible subset implementations of
those as well and put them under the POSIX::Spawn module.

Now, about that subset. As of this initial release, we were able to
implement the following arguments and options to spawn:

> spawn([env,] command... [,options]) => pid
>
> env: hash
>   name => val : set the environment variable
>   name => nil : unset the environment variable
> command...:
>   command                     : /bin/sh -c 'command'
>   cmdname, arg1, ...          : exec argv (no shell)
>   [cmdname, argv0], arg1, ... : exec argv (no shell)
> options: hash
>   clearing environment variables:
>     :unsetenv_others => true   : clear environment vars not in env
>     :unsetenv_others => false  : don't clear (default)
>   redirection:
>     key:
>       FD              : single fd in child process
>       [FD, FD, ...]   : multiple fd in child process
>     value:
>       FD                        : redirect to fd in parent process
>       :close                    : close the fd in child process
>       string                    : redir w/ open(string, "r" or "w")
>       [string]                  : redir w/ open(string, File::RDONLY)
>       [string, open_mode]       : redir w/ open(string, open_mode, 0644)
>       [string, open_mode, perm] : redir w/ open(string, open_mode, perm)
>     FD is one of follows
>       :in     : the fd 0 which is the standard input
>       :out    : the fd 1 which is the standard output
>       :err    : the fd 2 which is the standard error
>       integer : the fd of specified the integer
>       io      : the fd specified as io.fileno
>   current directory:
>     :chdir => str

We have NOT yet implemented these options:

> options: hash
>   process group:
>     :pgroup => true or 0 : make a new process group
>     :pgroup => pgid      : join to specified process group
>     :pgroup => nil       : don't change the process group (default)
>   resource limit: resourcename is core, cpu, data, etc.
>     :rlimit_resourcename => limit
>     :rlimit_resourcename => [cur_limit, max_limit]
>   umask:
>     :umask => int
>   redirection:
>     value:
>       [:child, FD]              : redirect to the redirected fd
>   file descriptor inheritance: close non-redir non-standard fds > 3
>     :close_others => false : inherit fds (default for system and exec)
>     :close_others => true  : no inherit (default for spawn and popen)

We have ideas for some of these (:pgroup, :umask, [:child, FD]) and
may implement them in future releases; others, like :rlimit, are not
supported by posix_spawn() and have no clear implementations strategy
outside of falling back to fork/exec when detected.

[0] https://github.com/rtomayko/posix-spawn
[1] http://www.ruby-doc.org/core-1.9/classes/Process.html#M002230
[2] http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_spawn.html
[3] https://github.com/tmm1/rbtrace

Ryan Tomayko
Aman Gupta

In This Thread

Prev Next