[{"data":1,"prerenderedAt":329},["ShallowReactive",2],{"project-14461799":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":35,"aspects":36,"strip":41,"post_text":42,"what":43,"said":97,"maker_in_thread":181,"shape":190,"grid":195,"attempts":291,"same_week":292,"maker_shows":38,"maker_hidden":321,"reader_version":322,"card":323},"14461799","“Statements and State”","The next chapter of my book on interpreters","title","Show HN: “Statements and State”, the next chapter of my book on interpreters","http:\u002F\u002Fwww.craftinginterpreters.com\u002Fstatements-and-state.html","craftinginterpreters.com","munificent",1496334888,2017,141,50,279,2242,13,"notable","learning_science","programming book","other",[24,25,26,27,28],"interpreter","compiler","lox","programming language","bytecode","loved",0.389,{"positive":32,"neutral":33,"mixed":34,"critical":34},8,5,1,15,{"docs":37,"design":40},{"positive":38,"critical":39},3,0,{"positive":34,"critical":34},[39,39,39,39,39,39,39,33,39,39,39,39,39,33,33,33,39,38,39,38,39,33,39,33,33,38,38,33,39,34,39,39,39,39,38,39,38,39,39,39],null,{"problem":44,"audience":53,"pricing":64,"motivation":69,"time_to_build":42,"stack":74,"openness":94,"stage":95,"team_size":96},{"value":45,"source":46,"evidence":47},"Teaches how to build interpreters and compilers","inferred",[48,50],{"id":49},"post",{"id":51,"by":11,"text":52},"14471113","> I'd really love to read a modern book or in-depth tutorial on creating a statically-typed functional language, with discussions on pattern matching, type inference, tail call…",{"value":54,"source":46,"evidence":55},"Programmers learning how language implementations work",[56,60],{"id":57,"by":58,"text":59},"14467234","bhrgunatha","I like this book a lot - especially making it available to read free in HTML. It's good to see practical information about parsing and grammar rather than plainly theoretical -…",{"id":61,"by":62,"text":63},"14467527","ljw1001","This is really a wonderful book. Nystrom's writing is clear and entertaining. I look forward to every new chapter.",{"value":65,"source":66,"evidence":67},"Free to read online","commenter",[68],{"id":57,"by":58,"text":59},{"value":70,"source":71,"evidence":72},"Covers how OOP languages work under the hood, which other books skip","maker",[73],{"id":51,"by":11,"text":52},[75,82,88],{"value":76,"source":66,"evidence":77},"Java",[78],{"id":79,"by":80,"text":81},"14468450","pravj","I am loving this book so far, always wanted a resource with such details and a 1:1 session like feeling. Also, to enforce an extra layer of learning, I am writing the interpreter…",{"value":83,"source":71,"evidence":84},"C",[85],{"id":86,"by":11,"text":87},"14470522","> Of course in addition to executing an AST you can also generate CODE for it... Yes! In the third part of the book [1], we'll do exactly that. The C interpreter's parser…",{"value":89,"source":71,"evidence":90},"Python build script",[91],{"id":92,"by":11,"text":93},"14472591","A pretty simple hand-cobbled-together chunk of Python: https:\u002F\u002Fgithub.com\u002Fmunificent\u002Fcraftinginterpreters\u002Fblob\u002Fmaster\u002Futil\u002Fbuild.py It's more complex than the build script[1] for…","free","beta","solo",{"praise":98,"objections":118,"requests":127,"questions":142,"alternatives":150},[99,107,114],{"value":100,"source":66,"evidence":101},"Clear, entertaining writing",[102,103],{"id":61,"by":62,"text":63},{"id":104,"by":105,"text":106},"14467984","panic","This is great writing: very clear and easy to understand! I feel that dynamic variable lookup is a mistake, though -- it's just so painful to have to wait until runtime to…",{"value":108,"source":66,"evidence":109},"Typography and layout are pleasing",[110],{"id":111,"by":112,"text":113},"14468107","_pmf_","Typography and layout is also very pleasing.",{"value":115,"source":66,"evidence":116},"Practical approach to parsing and grammar",[117],{"id":57,"by":58,"text":59},[119],{"value":120,"source":66,"evidence":121},"Dynamic variable lookup delays detecting typos until runtime",[122,123],{"id":104,"by":105,"text":106},{"id":124,"by":125,"text":126},"14468747","wtetzner","I don't think dynamic variable lookup should be required for mutual recursion. There are plenty of static languages that support mutual recursion.",[128,135],{"value":129,"source":66,"evidence":130},"Tutorial on statically-typed functional language implementation",[131],{"id":132,"by":133,"text":134},"14469984","jnbiche","I'll add my usual comment in discussions about interpreter\u002Fcompiler books: I'd really love to read a modern book or in-depth tutorial on creating a statically-typed functional…",{"value":136,"source":66,"evidence":137},"RSS feed",[138],{"id":139,"by":140,"text":141},"14469040","mrmondo","Thanks for taking your time to commit to this, I was wondering if you had an RSS feed rather than the email subscription option? I tried a few feed readers and couldn't discover…",[143],{"value":144,"source":66,"evidence":145},"Why dynamic variable lookup instead of static checking",[146,147],{"id":104,"by":105,"text":106},{"id":148,"by":11,"text":149},"14471171","Yeah, it's a... choice is the best way to put it. It has upsides and downsides. I do think supporting mutual recursion is very important. People expect it to simply work,…",[151,157,164,170,177],{"value":152,"source":66,"evidence":153},"Writing a Haskell (Write you a Haskell)",[154],{"id":155,"by":133,"text":156},"14470731","Write you a Haskell by Stephen Diehl: http:\u002F\u002Fdev.stephendiehl.com\u002Ffun\u002F",{"value":158,"source":66,"evidence":159},"Modern Compiler Implementation (Appel)",[160],{"id":161,"by":162,"text":163},"14471673","gsg","\"Modern Compiler Implementation\" isn't too bad, but it is a general purpose introductory compiler text rather than being dedicated to functional languages. It does briefly touch…",{"value":165,"source":66,"evidence":166},"Min-caml",[167],{"id":168,"by":162,"text":169},"14471740","You might find http:\u002F\u002Fesumii.github.io\u002Fmin-caml\u002Findex-e.html interesting. While not as well-presented as munificent's current effort, it does present a working functional…",{"value":171,"source":66,"evidence":172},"Essentials of Programming Languages",[173],{"id":174,"by":175,"text":176},"14475148","nv-vn","Essentials of Programming Languages doesn't cover all of this, but it's a pretty good start (at least on the interpreter side).",{"value":178,"source":66,"evidence":179},"Writing a compiler in Ruby",[180],{"id":57,"by":58,"text":59},{"comments":182,"answered":183,"key":184},11,4,[185,186,187],{"id":51,"text":52},{"id":86,"text":87},{"id":188,"text":189},"14472573","Mine too! Though some have accused me of bias in that regard...",{"commenters":191,"max_depth":192,"maker_replies":182,"first_comment_mins":193,"lifespan_hours":194},22,6,597,73,[196,198,202,203,205,207,208,209,211,215,218,221,223,225,228,232,235,236,238,240,242,245,247,249,250,251,254,257,259,261,263,266,268,271,272,275,277,281,282,286,289],[132,39,39,197,133,39],"other\u002Fneutral\u002Fnone",[199,39,39,200,201,39],"14470666","commenter\u002Fneutral\u002Fnone","burkaman",[155,39,39,197,133,39],[51,39,39,204,11,34],"maker\u002Fneutral\u002Fnone",[161,39,39,206,162,39],"commenter\u002Fneutral\u002Fdocs",[168,39,39,197,162,39],[174,39,39,197,175,39],[57,34,33,210,58,39],"project\u002Fpositive\u002Fdocs",[212,213,39,197,214,39],"14466994",2,"ChuckMcM",[216,213,39,197,217,39],"14467622","seanmcdirmid",[219,213,39,197,220,39],"14471237","dozzie",[222,213,39,197,217,39],"14473161",[86,213,39,224,11,34],"project\u002Fneutral\u002Fexecution",[226,213,33,227,214,39],"14470813","project\u002Fpositive\u002Fnone",[229,38,33,230,231,39],"14471776","maker\u002Fpositive\u002Fnone","seibelj",[233,38,33,230,234,39],"14471900","yoodenvranx",[188,38,39,197,11,34],[139,183,38,237,140,39],"project\u002Fneutral\u002Fdocs",[239,183,39,237,11,34],"14470529",[241,183,38,237,140,39],"14472824",[243,183,39,244,11,34],"14473623","project\u002Fneutral\u002Fnone",[246,183,33,230,140,39],"14480671",[248,183,39,204,11,34],"14482437",[61,33,33,210,62,39],[79,192,33,210,80,39],[252,192,38,204,253,39],"14469849","WalterGR",[104,255,38,256,105,39],7,"project\u002Fmixed\u002Fdesign",[111,255,33,258,112,39],"project\u002Fpositive\u002Fdesign",[260,255,39,204,11,34],"14471117",[124,255,34,262,125,39],"project\u002Fcritical\u002Fdesign",[264,255,39,265,105,39],"14468841","commenter\u002Fneutral\u002Fdesign",[267,255,39,265,125,39],"14468871",[269,255,39,270,11,34],"14470543","project\u002Fneutral\u002Fdesign",[148,255,39,270,11,34],[273,32,38,237,274,39],"14469195","lozzo",[276,32,39,237,11,34],"14473970",[278,279,38,237,280,39],"14471498",9,"yolo77",[92,279,39,237,11,34],[283,284,39,197,285,39],"14468326",10,"erikb",[287,284,39,197,288,39],"14469913","dmux",[290,284,39,197,285,39],"14473472",[],[293,298,302,307,312,317],{"id":294,"name":295,"points":296,"category":297},"14497295","Monica",1097,"productivity",{"id":299,"name":300,"points":301,"category":20},"14484549","findlectures",200,{"id":303,"name":304,"points":305,"category":306},"14471153","Strukt",191,"dev_tools",{"id":308,"name":309,"points":310,"category":311},"14495623","Nimiq",186,"finance_crypto",{"id":313,"name":314,"points":315,"category":316},"14477222","Pydantic",120,"languages",{"id":318,"name":319,"points":320,"category":311},"14469316","StockNerd",114,false,"v2",{"id":324,"name":5,"line":6,"ai":321,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":325,"top":18,"kw":326,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":327,"url":9,"mix":328,"praise":100,"objection":120,"sub":21},14461799,0.39,[24,25,26,27,28],"0000000500000555030305055335010000303000",[32,33,34,34],1793990959635]