<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: typical182</title><link>https://news.ycombinator.com/user?id=typical182</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 26 Sep 2026 01:00:01 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=typical182" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by typical182 in "Platform-independent SIMD in Go"]]></title><description><![CDATA[
<p>It's been discussed for a long time, and the related proposals were heavily upvoted, including various older proposals.<p>As I understand it, part of the reason it took a while is that the core Go team was generally of the opinion that doing user-facing SIMD APIs the right way was to design a high-level, cross-platform API that would stand the test of time, and that was then punted a few times given its complexity and need to do other things.<p>Part of what helped the current approach take off was switching to a philosophy of designing a lower-level architecture-dependent API first (the 'simd/archsimd' package), and then later doing a higher-level portable API (the 'simd' package, which is topic of this blog post).<p>That two-level approach I think also gave some additional freedom for the design and implementation of the friendlier / high-level 'simd' package, including because the lower-level 'simd/archsimd' package is available for people who need or want to drop down.<p>It's a nice design.</p>
]]></description><pubDate>Fri, 25 Sep 2026 16:45:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=49846874</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49846874</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49846874</guid></item><item><title><![CDATA[New comment by typical182 in "Platform-independent SIMD in Go"]]></title><description><![CDATA[
<p>From the former head of the Go security team [1]:<p>> I have never seen real Go code (i.e. not code written purposefully to be exploitable) that was exploitable due to a data race.<p>And from tptacek in that same discussion [2]:<p>> The fact is that Go doesn't admit memory corruption vulnerabilities, and the way you know that is the fact that there are practically zero exploits for memory corruption vulnerabilities targeting pure Go programs, despite the popularity of the language.<p>[1] <a href="https://news.ycombinator.com/item?id=44672003">https://news.ycombinator.com/item?id=44672003</a><p>[2] <a href="https://news.ycombinator.com/item?id=44672371">https://news.ycombinator.com/item?id=44672371</a></p>
]]></description><pubDate>Fri, 25 Sep 2026 16:21:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=49846608</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49846608</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49846608</guid></item><item><title><![CDATA[New comment by typical182 in "Platform-independent SIMD in Go"]]></title><description><![CDATA[
<p>Go is broadly considered to be a memory safe language.<p>See for example comments from tptacek like:<p><a href="https://news.ycombinator.com/item?id=43335748">https://news.ycombinator.com/item?id=43335748</a><p><a href="https://news.ycombinator.com/item?id=46028232">https://news.ycombinator.com/item?id=46028232</a><p><a href="https://news.ycombinator.com/item?id=44672371">https://news.ycombinator.com/item?id=44672371</a><p>(The gist: memory safety is a term of art coined by security practitioners. Go, Python, Rust, Java, others: memory safe. C/C++: memory unsafe. Periodically, people in different slices of industry or academia come up with new definitions of memory safety that declare Rust or Go or other languages to be memory unsafe, but that is not by the broadly accepted definition across industry.)</p>
]]></description><pubDate>Fri, 25 Sep 2026 15:06:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=49845707</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49845707</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49845707</guid></item><item><title><![CDATA[New comment by typical182 in "Platform-independent SIMD in Go"]]></title><description><![CDATA[
<p>FWIW, there is some pretty substantial autovectorization work that is already in-flight for the Go compiler.<p>There's a CL stack here:<p><a href="https://go.dev/cl/791740" rel="nofollow">https://go.dev/cl/791740</a><p>It's hard to make predictions with an open source project, but my personal guess is some flavor of it will land (including it is already demonstrating good results without an enormous level of code complexity in the compiler and without overly slowing down compile speeds), but I guess we'll see.<p>It's being driven by an external contributor who has landed some good changes in the past to the Go compiler. (I think the autovectorization work might be part of their PhD or other academic research, but not sure.)</p>
]]></description><pubDate>Fri, 25 Sep 2026 13:06:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=49844114</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49844114</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49844114</guid></item><item><title><![CDATA[New comment by typical182 in "Hunting Down a Go Runtime Bug on 32-Bit Embedded Systems"]]></title><description><![CDATA[
<p>FWIW, every commit for the Go project is tested on multiple 32-bit architectures, including pre-commit tests and post-commit tests.<p>You can see a list here:<p><a href="https://build.golang.org/" rel="nofollow">https://build.golang.org/</a><p>(That particular build dashboard just shows post-commit tests. '386' there is 32-bit x86, 'arm' is 32-bit ARM.)<p>I can't speak to what Google runs in production or what Google tests internally, but the Google-run CI for the Go project definitely does test 32-bit, and those tests essentially match the tests run against 64-bit.</p>
]]></description><pubDate>Sat, 29 Aug 2026 16:52:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=49491394</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49491394</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49491394</guid></item><item><title><![CDATA[JSON evolution in Go: from v1 to v2]]></title><description><![CDATA[
<p>Article URL: <a href="https://antonz.org/go-json-v2/">https://antonz.org/go-json-v2/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49433401">https://news.ycombinator.com/item?id=49433401</a></p>
<p>Points: 15</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 25 Aug 2026 13:09:47 +0000</pubDate><link>https://antonz.org/go-json-v2/</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49433401</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49433401</guid></item><item><title><![CDATA[New comment by typical182 in "Go 1.27 Interactive Tour"]]></title><description><![CDATA[
<p>And to answer the second half of your request, here is that exact same code as above, but now using the 1.27 generic methods feature (with a runnable example using tip at <a href="https://go.dev/play/p/1YK62tGetsm?v=gotip" rel="nofollow">https://go.dev/play/p/1YK62tGetsm?v=gotip</a>):<p><pre><code>  // Map maps from a slice containing type In to a slice containing type Out.
  func (s MySlice[In]) Map[Out any](f func(In) Out) []Out {
      var out []Out
      for i := range s {
          out = append(out, f(s[i]))
      }
      return out
  }
</code></pre>
In short, you could always have methods on a generic type since Go first introduced generics in Go 1.18, but with 1.27, the methods on the generic type can also introduce their own additional type parameters.<p>(Previously, you could achieve the same net effect with a top-level generic function, but then the code would not be grouped as nicely as hanging it off of the type, and arguably it now can have slightly better ergonomics in some cases. You can see more of the rationale from Robert Griesemer at <a href="https://github.com/golang/go/issues/77273" rel="nofollow">https://github.com/golang/go/issues/77273</a>.)</p>
]]></description><pubDate>Sun, 02 Aug 2026 16:48:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=49146107</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49146107</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49146107</guid></item><item><title><![CDATA[New comment by typical182 in "Go 1.27 Interactive Tour"]]></title><description><![CDATA[
<p>It's not a great example.<p>I think it's trying to show a mapping operation for a generic container where the container values are of one type and the mapping function is allowed to return a container with values of a different type.<p>Without generics, something along the lines of the following (with runnable example at <a href="https://go.dev/play/p/KHBI1uAhbO0" rel="nofollow">https://go.dev/play/p/KHBI1uAhbO0</a>):<p><pre><code>  type MySlice []int

  // Map maps from a slice of ints to a slice of float64s.
  func (s MySlice) Map(f func(int) float64) []float64 {
     var out []float64
     for i := range s {
         out = append(out, f(s[i]))
     }
     return out
  }
</code></pre>
From a quick search, this seems to be better explanation of this new 1.27 feature:<p><a href="https://www.gopherguides.com/articles/golang-generic-methods" rel="nofollow">https://www.gopherguides.com/articles/golang-generic-methods</a><p>(That uses an example that seems similar in spirit to the Interactive Tour's example, but with a more useful type of a Stack[T] and corresponding explanation seem clearer.)</p>
]]></description><pubDate>Sun, 02 Aug 2026 15:46:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=49145618</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49145618</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49145618</guid></item><item><title><![CDATA[New comment by typical182 in "Golang proposal: container/: generic collection types"]]></title><description><![CDATA[
<p>FWIW, I do remember that quote.<p>It doesn't seem particularly damning to me, though, especially written by Russ Cox in hindsight. It's almost a truism that if you had spent less time on approaches that didn't pan out and more time on approaches that did eventually pan out, you likely would have arrived at a workable solution sooner.<p>For example, if the core Go team had spent more time exploring C#-like approaches (as some suggest they should have), it's possible that would have delayed the whole thing.<p>(btw, consider me a "long time listener, first time caller" -- I pretty much always pause to read your comments while flicking through discussions here, including I appreciate you often bring in historical context, even if I might have a different take, or even if I might have expressed your take differently ;)</p>
]]></description><pubDate>Sat, 01 Aug 2026 16:06:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=49135591</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49135591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49135591</guid></item><item><title><![CDATA[New comment by typical182 in "Golang proposal: container/: generic collection types"]]></title><description><![CDATA[
<p>> <i>it finally took convincing Philip Wadler (of Haskell and Java generics fame) to help. Without that lucky break [...] Go probably still wouldn't have generics.</i><p>Small correction, I think:<p>My understanding is the core Go team was already well on its way to doing generics before Philip Wadler became involved, though he and his colleagues were later very helpful.<p>From Wadler's "Featherweight Go" paper [1] (the first draft of which seems to have been uploaded to arxiv.org circa May 2020):<p><i>Recently, the Go team mooted a design to extend Go with generics [Taylor and Griesemer 2019], and Rob Pike wrote Wadler to ask: Would you be interested in helping us get polymorphism right [...]</i><p>and:<p><i>It took us several tries over many months to formalise it correctly.</i><p>Well before that, doing generics was one of the main focuses in the GopherCon keynotes/announcements in 2017 and 2018 by Russ Cox [2].<p>The August 2018 generics design [3][4] was very detailed, and my recollection is most people in the Go community at that point believed the core Go team was going to make generics happen, even if the team and community were still iterating on the exact design.<p>Of course, that design improved over time, including thanks to Wadler and crew, but I think it would be overstating things to say that probably nothing would have happened without Wadler.<p>[1] <a href="https://arxiv.org/pdf/2005.11710v1" rel="nofollow">https://arxiv.org/pdf/2005.11710v1</a><p>[2] <a href="https://go.dev/blog/go2draft" rel="nofollow">https://go.dev/blog/go2draft</a><p>[3] <a href="https://go.googlesource.com/proposal/+/master/design/go2draft-generics-overview.md" rel="nofollow">https://go.googlesource.com/proposal/+/master/design/go2draf...</a><p>[4] <a href="https://go.googlesource.com/proposal/+/master/design/go2draft-contracts.md" rel="nofollow">https://go.googlesource.com/proposal/+/master/design/go2draf...</a></p>
]]></description><pubDate>Sat, 01 Aug 2026 15:05:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=49135090</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49135090</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49135090</guid></item><item><title><![CDATA[New comment by typical182 in "Golang proposal: container/: generic collection types"]]></title><description><![CDATA[
<p>From what I've seen, I don't think the core Go team was ignoring the lessons of Java or C#.<p>Here's a sample quote from Russ Cox from 11 years ago on this site: [1]<p><i>We have spoken to a few true experts in Java generics and each of them has said roughly the same thing: be very careful, it's not as easy as it looks, and you're stuck with all the mistakes you make. As a demonstration, skim through most of <a href="http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html" rel="nofollow">http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.ht...</a> and see how long before you start to think "was this really the best way to do this?"</i><p>And of course, they asked other experts for help, including Philip Wadler (of Featherweight Java and Haskell fame): [2] [3]<p><i>We’ve been thinking about generics since work on Go began, and we wrote and rejected our first concrete design in 2010. We wrote and rejected three more designs by the end of 2013. Four abandoned experiments, but not failed experiments, We learned from them, [...]</i><p><i>Last year [2018] we started exploring and experimenting again, and we presented a new design [...] and we’ve been working with programming language theory experts to understand the design better.</i><p>[1] <a href="https://news.ycombinator.com/item?id=9622417">https://news.ycombinator.com/item?id=9622417</a><p>[2] <a href="https://go.dev/blog/experiment" rel="nofollow">https://go.dev/blog/experiment</a><p>[3] <a href="https://go.dev/blog/generics-next-step#acknowledgements" rel="nofollow">https://go.dev/blog/generics-next-step#acknowledgements</a></p>
]]></description><pubDate>Fri, 31 Jul 2026 22:58:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=49129462</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=49129462</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49129462</guid></item><item><title><![CDATA[ATProto for Distributed Systems Engineers]]></title><description><![CDATA[
<p>Article URL: <a href="https://atproto.com/articles/atproto-for-distsys-engineers">https://atproto.com/articles/atproto-for-distsys-engineers</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48905287">https://news.ycombinator.com/item?id=48905287</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 14 Jul 2026 11:49:27 +0000</pubDate><link>https://atproto.com/articles/atproto-for-distsys-engineers</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=48905287</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48905287</guid></item><item><title><![CDATA[New comment by typical182 in "Go.sum is not a lockfile"]]></title><description><![CDATA[
<p>Go modules did not get rid of vendoring. You can do 'go mod vendor' and have been able to do so since Go modules were first introduced.<p>How long the google-run module cache (aka, module proxy or module mirror) at <a href="https://proxy.golang.org" rel="nofollow">https://proxy.golang.org</a> caches the contents of modules is I think slightly nuanced.<p>That page includes:<p>> Whenever possible, the mirror aims to cache content in order to avoid breaking builds for people that depend on your package<p>But that page also discusses how modules might need to be removed for legal reasons or if a module does not have a known Open Source license:<p>> proxy.golang.org does not save all modules forever. There are a number of reasons for this, but one reason is if proxy.golang.org is not able to detect a suitable license. In this case, only a temporarily cached copy of the module will be made available, and may become unavailable if it is removed from the original source and becomes outdated.<p>If interested, there's a good overview of how it all works in one of the older official announcement blog posts (in particular, the "Module Index", "Module Authentication", "Module Mirrors" sections there):<p><a href="https://go.dev/blog/modules2019#module-index" rel="nofollow">https://go.dev/blog/modules2019#module-index</a></p>
]]></description><pubDate>Thu, 08 Jan 2026 20:28:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46546010</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=46546010</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46546010</guid></item><item><title><![CDATA[New comment by typical182 in "Go.sum is not a lockfile"]]></title><description><![CDATA[
<p>> <i>They may be an expert in Go, but from their writing they appear to be misunderstanding (or at least misrepresenting) how things work in other languages</i><p>Thanks for that link.<p>Based on reading through that whole discussion there just now and my understanding of the different ecosystems, my conclusion is that certainly people there are <i>telling</i> Filippo Valsorda that he is misunderstanding how things work in other languages, but then AFAICT Filippo or others chime in to explain how he is in fact not misunderstanding.<p>This subthread to me was a seemingly prototypical exchange there:<p><a href="https://lobste.rs/s/exv2eq/go_sum_is_not_lockfile#c_d26oq4" rel="nofollow">https://lobste.rs/s/exv2eq/go_sum_is_not_lockfile#c_d26oq4</a><p>Someone in that subthread tells Filippo (FiloSottile) that he is misunderstanding cargo behavior, but Filippo then reiterates which behavior he is talking about (add vs. install), Filippo does a simple test to illustrate his point, and some others seem to agree that he is correct in what he originally said.<p>That said, YMMV, and that overall discussion does certainly seem to have some confusion and people seemingly talking past each other (e.g., some people mixing up "dependents" vs. "dependencies", etc.).</p>
]]></description><pubDate>Thu, 08 Jan 2026 19:54:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=46545615</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=46545615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46545615</guid></item><item><title><![CDATA[New comment by typical182 in "Go-boot: bare metal Go UEFI boot manager"]]></title><description><![CDATA[
<p>There’s some more context in a proposal from the folks behind this project to upstream the needed Go runtime hooks into Go proper.<p>From what I can tell, the core Go team seems generally favorable to it, so seems like a decent chance it will happen.<p>From:<p>#73608 proposal: all: add bare metal support<p><a href="https://github.com/golang/go/issues/73608" rel="nofollow">https://github.com/golang/go/issues/73608</a><p>> Go applications built with GOOS=none would run on bare metal, without any underlying OS. All required support is provided by the Go runtime and external driver packages, also written in Go.<p>And:<p>> These hooks act as a "Rosetta Stone" for integration of a freestanding Go runtime within an arbitrary environment, whether bare metal or OS supported.</p>
]]></description><pubDate>Tue, 23 Dec 2025 23:02:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=46370510</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=46370510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46370510</guid></item><item><title><![CDATA[Go 1.26 Release Candidate 1 is released]]></title><description><![CDATA[
<p>Article URL: <a href="https://go.dev/doc/go1.26">https://go.dev/doc/go1.26</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46303164">https://news.ycombinator.com/item?id=46303164</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 17 Dec 2025 18:07:18 +0000</pubDate><link>https://go.dev/doc/go1.26</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=46303164</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46303164</guid></item><item><title><![CDATA[New comment by typical182 in "Go 1.26 Release Candidate 1 is released"]]></title><description><![CDATA[
<p>Draft 1.26 release notes:<p><a href="https://tip.golang.org/doc/go1.26" rel="nofollow">https://tip.golang.org/doc/go1.26</a></p>
]]></description><pubDate>Tue, 16 Dec 2025 20:50:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=46294258</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=46294258</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46294258</guid></item><item><title><![CDATA[Go 1.26 Release Candidate 1 is released]]></title><description><![CDATA[
<p>Article URL: <a href="https://groups.google.com/g/golang-nuts/c/LcB-3xh5o68">https://groups.google.com/g/golang-nuts/c/LcB-3xh5o68</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46294257">https://news.ycombinator.com/item?id=46294257</a></p>
<p>Points: 1</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 16 Dec 2025 20:50:25 +0000</pubDate><link>https://groups.google.com/g/golang-nuts/c/LcB-3xh5o68</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=46294257</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46294257</guid></item><item><title><![CDATA[New comment by typical182 in "Go 1.25 Release Notes"]]></title><description><![CDATA[
<p>The arena experiment was essentially placed on indefinite hold:<p>> <i>The proposal to add arenas to the standard library is on indefinite hold due to concerns about API pollution.</i><p>I think the parent comment was using arenas as an example that GOEXPERIMENTs don't always move forward (like arenas), or can change while still GOEXPERIMENTs in a way that would normally not be allowed due to backward compatibility (like synctest).<p>The arena GOEXPERIMENT has not yet been dropped as of Go 1.25, but as I understand it, the plan is to remove arenas from the runtime when 'regions' are introduced, which have similar performance benefits but a much lower API impact:<p><a href="https://github.com/golang/go/discussions/70257" rel="nofollow">https://github.com/golang/go/discussions/70257</a><p>As discussed there, seeing how people actually used the arena GOEXPERIMENT influenced the 'regions' design.</p>
]]></description><pubDate>Wed, 13 Aug 2025 14:21:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=44888823</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=44888823</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44888823</guid></item><item><title><![CDATA[New comment by typical182 in "Go allocation probe"]]></title><description><![CDATA[
<p>> <i>The biggest problem is any string you pass as an argument to the fmt functions is moved onto the heap</i><p>FWIW, that's not quite correct. For example, a string literal passed as a fmt argument won't be moved to the heap.<p>The upcoming Go 1.25 release has some related improvements that help strings in more cases. See for example <a href="https://go.dev/cl/649079" rel="nofollow">https://go.dev/cl/649079</a>.</p>
]]></description><pubDate>Tue, 22 Jul 2025 18:06:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=44650890</link><dc:creator>typical182</dc:creator><comments>https://news.ycombinator.com/item?id=44650890</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44650890</guid></item></channel></rss>