HN Digest
Briefing personnel.

Lire vite.
Garder l'essentiel.

Les meilleurs longs formats de Hacker News, relus plus calmement.

12074 articles Page 422/1208 Sans filtre

Show HN: Lean4 Datalog DSL Based on Google Zanzibar for AI Projects

ZIL est un petit langage relationnel qui décrit des objets nommés, les relations entre eux et des règles Horn pour dériver des relations supplémentaires, et il est implémenté dans Lean 4. Il s'inspire du modèle de tuples de Zanzibar pour représenter des faits relationnels compacts et permet d'exprimer des patrons d'autorisation et d'héritage de membres de groupe. Dans Lean, ZIL enregistre faits, schémas, règles et preuves certificatives pour relier déclarations, exigences, tests, documents et tâches au sein d'un dépôt. Le moteur applique des règles de style Datalog pour inférer relations telles que la couverture d'exigences et l'impact des changements, en conservant des explications et des niveaux de confiance (asserted, graphDerived, certified). L'écosystème inclut des outils persistants et échangeables (exécutable natif, snapshots ZILX/ZILD, export Soufflé/Prolog, exemples et linting) pour intégrer développeurs, CI, documentation et assistants IA.

Zig's Incremental Compilation Internals

L'équipe Zig a implémenté la compilation incrémentale permettant de recompiler uniquement les fonctions et déclarations modifiées et d'injecter directement les octets dans le binaire pour des reconstructions très rapides. Le frontend convertit chaque fichier en ZIR mis en cache sur disque et le traitement par fichier est embarrassingly parallel, ce qui permet de ré-analyser seulement les fichiers dont le hash de source a changé. La phase la plus délicate est l'analyse sémantique, qui découpe la compilation en unités d'analyse (layout, types, valeurs et corps de fonctions) et maintient un graphe de dépendances entre unités et régions de code pour savoir quoi réanalyser. Pour le linkage incrémental, Zig intègre étroitement le linker via l'abstraction MappedFile qui alloue et redimensionne des nœuds dans le fichier binaire, marque les régions modifiées et réapplique les relocations sans réécrire tout le binaire. Pour l'essayer il faut une version récente de Zig (master ou ≥0.17), lancer zig build --watch -fincremental (actuellement surtout x86_64-linux), et garder à l'esprit que la fonctionnalité est très utile mais encore en développement et sujette à des bugs.

The iPhone Upgrade Program is being replaced by Apple Upgrade

Ce programme de location d'appareils est disponible aux États-Unis (hors territoires américains) et les contrats de location sont fournis par Klarna. La location est soumise à des critères d'éligibilité et à une approbation de crédit, avec une approbation finale lors du passage en caisse. Pour être éligible, il faut être résident américain âgé d'au moins 18 ans (ou de l'âge légal dans son État), disposer d'une carte de crédit ou de débit acceptée et d'un identifiant Apple, des critères supplémentaires s'appliquent. L'appareil doit être restitué en bon état et des frais pour dommages peuvent être facturés, et pour les iPhone il faut choisir un opérateur éligible (les forfaits prépayés ne sont pas autorisés); les mises à niveau exigent la signature d'un nouveau contrat de location et une nouvelle approbation. Le programme n'est pas disponible pour les appareils reconditionnés ni en ligne dans certains magasins spéciaux tels que les plans d'achat pour employés, les programmes d'achat d'entreprise participants, Apple at Work, ni pour les achats gouvernementaux, éducatifs ou destinés aux anciens combattants et militaires.

Log is non-monotonic in PHP and Lua

