{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":1644196,"defaultBranch":"master","name":"julia","ownerLogin":"JuliaLang","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2011-04-21T07:01:50.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/743164?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1717291142.0","currentOid":""},"activityList":{"items":[{"before":"2dbf1d7eadd8f9773bf8f3e7799f65acba61fe2e","after":"52b3e82eb5c8d8858e2d81bf992072e969687071","ref":"refs/heads/kf/bindingpartitionwip","pushedAt":"2024-06-02T21:49:25.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Keno","name":"Keno Fischer","path":"/Keno","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1291671?s=80&v=4"},"commit":{"message":"WIP: World-age parition bindings\n\nThis implements world-age partitioning of bindings as proposed in #40399.\nIn effect, much like methods, the global view of bindings now depends on\nyour currently executing world. This means that `const` bindings can now\nhave different values in different worlds. In principle it also means\nthat regular global variables could have different values in different\nworlds, but there is currently no case where the system does this.\n\n# Motivation\nThe reasons for this change are manifold:\n\n1. The primary motivation is to permit Revise to redefine structs.\n This has been a feature request since the very begining of Revise\n (https://github.com/timholy/Revise.jl/issues/18) and there have been\n numerous attempts over the past 7 years to address this, as well as\n countless duplicate feature request. A past attempt to implement the\n necessary julia support in #22721 failed because the consequences and\n semantics of re-defining bindings were not sufficiently worked out.\n One way to think of this implementation (at least with respect to types)\n is that it provides a well-grounded implementation of #22721.\n\n2. A secondary motivation is to make `const`-redefinition no longer UB\n (although `const` redefinition will still have a significant performance\n penalty, so it is not recommended). See e.g. the full discussion in #54099.\n\n3. Not currently implemented, but this mechanism can be used to re-compile code\n where bindings are introduced after the first compile, which is a common\n performance trap for new users (#53958).\n\n4. Not currently implemented, but this mechanism can be used to clarify the semantics\n of bindings import and resolution to address issues like #14055.\n\n# Implementation\n\nIn this PR:\n - `Binding` gets `min_world`/`max_world` fields like `CodeInstance`\n - Various lookup functions walk this linked list using the current task world_age as a key\n - Inference accumulates world bounds as it would for methods\n - Upon binding replacement, we walk all methods in the system, invalidating those whose\n uninferred IR references the replaced GlobalRef\n - One primary complication is that our IR definition permits `const` globals in value position,\n but if binding replacement is permitted, the validity of this may change after the fact.\n To address this, there is a helper in `Core.Compiler` that gets invoked in the type inference\n world and will rewrite the method source to be legal in all worlds.\n - A new `@world` macro can be used to access bindings from old world ages. This is used in printing\n for old objects.\n - The `const`-override behavior was changed to only be permitted at toplevel. The warnings about\n it being UB was removed.\n\nOf particular note, this PR does not include any mechanism for invalidating methods whose signatures\nwere created using an old Binding (or types whose fields were the result of a binding evaluation).\nThere was some discussion among the compiler team of whether such a mechanism should exist in base,\nbut the consensus was that it should not. In particular, although uncommon, a pattern like:\n```\nf() = Any\ng(::f()) = 1\nf() = Int\n```\nDoes not redefine `g`. Thus to fully address the Revise issue, additional code will be required in\nRevise to track the dependency of various signatures and struct definitions on bindings.\n\n# Demo\n```\njulia> struct Foo\n a::Int\n end\n\njulia> g() = Foo(1)\ng (generic function with 1 method)\n\njulia> g()\nFoo(1)\n\njulia> f(::Foo) = 1\nf (generic function with 1 method)\n\njulia> fold = Foo(1)\nFoo(1)\n\njulia> struct Foo\n a::Int\n b::Int\n end\n\njulia> g()\nERROR: MethodError: no method matching Foo(::Int64)\nThe type `Foo` exists, but no method is defined for this combination of argument types when trying to construct it.\n\nClosest candidates are:\n Foo(::Int64, ::Int64)\n @ Main REPL[6]:2\n Foo(::Any, ::Any)\n @ Main REPL[6]:2\n\nStacktrace:\n [1] g()\n @ Main ./REPL[2]:1\n [2] top-level scope\n @ REPL[7]:1\n\njulia> f(::Foo) = 2\nf (generic function with 2 methods)\n\njulia> methods(f)\n# 2 methods for generic function \"f\" from Main:\n [1] f(::Foo)\n @ REPL[8]:1\n [2] f(::@world(Foo, 0:26898))\n @ REPL[4]:1\n\njulia> fold\n@world(Foo, 0:26898)(1)\n```\n\n# Performance consideration\nOn my machine, the validation required upon binding replacement for the full system image takes about 200ms.\nWith CedarSim loaded (I tried OmniPackage, but it's not working on master), this increases about 5x. That's\na fair bit of compute, but not the end of the world. Still, Revise may have to batch its validation. There\nmay also be opportunities for performance improvement by operating on the compressed representation directly.\n\n# Semantic TODO\n\n- [ ] Do we want to change the resolution time of bindings to (semantically) resolve them immediately?\n- [ ] Do we want to introduce guard bindings when inference assumes the absence of a binding?\n\n# Implementation TODO\n- [ ] Precompile re-validation\n- [ ] Various cleanups in the accessors\n- [ ] Invert the order of the binding linked list to make the most recent one always the head of the list\n- [ ] CodeInstances need forward edges for GlobalRefs not part of the uninferred code\n- [ ] Generated function support","shortMessageHtmlLink":"WIP: World-age parition bindings"}},{"before":null,"after":"2dbf1d7eadd8f9773bf8f3e7799f65acba61fe2e","ref":"refs/heads/kf/bindingpartitionwip","pushedAt":"2024-06-02T01:19:02.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Keno","name":"Keno Fischer","path":"/Keno","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1291671?s=80&v=4"},"commit":{"message":"WIP: World-age parition bindings","shortMessageHtmlLink":"WIP: World-age parition bindings"}},{"before":"622d0f74915667b7363895370ce2694a51fb27fb","after":"d8308f2ea4035f37c0d11501a36a8467f5d3b920","ref":"refs/heads/jishnub/copytotriangular","pushedAt":"2024-06-01T18:57:04.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jishnub","name":"Jishnu Bhattacharya","path":"/jishnub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10461665?s=80&v=4"},"commit":{"message":"Fix space in function defn","shortMessageHtmlLink":"Fix space in function defn"}},{"before":"45ceb5196d3f9cfabe9ca844b5c158e4f1b06927","after":"622d0f74915667b7363895370ce2694a51fb27fb","ref":"refs/heads/jishnub/copytotriangular","pushedAt":"2024-06-01T18:44:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jishnub","name":"Jishnu Bhattacharya","path":"/jishnub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10461665?s=80&v=4"},"commit":{"message":"Add propagate_inbounds annotations","shortMessageHtmlLink":"Add propagate_inbounds annotations"}},{"before":null,"after":"45ceb5196d3f9cfabe9ca844b5c158e4f1b06927","ref":"refs/heads/jishnub/copytotriangular","pushedAt":"2024-06-01T18:23:44.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jishnub","name":"Jishnu Bhattacharya","path":"/jishnub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10461665?s=80&v=4"},"commit":{"message":"Less restrictive copyto! signature for triangular matrices","shortMessageHtmlLink":"Less restrictive copyto! signature for triangular matrices"}},{"before":null,"after":"cba92d7275846d035023a3f8071b23d85abaa0ca","ref":"refs/heads/jishnub/tridiaglazystring","pushedAt":"2024-06-01T17:19:42.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jishnub","name":"Jishnu Bhattacharya","path":"/jishnub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10461665?s=80&v=4"},"commit":{"message":"Construct LazyString in error paths for tridiag","shortMessageHtmlLink":"Construct LazyString in error paths for tridiag"}},{"before":"74e658416131f5f1aa828837bda0d4653e48e3b1","after":null,"ref":"refs/heads/lh/elsize","pushedAt":"2024-05-31T20:35:01.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mbauman","name":"Matt Bauman","path":"/mbauman","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/154641?s=80&v=4"}},{"before":"c52eee220654e4b4aca43edb07f5bcf896d3d9bf","after":"48964736fba36c8289749cc9a575b41fdda87dc8","ref":"refs/heads/master","pushedAt":"2024-05-31T20:35:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mbauman","name":"Matt Bauman","path":"/mbauman","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/154641?s=80&v=4"},"commit":{"message":"make elsize public (#54554)\n\nIt's part of the strided arrays API\r\n\r\n\r\nhttps://docs.julialang.org/en/v1/manual/interfaces/#man-interface-strided-arrays","shortMessageHtmlLink":"make elsize public (#54554)"}},{"before":"ff8aedf0b44e2392e6812ecb914c00bb2bb18cea","after":"af2a85472aeb018ef25ebb1b0169129921073b76","ref":"refs/heads/avi/issue52938","pushedAt":"2024-05-31T20:35:00.000Z","pushType":"push","commitsCount":63,"pusher":{"login":"vtjnash","name":"Jameson Nash","path":"/vtjnash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/330950?s=80&v=4"},"commit":{"message":"Merge branch 'master' into avi/issue52938","shortMessageHtmlLink":"Merge branch 'master' into avi/issue52938"}},{"before":"c132b716ea1c5512e39dda3a05f9cca63c9217c2","after":null,"ref":"refs/heads/dcn-gc-first-tid","pushedAt":"2024-05-31T19:51:49.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"d-netto","name":"Diogo Netto","path":"/d-netto","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/61364108?s=80&v=4"}},{"before":"5fc4a604e01531da075fe4c0357533efd92e0c05","after":"c52eee220654e4b4aca43edb07f5bcf896d3d9bf","ref":"refs/heads/master","pushedAt":"2024-05-31T19:51:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"d-netto","name":"Diogo Netto","path":"/d-netto","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/61364108?s=80&v=4"},"commit":{"message":"ensure we set the right value to gc_first_tid (#54645)\n\nThis may introduce a correctness issue in the work-stealing termination\r\nloop if we're using interactive threads and GC threads simultaneously.\r\n\r\nIndeed, if we forget to add `nthreadsi` to `nthreads`, then we're\r\nchecking in the mark-loop termination protocol a range `[gc_first_tid,\r\ngc_first_tid + jl_n_markthreads)` of threads which is \"shifted to the\r\nleft\" compared to what it should be.\r\n\r\nThis implies that we will not be checking whether the GC threads with\r\nhigher TID actually have terminated the mark-loop.","shortMessageHtmlLink":"ensure we set the right value to gc_first_tid (#54645)"}},{"before":"93e2883fb4d8af7df1146ea1bf4c77ad15d5b955","after":"c132b716ea1c5512e39dda3a05f9cca63c9217c2","ref":"refs/heads/dcn-gc-first-tid","pushedAt":"2024-05-31T17:44:45.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"d-netto","name":"Diogo Netto","path":"/d-netto","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/61364108?s=80&v=4"},"commit":{"message":"ensure we set the right value to gc_first_tid","shortMessageHtmlLink":"ensure we set the right value to gc_first_tid"}},{"before":null,"after":"93e2883fb4d8af7df1146ea1bf4c77ad15d5b955","ref":"refs/heads/dcn-gc-first-tid","pushedAt":"2024-05-31T17:43:21.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"d-netto","name":"Diogo Netto","path":"/d-netto","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/61364108?s=80&v=4"},"commit":{"message":"ensure we set the right value to gc_first_tid","shortMessageHtmlLink":"ensure we set the right value to gc_first_tid"}},{"before":"8fa36d677fb35bd653773757f05caa47fbacbd03","after":"419da992eb5a8f7f3f2b72f3874d79a95a6c5315","ref":"refs/heads/dk/generic_cholesky","pushedAt":"2024-05-31T17:22:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dkarrasch","name":"Daniel Karrasch","path":"/dkarrasch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/26658441?s=80&v=4"},"commit":{"message":"minor clean-up","shortMessageHtmlLink":"minor clean-up"}},{"before":"ae6a6f461fd2f44b8197cb001ba9b894d7c64050","after":null,"ref":"refs/heads/backports-release-1.10","pushedAt":"2024-05-31T14:55:28.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"KristofferC","name":"Kristoffer Carlsson","path":"/KristofferC","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1282691?s=80&v=4"}},{"before":"a5540b33d2532d76dbee10dea3de7bba2aa4f51f","after":"61f98475cd62e526f611f413c3178b8a5667a704","ref":"refs/heads/release-1.10","pushedAt":"2024-05-31T14:55:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"KristofferC","name":"Kristoffer Carlsson","path":"/KristofferC","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1282691?s=80&v=4"},"commit":{"message":"backport 1.10: create phantom task for GC threads (#53815) (#54632)\n\nA common idiom used throughout the codebase is to get a pointer to\r\nthread-local-state through `jl_current_task->ptls`.\r\n\r\nCreate a phantom task for GC threads so that we can make use of this\r\nidiom when running in the GC threads as well.\r\n\r\nIdea originally suggested by @vchuravy, bugs are mine.\r\n\r\n(cherry picked from commit 9636ef72eebe0155710471fb79eb5c75cc26949b)\r\n\r\nCo-authored-by: Diogo Netto <61364108+d-netto@users.noreply.github.com>\r\nCo-authored-by: Max Horn ","shortMessageHtmlLink":"backport 1.10: create phantom task for GC threads (#53815) (#54632)"}},{"before":"88590e1cd28e5a9e500c78329dcc0ad3836c8bad","after":"ae6a6f461fd2f44b8197cb001ba9b894d7c64050","ref":"refs/heads/backports-release-1.10","pushedAt":"2024-05-31T13:10:28.000Z","pushType":"push","commitsCount":116,"pusher":{"login":"fingolfin","name":"Max Horn","path":"/fingolfin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/241512?s=80&v=4"},"commit":{"message":"Merge branch 'release-1.10' into backports-release-1.10","shortMessageHtmlLink":"Merge branch 'release-1.10' into backports-release-1.10"}},{"before":"8535a09433a1d170c40dcdba0145648525794f4b","after":null,"ref":"refs/heads/avi/refactor-repl-completions","pushedAt":"2024-05-31T11:48:00.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"aviatesk","name":"Shuhei Kadowaki","path":"/aviatesk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40514306?s=80&v=4"}},{"before":"4e2a9904ef70fdfdcd3cd60ae55c95727a84c70b","after":"5fc4a604e01531da075fe4c0357533efd92e0c05","ref":"refs/heads/master","pushedAt":"2024-05-31T11:47:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"aviatesk","name":"Shuhei Kadowaki","path":"/aviatesk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40514306?s=80&v=4"},"commit":{"message":"REPLCompletions: refactoring to use more in-place operations (#54618)","shortMessageHtmlLink":"REPLCompletions: refactoring to use more in-place operations (#54618)"}},{"before":"540d1ce0db15e62bdf193d5eb0223aad1b337e9e","after":null,"ref":"refs/heads/dk/cleanup","pushedAt":"2024-05-31T10:18:36.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"dkarrasch","name":"Daniel Karrasch","path":"/dkarrasch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/26658441?s=80&v=4"}},{"before":"ea8b4aff3b5dcf78ce7a4fbe17c46ac8a51a7643","after":"4e2a9904ef70fdfdcd3cd60ae55c95727a84c70b","ref":"refs/heads/master","pushedAt":"2024-05-31T10:18:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dkarrasch","name":"Daniel Karrasch","path":"/dkarrasch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/26658441?s=80&v=4"},"commit":{"message":"remove obsolete & unused code in linalg code (#54629)","shortMessageHtmlLink":"remove obsolete & unused code in linalg code (#54629)"}},{"before":"2def43de51c6125025ff771a8bff42e31e3bfcef","after":null,"ref":"refs/heads/jishnub/trieigvecconstprop","pushedAt":"2024-05-31T10:09:14.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jishnub","name":"Jishnu Bhattacharya","path":"/jishnub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10461665?s=80&v=4"}},{"before":"aea4627d2b7af3532e3eeacd74d25df047c36223","after":"ea8b4aff3b5dcf78ce7a4fbe17c46ac8a51a7643","ref":"refs/heads/master","pushedAt":"2024-05-31T10:09:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jishnub","name":"Jishnu Bhattacharya","path":"/jishnub","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10461665?s=80&v=4"},"commit":{"message":"Aggressive constprop in trevc! to stabilize triangular eigvec (#54635)\n\nWe may use aggressive constprop in `trevc!` to eliminate branches, which\r\nmakes the return type of `eigvec(::UpperTriangular)` concretely\r\ninferred.\r\n```julia\r\njulia> @inferred eigvecs(UpperTriangular([1 0; 0 1]))\r\n2×2 Matrix{Float32}:\r\n 1.0 -0.0\r\n 0.0 1.0\r\n```","shortMessageHtmlLink":"Aggressive constprop in trevc! to stabilize triangular eigvec (#54635)"}},{"before":"cb4a749121c11f603a24a5deec5d9437f1427093","after":null,"ref":"refs/heads/jishnub/lazystrtriangularsetindex","pushedAt":"2024-05-31T09:50:03.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"aviatesk","name":"Shuhei Kadowaki","path":"/aviatesk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40514306?s=80&v=4"}},{"before":"6385919a0abd4deb7fcd347f2c03ed42c5ebee21","after":"aea4627d2b7af3532e3eeacd74d25df047c36223","ref":"refs/heads/master","pushedAt":"2024-05-31T09:50:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"aviatesk","name":"Shuhei Kadowaki","path":"/aviatesk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40514306?s=80&v=4"},"commit":{"message":"Avoid concatenating LazyString in setindex! for triangular matrices (#54631)","shortMessageHtmlLink":"Avoid concatenating LazyString in setindex! for triangular matrices (#…"}},{"before":"fe73861e4cb6570afd5aa780421746c77b816c43","after":null,"ref":"refs/heads/avi/53999","pushedAt":"2024-05-31T09:49:33.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"aviatesk","name":"Shuhei Kadowaki","path":"/aviatesk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40514306?s=80&v=4"}},{"before":"8d3b9054d2f81438f3f96d42c45354d169984b1e","after":"6385919a0abd4deb7fcd347f2c03ed42c5ebee21","ref":"refs/heads/master","pushedAt":"2024-05-31T09:49:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"aviatesk","name":"Shuhei Kadowaki","path":"/aviatesk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40514306?s=80&v=4"},"commit":{"message":"REPLCompletions: allow module completions for `using` with multiple args (#54641)","shortMessageHtmlLink":"REPLCompletions: allow module completions for using with multiple a…"}},{"before":"6cebb1b34b582590aeaeac5772ab45c34380e150","after":null,"ref":"refs/heads/avi/wip","pushedAt":"2024-05-31T07:21:28.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"aviatesk","name":"Shuhei Kadowaki","path":"/aviatesk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40514306?s=80&v=4"}},{"before":"9a0b3ab4ced2af69a1afebc32d00a3674c5a06fa","after":"fe73861e4cb6570afd5aa780421746c77b816c43","ref":"refs/heads/avi/53999","pushedAt":"2024-05-31T06:58:03.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aviatesk","name":"Shuhei Kadowaki","path":"/aviatesk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40514306?s=80&v=4"},"commit":{"message":"REPLCompletions: allow module completions for `using` with multiple args\n\nE.g. completes `using Base.Sort, Base.Th|` to\n`using Base.Sort, Base.Threads`.\n\n- fixes #53999","shortMessageHtmlLink":"REPLCompletions: allow module completions for using with multiple args"}},{"before":"faf03a73a8c134f0acdeee3e439d21fdee6384fe","after":"8535a09433a1d170c40dcdba0145648525794f4b","ref":"refs/heads/avi/refactor-repl-completions","pushedAt":"2024-05-31T06:56:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aviatesk","name":"Shuhei Kadowaki","path":"/aviatesk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40514306?s=80&v=4"},"commit":{"message":"REPLCompletions: refactoring to use more in-place operations\n\nThis would be a bit more memory efficient.","shortMessageHtmlLink":"REPLCompletions: refactoring to use more in-place operations"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEWl5jvAA","startCursor":null,"endCursor":null}},"title":"Activity · JuliaLang/julia"}