<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: efferifick</title><link>https://news.ycombinator.com/user?id=efferifick</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 18 Apr 2026 10:47:49 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=efferifick" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by efferifick in "Catgrad: A categorical deep learning compiler"]]></title><description><![CDATA[
<p>> Among other things, this means you can "plug your own language" into the syntax library to get a "free" autodiff algorithm.<p>Hello, as a compiler engineer I am interested in this area. Can you expand a little bit more? How would I be able to plug in my own language for example?<p>> So for example, you could write a program, then write an x86-specific optimization for one function which you can then prove correct with respect to the more abstract program specification.<p>So, what you are saying is that catgrad alllows me to write a program and then also plug in a compiler pass? I.e., the application author can also be the compiler developer?</p>
]]></description><pubDate>Thu, 06 Feb 2025 00:59:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=42957628</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=42957628</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42957628</guid></item><item><title><![CDATA[New comment by efferifick in "Bend: a high-level language that runs on GPUs (via HVM2)"]]></title><description><![CDATA[
<p>Thank you for sharing!</p>
]]></description><pubDate>Fri, 17 May 2024 12:06:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=40388993</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=40388993</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40388993</guid></item><item><title><![CDATA[New comment by efferifick in "Dataflow Analyses and Compiler Optimizations That Use Them, for Free"]]></title><description><![CDATA[
<p>Damn, I am being nerd-sniped here :)<p>One thing is that you can think of static analysis as building facts about the program. You can for example start by assuming nothing and then adding facts about the program. And you need to iteratively propagate these facts from one line of code to the next. But you can also start by assuming the universe and removing facts from this universe.<p>Some classes of program analysis are safe to stop early. For example, if I have a static analysis that tries to find the target of virtual calls (also known as a devirtualization), you can stop early after a time out. Not finding the target just implies a missed optimization.<p>There are some other classes of program analysis that are not safe until the algorithm finishes. For example, if you have to prove that two variables do not alias each other, you cannot stop until you have all possible points-to sets and verify that for each of those two variables, their points-to sets do not overlap.<p>So, given the above restriction, the first class (early termination) is perhaps more desirable and throwing more compute time would yield a better approximation. For the second one, it wouldn't.<p>Another thing to keep in mind is that most of these data flow frameworks are not easily parallelized. The only paper I've read (but I haven't kept up with these avenue of research) that implemented a control flow analysis in the GPU is the following:<p>* Prabhu, Tarun, et al. "EigenCFA: Accelerating flow analysis with GPUs." ACM SIGPLAN Notices 46.1 (2011): 511-522.<p>I'm sure people are working on it. (I should mention that there are some program analyses written in Datalog and Datalog can be parallelized, but I think this is a processor based parallelization and not a GPU one).<p>The third thing is that when you say whether we are limited by algorithms or compute, I think it is important to note that it is impossible to find all possible facts *precisely* about a program without running it. There is some relation between static program analysis and the halting problem. We want to be able to guarantee termination of our static program analysis and some facts are just unobtainable without running. However, there is not just static program analyses, but also dynamic program analyses which can analyze a program as it is running. An example of a dynamic program analysis can be value profiling. Imagine that you have a conditional and for 99% of the time, the conditional is false. With a virtual machine, you can add some instrumentation to find out the probability distribution of this conditional and then generate code without this condition, optimize the code, and only if the condition is false then run a less optimized version of the code with an additional penalty. Some virtual machines already do this for types and values. Type profiling and value profiling.<p>One last thing, when you say a meaningful performance boost, it depends on your code. If your code can be folded away completely at compile time, then yes, we could just generate the solution at compile time and that's it. But if it doesn't or parts of it cannot be folded away / the facts cannot be used to optimize the code, then no matter how much you search, you cannot optimize it statically.<p>Compilers are awesome :)<p>As an addendum, it might be desirable in the future to have a repository of analyzed code. Compilers right now are re-analyzing code on every single compile and not sharing their results across the web. It is a fantasy of mine to have a repository that maps some code with equivalent representations and every time one does a local compile it explores a new area and adds it to the repository. Essentially, each time you compile the code, it explores new potential optimizations and all of them get stored online.</p>
]]></description><pubDate>Sun, 21 Apr 2024 18:32:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=40108028</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=40108028</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40108028</guid></item><item><title><![CDATA[New comment by efferifick in "Dataflow Analyses and Compiler Optimizations That Use Them, for Free"]]></title><description><![CDATA[
<p>I am not sure why you mention LLM, the post mentions LLVM. Second, you can have different optimization options with different tradeoffs in compile-time and run-time. Third, even if the default and only options distributed with clang are too compile-time intensive, the good news is that this is open source and you could argue against it, or fork and maintain your own compile-time run-time tradeoff compiler along with other people who also want that behaviour. I don't see any benefit of arguing against research. Having new techniques to improve compilers is not a zero sum game.</p>
]]></description><pubDate>Sun, 21 Apr 2024 13:50:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=40105797</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=40105797</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40105797</guid></item><item><title><![CDATA[New comment by efferifick in "Dataflow Analyses and Compiler Optimizations That Use Them, for Free"]]></title><description><![CDATA[
<p>This post and the Hydra paper reminds me a lot of Ruler and Enumo.<p><pre><code>  * Nandi, Chandrakana, et al. "Rewrite rule inference using equality saturation." Proceedings of the ACM on Programming Languages 5.OOPSLA (2021): 1-28.
  * Pal, Anjali, et al. "Equality Saturation Theory Exploration à la Carte." Proceedings of the ACM on Programming Languages 7.OOPSLA2 (2023): 1034-1062.
</code></pre>
I will need to read more about both of these techniques along with Synthesizing Abstract Transformers.<p>Thanks for sharing! Really exciting stuff!</p>
]]></description><pubDate>Sun, 21 Apr 2024 13:24:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=40105602</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=40105602</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40105602</guid></item><item><title><![CDATA[New comment by efferifick in "Dataflow Analyses and Compiler Optimizations That Use Them, for Free"]]></title><description><![CDATA[
<p>The order goes from simpler to more complex data flow analysis frameworks. These frameworks allow you to encode dataflow problems and solve them.<p><pre><code>  * Kam, John B., and Jeffrey D. Ullman. "Monotone data flow analysis frameworks." Acta informatica 7.3 (1977): 305-317.
  * Reps, Thomas, Susan Horwitz, and Mooly Sagiv. "Precise interprocedural dataflow analysis via graph reachability." Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. 1995.
  * Sagiv, Mooly, Thomas Reps, and Susan Horwitz. "Precise interprocedural dataflow analysis with applications to constant propagation." TAPSOFT'95: Theory and Practice of Software Development: 6th International Joint Conference CAAP/FASE Aarhus, Denmark, May 22–26, 1995 Proceedings 20. Springer Berlin Heidelberg, 1995.
  * Reps, Thomas, et al. "Weighted pushdown systems and their application to interprocedural dataflow analysis." Science of Computer Programming 58.1-2 (2005): 206-263.
  * Späth, Johannes, Karim Ali, and Eric Bodden. "Context-, flow-, and field-sensitive data-flow analysis using synchronized pushdown systems." Proceedings of the ACM on Programming Languages 3.POPL (2019): 1-29.
</code></pre>
Other areas that may be interesting to look at:<p><pre><code>  * Points-to Analysis
  * Abstract Interpretation
  * On demand dataflow analyses</code></pre></p>
]]></description><pubDate>Sun, 21 Apr 2024 12:57:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=40105397</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=40105397</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40105397</guid></item><item><title><![CDATA[New comment by efferifick in "Coz: Causal Profiling"]]></title><description><![CDATA[
<p>I've been a big fan of Emery's research. Coz is one tool that I am always wanting to use, but I haven't had the chance to do so.<p>Check his other research. Some of it is highly accessible via youtube videos. I recommend watching / reading:<p><pre><code>  * Stabilizer
  * Mesh
  * Scalene</code></pre></p>
]]></description><pubDate>Sat, 20 Apr 2024 16:11:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=40098389</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=40098389</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40098389</guid></item><item><title><![CDATA[New comment by efferifick in "Find Legal Moves in Brass Birmingham with Datalog"]]></title><description><![CDATA[
<p>I recommend `egglog` which is Datalog + Equality Saturation. It has python bindings and has allowed me to optimize programs in a custom programming language.<p><a href="https://egg-smol-python.readthedocs.io/en/latest/" rel="nofollow noreferrer">https://egg-smol-python.readthedocs.io/en/latest/</a></p>
]]></description><pubDate>Tue, 21 Nov 2023 23:13:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=38371926</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=38371926</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38371926</guid></item><item><title><![CDATA[New comment by efferifick in "Ask HN: What do you want to see in a systems programming language?"]]></title><description><![CDATA[
<p>I will be in the minority here, but:<p>Native integration with Datalog.<p>Many times, I find myself working on a program and I realize that what I need is a database. But having a database, even sqlite3 or Berkely DB, would be an overkill. If I could just express my data and the relationships between them, then I would be able to query what I need in an efficient way.</p>
]]></description><pubDate>Fri, 17 Nov 2023 13:15:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=38303048</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=38303048</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38303048</guid></item><item><title><![CDATA[New comment by efferifick in "Python Is a Compiled Language"]]></title><description><![CDATA[
<p>I think a lot of people in the comments are hung up on defining compiler as "taking a source language and producing a binary". I personally know Eddie and I agree with his points. (Even though his title is a bit provocative and contradicts one of the points in the article "A language is not inherently compiled or interpreted; whether a language is compiled or interpreted (or both!) is an implementation detail.")<p>I perhaps have not had a long professional life working with compilers (5+ years), but to me the definition of "compiles to binary" is too restrictive. The main things I care for in my work are:<p>1. To be able to perform some sort of static analysis on the program
2. To be able to transform the program representation<p>To other commenters: in Python, we have two program representations. The human readable string representation and the bytecode representation. The syntactical errors are a kind of static analysis. To me, the maps between the Python string representation and the bytecode representation and the classes of errors we can catch without running the program is far more interesting than pigeon-holing Python in the "compiled" or "interpreted" hole.</p>
]]></description><pubDate>Thu, 26 Oct 2023 01:38:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=38020687</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=38020687</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38020687</guid></item><item><title><![CDATA[New comment by efferifick in "Quantum winter is coming"]]></title><description><![CDATA[
<p>> Spanish Catalan architect Antoni Gaudí disliked drawings and prefered to explore some of his designs — such as the unfinished Church of Colònia Güell and the Sagrada Família — using scale models made of chains or weighted strings. It was long known that an optimal arch follows an inverted catenary curve, i.e., an upside-down hanging chain. Gaudí's upside-down physical models took him years to build but gave him more flexibility to explore organic designs, since every adjustment would immediately trigger the "physical recomputation" of optimal arches. He would turn the model upright by the way of a mirror placed underneath or by taking photographs.<p><a href="http://dataphys.org/list/gaudis-hanging-chain-models/" rel="nofollow">http://dataphys.org/list/gaudis-hanging-chain-models/</a></p>
]]></description><pubDate>Sat, 05 Nov 2022 21:15:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=33485855</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=33485855</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33485855</guid></item><item><title><![CDATA[New comment by efferifick in "DarkForestSim: A Netlogo Simulation of the Dark Forest Hypothesis"]]></title><description><![CDATA[
<p>I was suggesting a simpler solution: just merge the two civs into one. This would be equivalent to having only one general.</p>
]]></description><pubDate>Mon, 17 Oct 2022 20:57:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=33239428</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=33239428</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33239428</guid></item><item><title><![CDATA[New comment by efferifick in "DarkForestSim: A Netlogo Simulation of the Dark Forest Hypothesis"]]></title><description><![CDATA[
<p>Shouldn't there be the possibility for civilizations to join forces?</p>
]]></description><pubDate>Sun, 16 Oct 2022 23:52:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=33228300</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=33228300</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33228300</guid></item><item><title><![CDATA[New comment by efferifick in "The dark side of Graph Neural Networks"]]></title><description><![CDATA[
<p>Mmm... maybe I'm mistaken. Thanks for the opportunity to reflect a bit more about this. I was remembering this video [0] which talks about Graph Embeddings. In the video, the speaker talks specifically about node classification. Assuming the classes are target functions, this could potentially be used for speculative devirtualization.<p>Definitely not an expert, just excited to have more tools on which to work with graph data!<p>[0] Graph Embeddings - Neo4J. Talk by Alicia Frame. <a href="https://www.youtube.com/watch?v=oQPCxwmBiWo" rel="nofollow">https://www.youtube.com/watch?v=oQPCxwmBiWo</a></p>
]]></description><pubDate>Wed, 29 Jun 2022 16:44:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=31922603</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=31922603</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31922603</guid></item><item><title><![CDATA[New comment by efferifick in "The dark side of Graph Neural Networks"]]></title><description><![CDATA[
<p>I am really interested in GNN in the context of compilers.<p>* Predicting the color of a node in a graph, could be used for example speculative devirtualization.<p>* Predicting edges weight could give us a better estimate of hot basic blocks statically.<p>* Running performance experiments is as easy as running the benchmark and introducing some metric of performance which you can give back to the GNN to learn from.<p>Imagine also for debugging and IDEs. I haven't played with copilot, but I imagine that something like guessing the graph based on node labels and on some edges is feasible using GNN? This means that the IDE could try to match the name of your variables, the control flow, and the name of the function to other known functions and could potentially point out differences. Potentially giving us a way to fix logic errors, or better algos. E.g., "Mmm... it looks like you are implementing your own bubble sort from scratch. Would you like to click here and use <insert better sort>."<p>I am not an expert on GNN, but if anyone has resources for someone to learn more about the state of the art of GNNs (a link to a literature review or something similar) do let me know.</p>
]]></description><pubDate>Wed, 29 Jun 2022 16:08:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=31922116</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=31922116</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31922116</guid></item><item><title><![CDATA[New comment by efferifick in "Snowman native code to C/C++ decompiler for x86/x86_64/ARM"]]></title><description><![CDATA[
<p>This is awesome! Thanks for sharing!</p>
]]></description><pubDate>Sat, 23 Apr 2022 06:02:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=31131821</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=31131821</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31131821</guid></item><item><title><![CDATA[New comment by efferifick in "Snowman native code to C/C++ decompiler for x86/x86_64/ARM"]]></title><description><![CDATA[
<p>Yes, but the problem is learning through the graph data. I.e., it is not a well-structured problem like an image which will always have a certain size in pixels. Coming from a compiler background I am genuinely excited about the research on learning how to label nodes and edges in graphs, but I know little about the challenges in the ML side to bring this kind of technology into reality.</p>
]]></description><pubDate>Fri, 22 Apr 2022 15:36:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=31122925</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=31122925</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31122925</guid></item><item><title><![CDATA[New comment by efferifick in "Snowman native code to C/C++ decompiler for x86/x86_64/ARM"]]></title><description><![CDATA[
<p>Something very similar: a "decompiler" that decompiles minified javascript and guesses variables and functions: <a href="http://www.jsnice.org/" rel="nofollow">http://www.jsnice.org/</a></p>
]]></description><pubDate>Fri, 22 Apr 2022 15:33:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=31122887</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=31122887</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31122887</guid></item><item><title><![CDATA[New comment by efferifick in "Pupils Reveal ‘Aphantasia’ – The Absence of Visual Imagination"]]></title><description><![CDATA[
<p>This reminds me a little of the Voight-Kampff test.</p>
]]></description><pubDate>Fri, 22 Apr 2022 15:13:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=31122593</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=31122593</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31122593</guid></item><item><title><![CDATA[New comment by efferifick in "Men Are Creating AI Girlfriends and Then Verbally Abusing Them"]]></title><description><![CDATA[
<p>Relevant comic: <a href="https://believermag.com/technofeelia-vol4/" rel="nofollow">https://believermag.com/technofeelia-vol4/</a></p>
]]></description><pubDate>Tue, 18 Jan 2022 22:12:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=29986779</link><dc:creator>efferifick</dc:creator><comments>https://news.ycombinator.com/item?id=29986779</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29986779</guid></item></channel></rss>