[#114703] [Ruby master Bug#19875] Ruby 2.7 -> 3.1 Performance regression in String#count — "iz (Illia Zub) via ruby-core" <ruby-core@...>

Issue #19875 has been reported by iz (Illia Zub).

18 messages 2023/09/12

[#114774] [Ruby master Feature#19884] Make Safe Navigation Operator work on classes — "p8 (Petrik de Heus) via ruby-core" <ruby-core@...>

Issue #19884 has been reported by p8 (Petrik de Heus).

13 messages 2023/09/15

[#114796] [Ruby master Feature#19889] Let `Kernel.#require` search for files relative to the current working directory for non ./, ../ relative paths — "sawa (Tsuyoshi Sawada) via ruby-core" <ruby-core@...>

Issue #19889 has been reported by sawa (Tsuyoshi Sawada).

6 messages 2023/09/18

[#114803] [Ruby master Bug#19890] File#realine(chomp: true) slower/more allocations than readline.chomp! — "segiddins (Samuel Giddins) via ruby-core" <ruby-core@...>

Issue #19890 has been reported by segiddins (Samuel Giddins).

12 messages 2023/09/18

[#114817] [Ruby master Bug#19892] Build failure with 8f1b688177 — "vo.x (Vit Ondruch) via ruby-core" <ruby-core@...>

Issue #19892 has been reported by vo.x (Vit Ondruch).

8 messages 2023/09/19

[#114915] [Ruby master Feature#19905] Introduce `Queue#peek` — "hi@... (Joao Fernandes) via ruby-core" <ruby-core@...>

Issue #19905 has been reported by hi@joaofernandes.me (Joao Fernandes).

8 messages 2023/09/28

[ruby-core:114799] [Ruby master Feature#19889] Let `Kernel.#require` search for files relative to the current working directory for non ./, ../ relative paths

From: "nobu (Nobuyoshi Nakada) via ruby-core" <ruby-core@...>
Date: 2023-09-18 13:45:52 UTC
List: ruby-core #114799
Issue #19889 has been updated by nobu (Nobuyoshi Nakada).

Status changed from Open to Feedback

sawa (Tsuyoshi Sawada) wrote:
> My understanding is that `./` and `../` in the given path argument are interpreted relative to:
> 
> (1)
> * The current working directory (for `load` or `require`)
> * The requiring file's path (for `require_relative`)

The former is correct, the latter is wrong.
Always `./` means the current working directory, never the loading file's directory.

> **Proposal**: For non-`./`-or-`../` relative paths, I propose to let `Kernel.#require` search relative to the current working directory if the file is not found relative to the paths in `$LOAD_PATH`, so that the methods `load`, `require`, and `require_relative` all work the same in this respect.

You can add `"."` to `$LOAD_PATH`, at your own risk.
Historically, `$LOAD_PATH` contained `"."` if `$SAFE` is 0, but it was totally removed in 2009 for security reasons.
I don't think we will revise it.

----------------------------------------
Feature #19889: Let `Kernel.#require` search for files relative to the current working directory for non ./, ../ relative paths
https://bugs.ruby-lang.org/issues/19889#change-104644

* Author: sawa (Tsuyoshi Sawada)
* Status: Feedback
* Priority: Normal
----------------------------------------
My understanding is that `./` and `../` in the given path argument are interpreted relative to:

(1)
* The current working directory (for `load` or `require`)
* The requiring file's path (for `require_relative`)

which shows a division of labor between the methods, and seems reasonable. However, when it comes to other relative paths (e.g., `foo/bar.rb`), they are interpreted relative to:

(2)
* Paths in `$LOAD_PATH` (for `require`)
* Paths in `$LOAD_PATH` or **the current working directory** (for `load` or `require_relative`)

For example, given:

* File `some_path/foo/a.rb`
* File `some_path/b.rb` with content `require "foo/a"`
* Current directory at `some_path`,

running `ruby b.rb` raises a `LoadError`, but given:

* File `some_path/foo/a.rb`
* File `some_path/b.rb` with content ` require_relative "foo/a"`
* Current directory at `some_path`,

running `ruby b.rb` does not raise an error.

The search path in (2) for `require` is a proper subset of that of `load` and `require_relative`. There is no division of labor here; there is only inconvenience for `require`.

Furthermore, in (1), `require` (as well as `load`) is concerned with the current working directory while `require_relative` is not, but in (2), the relation is reversed: `require_relative` (as well as `load`) is concerned with the current working directory while `require` is not.

This situation is making the specification of `require` versus `require_relative` difficult to understand, as well as causing inconvenience.

**Proposal**: For non-`./`-or-`../` relative paths, I propose to let `Kernel.#require` search relative to the current working directory if the file is not found relative to the paths in `$LOAD_PATH`, so that the methods `load`, `require`, and `require_relative` all work the same in this respect.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

In This Thread