L'auteur montre qu'en mathématiques, si a>b>1 et x>1 alors log_a x < log_b x, mais que certains langages renvoient des résultats contradictoires pour des valeurs flottantes particulières. L'exemple clé utilise a = 10 + 2^-49, b = 10 et x = 2.93, où PHP et Lua donnent une comparaison incorrecte entre log(x,a) et log(x,b) tandis que Python indique l'égalité et Rust/C# se comportent correctement. La cause vient du fait que libm fournit des fonctions dédiées log10 et log2 que certains langages appellent directement pour ces bases tandis que les bases arbitraires sont calculées par ln(x)/ln(a), ce qui crée une discontinuité de précision en combinant deux méthodes différentes. La solution proposée est d'éviter le mélange des méthodes en exposant et en utilisant explicitement log10/log2 pour les bases fixes et ln‑basé pour les bases variables, ou de supprimer le cas spécial afin de garantir une cohérence monotone. L'article souligne aussi que ce comportement n'est pas une limite fondamentale d'IEEE‑754 mais le résultat de décisions d'implémentation, et mentionne des problèmes annexes comme la gestion de log(x,1) et l'ambiguïté autour de bases arrondies comme M_E.

60 Years Ago, a Submerged Submarine Circled the Globe for the First Time (2020)

Pendant des décennies, les sous-marins ont passé plus de temps en surface qu'en plongée, utilisant des moteurs diesel sur la surface et des batteries pour les attaques sous l'eau. La propulsion nucléaire a permis une immersion indéfinie, entraînant des coques plus hydrodynamiques et des submersibles plus rapides et discrets. En 1960, le sous-marin nucléaire USS Triton a fait le tour du monde entièrement en plongée, démontrant que les sous-marins pouvaient opérer complètement immergés. Au cours de sa mission il a suivi une route inspirée de Magellan, parcouru 26 723 milles nautiques sur l'itinéraire principal et environ 36 000 milles au total en 85 jours, réalisé des relevés océanographiques et ne refit surface qu'une seule fois pour évacuer un malade. Le concept de sous-marin radar picket fut de courte durée, le bâtiment fut désarmé en 1968 et sa voile est aujourd'hui exposée.

Hooray for the Sockets Interface

En 1983 la sortie de 4.2BSD par l'Université de Californie à Berkeley a introduit le modèle de sockets qui a normalisé l'accès réseau dans les systèmes UNIX. À l'époque les systèmes étaient distribués sur bande magnétique et installés par de longs processus manuels de bootstrap, transfert TAR et compilation qui prenaient des jours. Avant les sockets l'accès réseau reposait sur des outils de type terminal (cu, tip) et des liaisons lentes ou par UUCP, rendant les échanges intersites hétérogènes et peu fiables. Les sockets ont réutilisé l'abstraction des descripteurs de fichier, facilitant l'adaptation d'applications (FTP, Telnet, Sendmail) au réseau et accélérant l'adoption d'une pile TCP/IP standard. Malgré des débuts buggés et des alternatives comme STREAMS, les sockets se sont imposés via des implémentations commerciales (Sun, ULTRIX, System V), permettant des services comme NFS et préparant la voie aux évolutions ultérieures (IPv6, QUIC).

Steel Bank Common Lisp version 2.6.7

Les nouvelles versions de SBCL sont généralement publiées en fin de mois et la liste des fichiers Sourceforge indique la version disponible. La version 2.6.7 (2026-07-28) ajoute le module contrib SB‑MANUAL pour explorer le manuel dans les docstrings, étend DOCUMENTATION avec DOC‑TYPE et améliore le support SIMD (ARM64, AVX512/AVX2) ainsi que le support multi‑plateforme. Les versions récentes incluent de nombreuses corrections de bogues touchant compilateur, lecteur et FFI, ainsi que des changements mineurs incompatibles ciblés et des adaptations pour Windows arm64, LoongArch, RISC‑V, PPC et autres architectures. Le compilateur a reçu de nombreuses optimisations (transforms pour COUNT, CONCATENATE, REDUCE, MAKE‑ARRAY, meilleure dérivation de types, allocation sur pile pour funargs et tableaux, routines SIMD pour UTF‑8) améliorant les performances sur x86‑64 et ARM64. La documentation a été enrichie et nettoyée avec correction de fautes, index séparé pour les déclarations, génération SB‑MANUAL et améliorations des docstrings et des modules de couverture et d'introspection.