Daily edition

Sep 24, 2026

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

Sep 25, 20265 reads · 145 merged PRs screened

language design

rust-lang/rust · #161386

Files changed →View PR ↗

Don't merge distinct impl candidatesRust · 89 + / 30 −

Introduces 5 new declarations in compiler/rustc_next_trait_solver/src/solve/trait_goals.rs.

Adds new language design rather than adjusting what was there. Tests changed with it, with code of their own.

compiler/rustc_next_trait_solver/src/solve/trait_goals.rs ↗ · 10 files

@@ -1493,19 +1493,77 @@ where         }     } +    /// Like `try_merge_candidates`, but returns `None` if there are multiple user-written+    /// impls, or a user-written impl and a builtin impl, in which case we bail with ambiguity.+    ///+    /// Candidates with equal responses can still come from conflicting impls, ex - two+    /// overlapping impls which both apply due to impossible where-clauses. We don't want+    /// to merge these. Multiple builtin impls are still merged as usual. This is not+    /// done for marker traits, as their impls are allowed to overlap.+    #[instrument(level = "trace", skip(self), ret)]+    fn try_merge_impl_candidates(+        &mut self,+        trait_def_id: I::TraitId,+        candidates: &[Candidate<I>],+    ) -> Option<CanonicalResponse<I>> {+        let is_marker = self.cx().trait_is_marker(trait_def_id);+        let all_builtin = candidates+            .iter()+            .all(|candidate| matches!(candidate.source, CandidateSource::BuiltinImpl(_)));++        if is_marker || all_builtin {+            self.try_merge_candidates(candidates).map(|(response, _)| response)+        } else if candidates.len() > 1 {+            None+        } else {+            candidates.first().map(|candidate| candidate.result)+        }+    }++    fn merge_candidates_or_bail_with_ambiguity(+        &mut self,+        candidates: &[Candidate<I>],

runtime

ggml-org/llama.cpp · #24669

Files changed →View PR ↗

llama: add llama_batch_extC++ · 692 + / 139 −

Introduces 19 new declarations in src/llama-batch.cpp.

Adds new runtime rather than adjusting what was there. Tests changed with it, with code of their own.

src/llama-batch.cpp ↗ · 10 files

@@ -985,3 +1020,305 @@ void llama_batch_free(struct llama_batch batch) {     }     if (batch.logits)   free(batch.logits); }+++// llama_batch_ext++size_t llama_batch_ext_select_n_embd_inp(llama_context_type ctx_type, llm_arch arch, const llama_hparams & hparams) {+    if (ctx_type == LLAMA_CONTEXT_TYPE_MTP) {+        return hparams.n_embd_out();+    }+    if (arch == LLM_ARCH_DFLASH) {+        return hparams.n_embd_inp_enc();+    }+    return hparams.n_embd_inp();+}++llama_batch_ext::llama_batch_ext(llama_context * ctx) :+        n_tokens_max(llama_n_batch(ctx)),+        n_embd_inp(llama_batch_ext_select_n_embd_inp(ctx->get_cparams().ctx_type, llama_get_model(ctx)->arch, llama_get_model(ctx)->hparams)),+        n_embd_inp_enc(llama_get_model(ctx)->hparams.n_embd_inp_enc()),+        n_seq_max(llama_n_seq_max(ctx)),+        mem(llama_get_memory(ctx)),+        n_vocab(llama_vocab_n_tokens(llama_model_get_vocab(llama_get_model(ctx)))),+        n_pos_per_embd(llama_get_model(ctx)->hparams.n_pos_per_embd()) {+    clear();+}++llama_batch_ext::llama_batch_ext(+        size_t n_tokens_max,+        size_t n_embd_inp,+        size_t n_embd_inp_enc,+        llama_seq_id n_seq_max,

systems design

kubernetes/kubernetes · #142275

Files changed →View PR ↗

Fix benchmarking exemplar pod by using strict decode and corev1 PodsGo · 83 + / 20 −

Introduces 7 new declarations in staging/src/k8s.io/apiserver/pkg/storage/testing/store_benchmarks.go.

Adds new systems design rather than adjusting what was there. Tests changed with it, with code of their own.

