<story><title>SQLite internals: How the most-used database works</title><url>https://www.compileralchemy.com/books/sqlite-internals/</url></story><parent_chain><item><author>red_admiral</author><text>I love how the SQLite author is so committed to the quality of his tools that he _wrote his own text editor_ as part of the project.&lt;p&gt;In about 99% of cases, for 99% of people, this is the wrong thing to do - but DRH pulled it off.&lt;p&gt;On the &amp;quot;why use flex&amp;#x2F;yacc ... when you can roll your own&amp;quot;, I think the tradeoff is: if you have a deep understanding of theory of parsing and parser generators, then it&amp;#x27;s actually less mental effort for you to write your own from scratch, than it would be to learn the exact syntax and quirks and possibly bugs of someone else&amp;#x27;s implementation. Or to find out that some feature that&amp;#x27;s easy to implement from scratch, doesn&amp;#x27;t exist in the library.&lt;p&gt;I wonder, do we teach &amp;quot;classical&amp;quot; parsing that well anymore, in a way that could create the next generation&amp;#x27;s DRH?</text></item></parent_chain><comment><author>srcreigh</author><text>Every UWaterloo CS student has to take CS241 (2nd year class, 4 months after learning C). Each student must write tokenizer and parser by hand. The full assignments include about 8 programs in binary and MIPS assembly, a MIPS assembler including support for labels, a scanner for subset of C, SLR(1) parsing, type checking, code gen including pointers and dynamic memory allocation.&lt;p&gt;In my day there was a unit on compiler optimization, with a code size contest. Constant propagation, register allocation, dead code elimination. Now it seems they replaced that with a section involving writing a loader for a ELF-like file format in assembly language&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;student.cs.uwaterloo.ca&amp;#x2F;~cs241&amp;#x2F;assignments&amp;#x2F;&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;student.cs.uwaterloo.ca&amp;#x2F;~cs241&amp;#x2F;assignments&amp;#x2F;&lt;/a&gt;</text></comment>
<story><title>SQLite internals: How the most-used database works</title><url>https://www.compileralchemy.com/books/sqlite-internals/</url></story><parent_chain><item><author>red_admiral</author><text>I love how the SQLite author is so committed to the quality of his tools that he _wrote his own text editor_ as part of the project.&lt;p&gt;In about 99% of cases, for 99% of people, this is the wrong thing to do - but DRH pulled it off.&lt;p&gt;On the &amp;quot;why use flex&amp;#x2F;yacc ... when you can roll your own&amp;quot;, I think the tradeoff is: if you have a deep understanding of theory of parsing and parser generators, then it&amp;#x27;s actually less mental effort for you to write your own from scratch, than it would be to learn the exact syntax and quirks and possibly bugs of someone else&amp;#x27;s implementation. Or to find out that some feature that&amp;#x27;s easy to implement from scratch, doesn&amp;#x27;t exist in the library.&lt;p&gt;I wonder, do we teach &amp;quot;classical&amp;quot; parsing that well anymore, in a way that could create the next generation&amp;#x27;s DRH?</text></item></parent_chain><comment><author>kuwoze</author><text>&amp;gt; if you have a deep understanding of theory of parsing and parser generators&lt;p&gt;No deepness needed, the only thing you need to know is recursion.&lt;p&gt;Also SQL is even better than that because every query is it&amp;#x27;s own statement, so the parsing is dead simple.
I totally get why he did it this way.</text></comment>