<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: hzhou321</title><link>https://news.ycombinator.com/user?id=hzhou321</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 07 Jul 2026 00:05:33 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=hzhou321" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by hzhou321 in "I genuinely don't understand why some people are still bullish about LLMs"]]></title><description><![CDATA[
<p>One is a boss's view, looking for an AI to replace his employees someday. I think that is a dead end. It is just getting better to become a sophisticate, increasingly impressive but won't work.<p>One is the worker's view, looking at AI to be a powerful tool that can leverage one's productivity. I think that is looking promising.<p>I don't really care for the chat bot to give me accurate sources. I care about an AI that can provide likely places to look for sources and I'll build the tool chain to lookup and verify the sources.</p>
]]></description><pubDate>Fri, 28 Mar 2025 14:58:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=43506289</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=43506289</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43506289</guid></item><item><title><![CDATA[New comment by hzhou321 in "Generalized Macros"]]></title><description><![CDATA[
<p>> To illustrate, Rust macros are basically that. They have a substantially different syntax to normal Rust code that make it very difficult to quickly grok what is going on. It's a net negative IMO, not a positive.<p>Yeah, more like a syntax extension than macro. But I am saying that you need both. Some time you need powerful macro ability to extend the language. Sometime you just need templating to achieve the expressiveness. With LISP, I get it that you are programming all the time, never templating, right? But I guess you only appreciate templating when you use your macro system as a general purpose system . The benefit of general purpose macro systems is you only learn one tool for all languages, rather than re-learn the individual wheels. And when you judge a language, you no longer bothered by its syntactic warts because you can always fix the expressive part with your macro-layer.</p>
]]></description><pubDate>Wed, 19 Apr 2023 22:50:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=35634297</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=35634297</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35634297</guid></item><item><title><![CDATA[New comment by hzhou321 in "Generalized Macros"]]></title><description><![CDATA[
<p>M4 only do token-level macros or inline macros. M4 macros are identifier that can't be distinguished from underlying language. M4 macros does not have scopes. M4 does not have context level macros. M4 does not have full programmable ability to extend syntax.<p>I can define any macro lisp can define, just not with LISP syntax. I do not have a full AST view of the code, due to the its generality that it does not marry to any specific underlying language. But I can have extensions that is tailored to specific language and do understand the syntax. For example, the C extension can check existing functions and inject C functions. MyDef always can query and obtain the entire view of the program, and it is up to the effort in writing extensions to which degree we want macro layer to be able to parse. Embedding a AST parser for a local code block is not that difficult.<p>It's like the innerHTML thing, for me, I always find the text layer (as string) is more intuitive for me to manipulate than an AST tree. If needed, make an ad-hoc parser in Perl is often simple and sufficient, for me at least.</p>
]]></description><pubDate>Wed, 19 Apr 2023 22:39:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=35634210</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=35634210</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35634210</guid></item><item><title><![CDATA[New comment by hzhou321 in "Generalized Macros"]]></title><description><![CDATA[
<p>In another word, it (to have runtime macro expansion) is a side effect, a compromise, a wart, rather than a design goal, right?</p>
]]></description><pubDate>Wed, 19 Apr 2023 21:23:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=35633498</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=35633498</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35633498</guid></item><item><title><![CDATA[New comment by hzhou321 in "Generalized Macros"]]></title><description><![CDATA[
<p>> I think a general purpose macro language is only as useful as the average code-gen/templating language. It's just string manipulation, which can be harder to reason about than true metaprogramming ...<p>I would like you to reconsider. Predicting a program output is hard. So in order to comprehend a macro programed as code, one need run the macro in their head to predict its output, then they need comprehend that output in order to understand the code. I think that is unreasonable expectation. That's why reasonable usage of meta-programming is close to templating where programmer can reason with the generated code directly from the template. For more higher-powered macros, I argue no one will be able to reason with two-layers at the same time. So what happens is for the programmer to put on his macro hat to comprehend the macro, then simply use a good "vacabulary" (macro name) to encode his comprehension. And when he put his application programming hat, he takes the macro by an ambiguous understanding, as a vocabulary, or some one may call it as a syntax extension. Because we need put on two hats at different time, we don't need homoiconicity to make the two hats to look the same.</p>
]]></description><pubDate>Wed, 19 Apr 2023 21:22:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=35633487</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=35633487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35633487</guid></item><item><title><![CDATA[New comment by hzhou321 in "Generalized Macros"]]></title><description><![CDATA[
<p>> That being said, I think homoiconicity is actually a useful feature, but runtime macro expansion is the dangerous part.<p>Practically, why would you ever want a runtime macro expansion?</p>
]]></description><pubDate>Wed, 19 Apr 2023 21:06:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=35633334</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=35633334</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35633334</guid></item><item><title><![CDATA[New comment by hzhou321 in "Generalized Macros"]]></title><description><![CDATA[
<p>LISP has been singing homoiconicity as its feature. I lately start to think homoiconicity is really a wart. The macros are a system to program the code, while the code is a system to program the application. They are two different cognition tasks and making them nearly indistinguishable is not ideal.<p>LISP has a full-featured macro system, thus hands down beats many languages that only possess handicapped macro system or no macro system at all. It uses the same/similar language to achieve it is mere accidental. In fact, I think LISP is an under-powered programming language due to its crudeness. But it's unconstrained macro system allows it compensate the programming part to certain degree. As a result, it is not a popular language and it will never be, but it is sufficiently unique and also extremely simple that it will never die.<p>What if, we have a standalone general-purpose macro system that can be used with any programming languages, with two syntax layer that programmers can put on different hat to work on either? That's essentially how I designed MyDef. MyDef supports two forms of macros. Inline macros are using `$(name:param)` syntax. Block macros are supported using `$call blockmacroname, params`. Both are syntactically simple to grasp and distinct from hosting languages that programmers can put on different hats to comprehend. The basic macros are just text substitution, but both inline macros and block macros can be extended with (currently my choice) Perl to achieve unconstrained goals. The extension layer can access the context before or after, can set up context for code within or outside, thus achieve what lisp can but using Perl. We can extend the macros using Python or any other language as well, but it is a matter of the extent to access the macro system internals.<p>Inline macros are scoped, and block macros can define context. These are the two features that I find missing in most macros systems that I can't live without today. Here is an example:<p><pre><code>    $(set:A=global scope)
    &call open_context
        print $(A)
    print $(A)

    subcode: open_context
        set-up-context
        $(set:A=inside context)
        BLOCK # placeholder for user code
        destroy-context</code></pre></p>
]]></description><pubDate>Wed, 19 Apr 2023 19:22:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=35632197</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=35632197</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35632197</guid></item><item><title><![CDATA[New comment by hzhou321 in "The TikTok ban is a betrayal of the open internet"]]></title><description><![CDATA[
<p>The ban is not having an issue between China and US. US can do whatever to China, and only need balance potential retaliation. There is no moral debate between countries, just power play.<p>The ban is an issue between US government/politicians and US people. There are some nominal moral contract between the government and people, and the ban need to be justified and satisfied by people's moral belief, such as open internet. Without sufficient moral justification, people's trust against the government is at risk.</p>
]]></description><pubDate>Tue, 28 Mar 2023 21:39:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=35348299</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=35348299</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35348299</guid></item><item><title><![CDATA[New comment by hzhou321 in "Ask HN: Learn C in 2023?"]]></title><description><![CDATA[
<p>Since you are already familiar with other languages, I suggest just pick a tool that you use daily that is open source in C, and start hacking it.</p>
]]></description><pubDate>Fri, 23 Dec 2022 15:56:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=34107153</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=34107153</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34107153</guid></item><item><title><![CDATA[New comment by hzhou321 in "ElonJet Is Now Suspended"]]></title><description><![CDATA[
<p>Some billionaires grow integrity at some point since every thing else is just money. Some billionaires never.</p>
]]></description><pubDate>Wed, 14 Dec 2022 19:50:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=33989199</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=33989199</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33989199</guid></item><item><title><![CDATA[New comment by hzhou321 in "Everything I wish I knew when learning C"]]></title><description><![CDATA[
<p>> C specification says a program is ill-formed if any UB happens. So yes, the spec does say that compilers are allowed to assume UB doesn't happen.<p>I disagree on the logic from "ill-formed" to "assume it doesn't happen".<p>> I think you're conflating "unspecified behavior" and "undefined behavior" - the two have different meanings in the spec.<p>I admit I don't differentiate those two words. I think they are just word-play.</p>
]]></description><pubDate>Mon, 28 Nov 2022 17:43:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=33776714</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=33776714</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33776714</guid></item><item><title><![CDATA[New comment by hzhou321 in "Everything I wish I knew when learning C"]]></title><description><![CDATA[
<p>> Indeed. UB in C doesn't mean "and then the program goes off the rails", it means that the entire program execution was meaningless, and no part of the toolchain is obligated to give any guarantees whatsoever if the program is ever executed, from the very first instruction.<p>This is the greatest sin modern compiler folks committed to abuse C. C as the language never says the compiler can change the code arbitrarily due to an UB statement. It is <i>undefined</i>. Most UB code in C, while not fully defined, has an obvious part of semantics that every one understands. For example, an integer overflow, while not defined on what should be the final value, it is understood that it is an operation of updating a value. It is definitely not, e.g., an assertion on the operand because UB can't happen.<p>Think about our natural language, which is full of undefined sentences. For example, "I'll lasso the moon for you". A compiler, which is a listener's brain, may not fully understand the sentence and it is perfectly fine to ignore the sentence. But if we interpret an undefined sentence as a license to misinterpret the entire conversation, then no one would dare to speak.<p>As computing goes beyond arithmetic and the program grows in complexity, I personally believe some amount of fuzziness is the key. This current narrow view from the compiler folks (and somehow gets accepted at large) is really, IMO, a setback in the computing evolution.</p>
]]></description><pubDate>Mon, 28 Nov 2022 17:24:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=33776427</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=33776427</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33776427</guid></item><item><title><![CDATA[New comment by hzhou321 in "Robot treats 500k plants per hour with 95% less chemicals [video]"]]></title><description><![CDATA[
<p>Nice! If the robots can sustain on solar energy, even better.</p>
]]></description><pubDate>Wed, 16 Nov 2022 21:52:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=33631279</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=33631279</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33631279</guid></item><item><title><![CDATA[New comment by hzhou321 in "Adversarial policies beat professional-level Go AIs"]]></title><description><![CDATA[
<p>How silly is this.</p>
]]></description><pubDate>Thu, 03 Nov 2022 21:54:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=33458318</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=33458318</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33458318</guid></item><item><title><![CDATA[New comment by hzhou321 in "FreeBSD optimizations used by Netflix to serve video at 800Gb/s [pdf]"]]></title><description><![CDATA[
<p>What prevents linux to achieve the same bandwidth?</p>
]]></description><pubDate>Thu, 03 Nov 2022 13:53:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=33450981</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=33450981</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33450981</guid></item><item><title><![CDATA[New comment by hzhou321 in "75% of the time we spend with our kids in our lifetime will be spent by age 12"]]></title><description><![CDATA[
<p>It's not about the amount of time kids takes up in your life. It is about how kids changes your life forever. Your priority in life changes, then your life changes. I guess when kids leave us, we need relearn the life.</p>
]]></description><pubDate>Wed, 19 Oct 2022 03:50:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=33257402</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=33257402</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33257402</guid></item><item><title><![CDATA[New comment by hzhou321 in "Syntax Design (2014)"]]></title><description><![CDATA[
<p>The `infix` syntax is missing from the major items. Without infix syntax, all languages are just variations of LISP -- I guess that was all the article is about.</p>
]]></description><pubDate>Tue, 18 Oct 2022 18:14:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=33251629</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=33251629</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33251629</guid></item><item><title><![CDATA[Show HN: A CC Wrapper for -finstrument-functions]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/hzhou/mycc">https://github.com/hzhou/mycc</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=32560487">https://news.ycombinator.com/item?id=32560487</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 23 Aug 2022 04:30:56 +0000</pubDate><link>https://github.com/hzhou/mycc</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=32560487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32560487</guid></item><item><title><![CDATA[New comment by hzhou321 in "Programming breakthroughs we need"]]></title><description><![CDATA[
<p>For those who are interested, checkout MyDef - <a href="https://github.com/hzhou/MyDef" rel="nofollow">https://github.com/hzhou/MyDef</a></p>
]]></description><pubDate>Wed, 17 Aug 2022 20:04:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=32501065</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=32501065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32501065</guid></item><item><title><![CDATA[New comment by hzhou321 in "Programming breakthroughs we need"]]></title><description><![CDATA[
<p>Yes, I agree! In fact, the break through we needed is to view programming as a human cognitive operation and embrace the text, and treat manipulating text as a main component of coding. For example, I want to code<p><pre><code>     foreach item in list_A
         do_something(item)
</code></pre>
This text is the native code in the programmer's mind, and we should allow programmer to just do so. Then, in a second layer, the programmer should code up the transformer and translate that to the actual programming language, adding incidental complexity such as specific syntax and internal language representations, so that the lower level compiler can verify and consume and feedback.<p>The transformer part is super hard if we rely on automatic tools, which is just another version of a compiler. It is super tedious if we rely on human manual work, which is just how today programmers do. But if we view the transformer part as part of programming, where programmer employs tools to mold their program, then it makes sense. The programmer will be able to program the tools to avoid the tedious part but still with full flexibility to mold anyway they desire. It is still programming, but in a meta frame where text is the target.</p>
]]></description><pubDate>Wed, 17 Aug 2022 18:37:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=32500042</link><dc:creator>hzhou321</dc:creator><comments>https://news.ycombinator.com/item?id=32500042</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32500042</guid></item></channel></rss>