[前][次][番号順一覧][スレッド一覧]

ruby-changes:69677

From: Samuel <ko1@a...>
Date: Wed, 10 Nov 2021 15:21:23 +0900 (JST)
Subject: [ruby-changes:69677] 81d0ce7e97 (master): Mark IO::Buffer as experimental.

https://git.ruby-lang.org/ruby.git/commit/?id=81d0ce7e97

From 81d0ce7e97af74a2086e143f9e349ee519bd1c4d Mon Sep 17 00:00:00 2001
From: Samuel Williams <samuel.williams@o...>
Date: Wed, 10 Nov 2021 15:42:57 +1300
Subject: Mark IO::Buffer as experimental.

---
 common.mk                    |  1 +
 doc/fiber.md                 |  2 ++
 include/ruby/io/buffer.h     |  3 +++
 io_buffer.c                  | 18 ++++++++++++++++++
 test/fiber/test_scheduler.rb |  1 +
 tool/test/runner.rb          |  2 ++
 6 files changed, 27 insertions(+)

diff --git a/common.mk b/common.mk
index 97a9c34b81b..8a916315ff7 100644
--- a/common.mk
+++ b/common.mk
@@ -6993,6 +6993,7 @@ io.$(OBJEXT): {$(VPATH)}vm_opts.h https://github.com/ruby/ruby/blob/trunk/common.mk#L6993
 io_buffer.$(OBJEXT): $(hdrdir)/ruby/ruby.h
 io_buffer.$(OBJEXT): $(top_srcdir)/internal/bits.h
 io_buffer.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/error.h
 io_buffer.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
 io_buffer.$(OBJEXT): $(top_srcdir)/internal/string.h
 io_buffer.$(OBJEXT): {$(VPATH)}assert.h
diff --git a/doc/fiber.md b/doc/fiber.md
index f0785d8ae61..a334faf7396 100644
--- a/doc/fiber.md
+++ b/doc/fiber.md
@@ -83,6 +83,7 @@ class Scheduler https://github.com/ruby/ruby/blob/trunk/doc/fiber.md#L83
   end
 
   # Read from the given io into the specified buffer.
+  # WARNING: Experimental hook! Do not use in production code!
   # @parameter io [IO] The io to read from.
   # @parameter buffer [IO::Buffer] The buffer to read into.
   # @parameter length [Integer] The minimum amount to read.
@@ -90,6 +91,7 @@ class Scheduler https://github.com/ruby/ruby/blob/trunk/doc/fiber.md#L91
   end
 
   # Write from the given buffer into the specified IO.
+  # WARNING: Experimental hook! Do not use in production code!
   # @parameter io [IO] The io to write to.
   # @parameter buffer [IO::Buffer] The buffer to write from.
   # @parameter length [Integer] The minimum amount to write.
diff --git a/include/ruby/io/buffer.h b/include/ruby/io/buffer.h
index 073215186cb..053e7e17f97 100644
--- a/include/ruby/io/buffer.h
+++ b/include/ruby/io/buffer.h
@@ -16,6 +16,9 @@ https://github.com/ruby/ruby/blob/trunk/include/ruby/io/buffer.h#L16
 
 RUBY_SYMBOL_EXPORT_BEGIN
 
+// WARNING: This entire interface is experimental and may change in the future!
+#define RB_IO_BUFFER_EXPERIMENTAL 1
+
 RUBY_EXTERN VALUE rb_cIOBuffer;
 RUBY_EXTERN size_t RUBY_IO_BUFFER_PAGE_SIZE;
 
diff --git a/io_buffer.c b/io_buffer.c
index 3455713f8df..521d9d8ea95 100644
--- a/io_buffer.c
+++ b/io_buffer.c
@@ -11,6 +11,7 @@ https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L11
 
 #include "internal/string.h"
 #include "internal/bits.h"
+#include "internal/error.h"
 
 VALUE rb_cIOBuffer;
 size_t RUBY_IO_BUFFER_PAGE_SIZE;
@@ -121,8 +122,25 @@ static inline void io_buffer_unmap(void* base, size_t size) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L122
 #endif
 }
 
+static void io_buffer_experimental(void)
+{
+    static int warned = 0;
+
+    if (warned) return;
+
+    warned = 1;
+
+    if (rb_warning_category_enabled_p(RB_WARN_CATEGORY_EXPERIMENTAL)) {
+        rb_category_warn(RB_WARN_CATEGORY_EXPERIMENTAL,
+          "IO::Buffer is experimental and both the Ruby and C interface may change in the future!"
+        );
+    }
+}
+
 static void io_buffer_initialize(struct rb_io_buffer *data, void *base, size_t size, enum rb_io_buffer_flags flags, VALUE source)
 {
+    io_buffer_experimental();
+
     data->flags = flags;
     data->size = size;
 
diff --git a/test/fiber/test_scheduler.rb b/test/fiber/test_scheduler.rb
index f0f5b79f36f..1870ab1c33e 100644
--- a/test/fiber/test_scheduler.rb
+++ b/test/fiber/test_scheduler.rb
@@ -55,6 +55,7 @@ class TestFiberScheduler < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/fiber/test_scheduler.rb#L55
   def test_close_at_exit
     assert_in_out_err %W[-I#{__dir__} -], <<-RUBY, ['Running Fiber'], [], success: true
     require 'scheduler'
+    Warning[:experimental] = false
 
     scheduler = Scheduler.new
     Fiber.set_scheduler scheduler
diff --git a/tool/test/runner.rb b/tool/test/runner.rb
index c629943090b..8ea51e63aaf 100644
--- a/tool/test/runner.rb
+++ b/tool/test/runner.rb
@@ -12,6 +12,8 @@ require "iseq_loader_checker" https://github.com/ruby/ruby/blob/trunk/tool/test/runner.rb#L12
 require "gc_checker"
 require_relative "../test-coverage.rb" if ENV.key?('COVERAGE')
 
+Warning[:experimental] = false
+
 case $0
 when __FILE__
   dir = __dir__
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]