7-day edition

Sep 12, 2026 – Sep 18, 2026

The edition exactly as it was published. Nothing here is re-selected on a later reading.

Sep 19, 20265 reads · 502 merged PRs screened

core implementation

TheAlgorithms/Python · #15374

Files changed →View PR ↗

pr_file_map.py: fetch PR files concurrently with asyncioPython · 80 + / 9

Introduces 4 new declarations in scripts/pr_file_map.py.

Adds new core implementation rather than adjusting what was there. Read the linked PR for the surrounding test context.

scripts/pr_file_map.py · 1 files

@@ -118,12 +126,67 @@ def get_open_prs() -> list[dict]:     return [pr for pr in json.loads(raw) if pr["number"] not in ignore]  -def get_pr_files(pr_number: int) -> list[str]:-    raw = run_gh(["pr", "view", str(pr_number), "--json", "files"])+async def run_gh_async(args: list[str], semaphore: asyncio.Semaphore) -> str:+    """Async counterpart of run_gh, throttled by a shared semaphore.++    The semaphore bounds how many `gh` subprocesses run at once so we speed up+    the many-round-trip "first pass" without flooding the GitHub API.+    """+    async with semaphore:+        try:+            proc = await asyncio.create_subprocess_exec(+                "gh",+                *args,+                stdout=asyncio.subprocess.PIPE,+                stderr=asyncio.subprocess.PIPE,+            )+        except FileNotFoundError:+            sys.exit("Error: 'gh' (GitHub CLI) is not installed or not in PATH.")+        stdout, stderr = await proc.communicate()+    if proc.returncode != 0:+        sys.exit(f"Error running 'gh {' '.join(args)}':\n{stderr.decode().strip()}")+    return stdout.decode()+++async def get_pr_files_async(pr_number: int, semaphore: asyncio.Semaphore) -> list[str]:+    raw = await run_gh_async(+        ["pr", "view", str(pr_number), "--json", "files"], semaphore+    )     data = json.loads(raw)     return [f["path"] for f in data.get("files", [])]

language design

denoland/deno · #36835

Files changed →View PR ↗

fix(cli): preserve double dash before the entrypointRust · 188 + / 0

Introduces 8 new declarations in libs/cli_parser/src/tests.rs.

Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.

libs/cli_parser/src/tests.rs · 3 files

@@ -1195,6 +1214,48 @@ fn eval_print() {   assert_eq!(r.get_one("code_arg"), Some("1+1")); } +#[test]+fn eval_double_dash_before_code() {+  let r = parse(+    &TEST_ROOT,+    &svec!["deno", "eval", "--", "-1; console.log(0)", "arg1"],+  )+  .unwrap();+  assert_eq!(r.get_one("code_arg"), Some("-1; console.log(0)"));+  assert_eq!(r.trailing, vec!["arg1"]);+}++#[test]+fn eval_double_dash_before_code_keeps_second_separator() {+  // Only the first `--` is special (mirrors clap): it was consumed to make+  // the positional literal, so a later `--` is forwarded as-is even though+  // eval strips the separator in `deno eval code -- a`.+  let r =+    parse(&TEST_ROOT, &svec!["deno", "eval", "--", "code", "--", "a"]).unwrap();+  assert_eq!(r.get_one("code_arg"), Some("code"));+  assert_eq!(r.trailing, vec!["--", "a"]);+}++#[test]+fn upgrade_double_dash_stays_trailing() {+  // Commands without trailing var args don't enter positional-only mode:+  // `--` still starts (unused) trailing args, as before.+  let r =+    parse(&TEST_ROOT, &svec!["deno", "upgrade", "--", "v1", "v2"]).unwrap();+  assert_eq!(r.get_one("version-or-hash-or-channel"), None);+  assert_eq!(r.trailing, vec!["v1", "v2"]);

language design

rust-lang/rust · #162909

Files changed →View PR ↗

Destabilize `VaArgSafe`Rust · 17 + / 15

Reworks 26 lines of existing logic in library/core/src/ffi/va_list.rs.

Changes how existing language design behaves. Tests changed with it, with code of their own.

library/core/src/ffi/va_list.rs · 5 files

@@ -344,18 +344,18 @@ crate::cfg_select! {     } } -#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for i32 {}-#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for i64 {}-#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for isize {} -#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for u32 {}-#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for u64 {}-#[stable(feature = "c_variadic", since = "1.99.0")]+#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")] unsafe impl VaArgSafe for usize {}  // Implement `VaArgSafe` for 128-bit integers on targets where clang provides `__int128`.

core implementation

numpy/numpy · #32550

Files changed →View PR ↗

ENH: speed up the fixed-width string casts and unicode scalarsC · 16 + / 11

Reworks 24 lines of existing logic in numpy/_core/src/multiarray/scalarapi.c.

Changes how existing core implementation behaves. Read the linked PR for the surrounding test context.

numpy/_core/src/multiarray/scalarapi.c · 3 files

@@ -500,25 +500,30 @@ PyArray_Scalar(void *data, PyArray_Descr *descr, PyObject *base)         }     }     if (type_num == NPY_UNICODE) {-        /* we need the full string length here, else copyswap will write too-           many bytes */-        void *buff = PyMem_RawMalloc(descr->elsize);-        if (buff == NULL) {-            return PyErr_NoMemory();-        }-        memcpy(buff, data, itemsize);-        if (swap) {-            byte_swap_vector(buff, itemsize / 4, 4);+        void *buff = NULL;+        const void *ucs4 = data;++        /* only copy when the data cannot be handed to CPython as it is */+        if (swap || !npy_is_aligned(data, NPY_ALIGNOF(Py_UCS4))) {+            buff = PyMem_RawMalloc(descr->elsize);+            if (buff == NULL) {+                return PyErr_NoMemory();+            }+            memcpy(buff, data, itemsize);+            if (swap) {+                byte_swap_vector(buff, itemsize / 4, 4);+            }+            ucs4 = buff;         }          /* truncation occurs here */-        PyObject *u = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buff, itemsize / 4);+        PyObject *u = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, ucs4, itemsize / 4);         PyMem_RawFree(buff);         if (u == NULL) {

runtime

nodejs/node · #65954

Files changed →View PR ↗

trace_events: fix abort when Node.js does not own the V8 platformJavaScript · 12 + / 2

Reworks 8 lines of existing logic in lib/trace_events.js.

Changes how existing runtime behaves. Tests changed with it, with code of their own.

lib/trace_events.js · 4 files

@@ -15,10 +15,14 @@ const { } = require('internal/errors').codes;  const { ownsProcessState } = require('internal/worker');-if (!hasTracing || !ownsProcessState)+const {+  CategorySet,+  getEnabledCategories,+  hasAgent,+} = internalBinding('trace_events');+if (!hasTracing || !ownsProcessState || !hasAgent())   throw new ERR_TRACE_EVENTS_UNAVAILABLE(); -const { CategorySet, getEnabledCategories } = internalBinding('trace_events'); const { customInspectSymbol } = require('internal/util'); const { format } = require('internal/util/inspect'); const {

Read today’s edition →