staging/src/k8s.io/apiserver/pkg/storage/testing/store_benchmarks.go ↗ · 6 files

@@ -65,6 +69,65 @@ const ( 	trafficPatch           = "Patch" ) +var (+	scheme = runtime.NewScheme()+	codecs = serializer.NewCodecFactory(scheme)+)++func init() {+	metav1.AddToGroupVersion(scheme, metav1.SchemeGroupVersion)+	utilruntime.Must(corev1.AddToScheme(scheme))+	utilruntime.Must(metav1.AddMetaToScheme(scheme))+	scheme.AddUnversionedTypes(corev1.SchemeGroupVersion, &metav1.Status{})+	pb := protobuf.NewSerializer(scheme, scheme)+	corev1ProtoCodec = codecs.CodecForVersions(pb, pb, schema.GroupVersions{corev1.SchemeGroupVersion}, schema.GroupVersions{corev1.SchemeGroupVersion})+}++var (+	corev1ProtoCodec runtime.Codec+)++// StoreConfig is subset of Storage configuration that is shared between cacher and etcd3. Used to ensure consistent config for setting up a store for benchmarks.+type StoreConfig struct {+	Versioner      storage.Versioner+	GroupResource  schema.GroupResource+	ResourcePrefix string+	KeyFunc        func(runtime.Object) (string, error)+	GetAttrsFunc   func(runtime.Object) (label labels.Set, field fields.Set, err error)+	NewFunc        func() runtime.Object+	NewListFunc    func() runtime.Object+	Codec          runtime.Codec+}+

core implementation

TheAlgorithms/Python · #15428

Files changed →View PR ↗

Bitonic sort comparablePython · 32 + / 4 −

Introduces 5 new declarations in sorts/bitonic_sort.py.

Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.

sorts/bitonic_sort.py ↗ · 2 files

@@ -6,8 +6,16 @@  from __future__ import annotations +from typing import Protocol -def comp_and_swap(array: list[int], index1: int, index2: int, direction: int) -> None:++class Comparable(Protocol):+    def __lt__(self, other: object, /) -> bool: ...+++def comp_and_swap[T: Comparable](+    array: list[T], index1: int, index2: int, direction: int+) -> None:     """Compare the value at given index1 and index2 of the array and swap them as per     the given direction. 

framework internals

vercel/next.js · #99115

Files changed →View PR ↗

Use graph-backed codegen for client proxies and WASM loadersRust · 72 + / 49 −

Introduces 5 new declarations in crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs.

Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.

crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs ↗ · 21 files

@@ -291,25 +285,28 @@ impl EcmascriptChunkPlaceable for EcmascriptClientReferenceModule {     }      #[turbo_tasks::function]-    fn chunk_item_content(-        self: Vc<Self>,-        _chunking_context: Vc<Box<dyn ChunkingContext>>,+    async fn chunk_item_content(+        self: ResolvedVc<Self>,+        chunking_context: ResolvedVc<Box<dyn ChunkingContext>>,         _module_graph: Vc<ModuleGraph>,-        _async_module_info: Option<Vc<AsyncModuleInfo>>,+        async_module_info: Option<Vc<AsyncModuleInfo>>,         _estimated: bool,     ) -> Result<Vc<EcmascriptChunkItemContent>> {-        bail!("Attempted to get chunk_item_content for EcmascriptClientReferenceModule")+        Ok(chunk_item_content_with_code_from(+            *ResolvedVc::upcast(self),+            self.proxy_module(),+            *chunking_context,+            async_module_info,+        ))     } } -/// This wrapper only exists to overwrite the `asset_ident` method of the-/// wrapped [`Vc<Box<dyn EcmascriptChunkItem>>`]. Otherwise, the asset ident of-/// the chunk item would not be the same as the asset ident of the-/// [`Vc<EcmascriptClientReferenceModule>`].+/// This wrapper uses the client-reference module's graph identity for both its asset identifier+/// and code generation. The generated proxy supplies the code, but isn't itself in the graph. #[turbo_tasks::value] struct EcmascriptClientReferenceProxyChunkItem {     inner_module: ResolvedVc<EcmascriptClientReferenceModule>,

Read today’s edition →