[#104169] [Ruby master Feature#17938] Keyword alternative for boolean positional arguments — matheusrichardt@...

Issue #17938 has been reported by matheusrich (Matheus Richard).

12 messages 2021/06/04

[#104213] [Ruby master Feature#17942] Add a `initialize(public @a, private @b)` shortcut syntax for defining public/private accessors for instance vars — tyler@...

SXNzdWUgIzE3OTQyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IFR5bGVyUmljayAoVHlsZXIgUmljayku

6 messages 2021/06/09

[#104288] [Ruby master Bug#17992] Upstreaming the htmlentities gem into CGI#.(un)escape_html — alexandermomchilov@...

Issue #17992 has been reported by AMomchilov (Alexander Momchilov).

9 messages 2021/06/15

[#104338] [Ruby master Misc#17997] DevelopersMeeting20210715Japan — mame@...

Issue #17997 has been reported by mame (Yusuke Endoh).

10 messages 2021/06/17

[#104361] [Ruby master Bug#18000] have_library doesn't work when ruby is compiled with --disable-shared --disable-install-static-library — jean.boussier@...

Issue #18000 has been reported by byroot (Jean Boussier).

9 messages 2021/06/18

[#104381] [Ruby master Feature#18004] Add Async to the stdlib — shannonskipper@...

Issue #18004 has been reported by shan (Shannon Skipper).

9 messages 2021/06/22

[#104401] [Ruby master Feature#18007] Help developers of C extensions meet requirements in "doc/extension.rdoc" — mike.dalessio@...

Issue #18007 has been reported by mdalessio (Mike Dalessio).

16 messages 2021/06/25

[#104430] [Ruby master Bug#18011] `Method#parameters` is incorrect for forwarded arguments — josh.cheek@...

Issue #18011 has been reported by josh.cheek (Josh Cheek).

12 messages 2021/06/29

[ruby-core:104264] [Ruby master Bug#17986] Ractor is stdlib Socket unfriendly

From: merch-redmine@...
Date: 2021-06-15 04:13:18 UTC
List: ruby-core #104264
Issue #17986 has been updated by jeremyevans0 (Jeremy Evans).


The code you are showing (`make_shareable` with a socket) is broken because in order to be shareable, an object must be immutable, and a socket cannot really be immutable and usable.

You can work around it using `for_fd` (this should show that both ractors are processing the socket):

```ruby
require 'socket'

Thread.new do
  client = TCPServer.new(9100).accept
  10.times do |i|
    sleep 1
    client.write i.to_s
  end
end
sleep 1

socket = TCPSocket.open('localhost', 9100)

sock_ractor = lambda do |i, socket|
  Ractor.new(i, socket.to_i) do |i,  fd|
    sock = TCPSocket.for_fd(fd)
    while socks = IO.select([sock]).first
      socks.each do |s|
        $stderr.syswrite("#{i}:#{s.read(1)}\n")
      end
    end
  end
end

r1 = sock_ractor[1, socket]
r2 = sock_ractor[2, socket]

sleep 11
```

I don't think the behavior you are showing is a bug, so I think this should be closed.  However, I'll wait for a while and see if another core team member feels differently.

----------------------------------------
Bug #17986: Ractor is stdlib Socket unfriendly
https://bugs.ruby-lang.org/issues/17986#change-92474

* Author: kvokka (Mike Beliakov)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin19]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
**Description**

In the process of playing with Ractors was found, that there is no way to use stdlib Sockets.

My intent was to implement bidirectional connection with Socket using Ractors.

This small console snippet is self explanatory:

```ruby
[1] pry(main)> s=Ractor.make_shareable(TCPSocket.open('localhost', 9100))
=> #<TCPSocket:fd 14, AF_INET6, ::1, 52292>
[2] pry(main)> s.print 'foo'
FrozenError: can't modify frozen TCPSocket: #<TCPSocket:fd 14, AF_INET6, ::1, 52292>
from (pry):5:in `write'
[3] pry(main)> s=Ractor.make_shareable(TCPSocket.open('localhost', 9100), copy: true)
=> #<TCPSocket:fd 16, AF_INET6, ::1, 52295>
[4] pry(main)> s.print 'foo'
FrozenError: can't modify frozen TCPSocket: #<TCPSocket:fd 16, AF_INET6, ::1, 52295>
```

The only option is to `move` socket in Ractor, but in this case there is no way to share
the socket between 2 Ractors, so I can not put a listener loop on the socket.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread