[{"data":1,"prerenderedAt":353},["ShallowReactive",2],{"project-8911217":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":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":44,"post_text":45,"what":46,"said":89,"maker_in_thread":218,"shape":229,"grid":233,"attempts":316,"same_week":317,"maker_shows":262,"maker_hidden":346,"reader_version":347,"card":348},"8911217","Silicon","The Silicon C++14 Web Framework","title","Show HN: The Silicon C++14 Web Framework","https:\u002F\u002Fgithub.com\u002Fmatt-42\u002Fsilicon","github.com","matt42",1421661841,2015,140,37,152,2565,6,"notable","languages","web framework","library",[24,21,25,26,27],"c++14","http api","sqlite orm","microhttpd","mixed",0,{"positive":31,"neutral":32,"mixed":33,"critical":34},7,8,1,5,21,{"design":37,"idea":39,"docs":41,"performance":42,"execution":43},{"positive":29,"critical":38},2,{"positive":40,"critical":38},3,{"positive":33,"critical":29},{"positive":38,"critical":33},{"positive":33,"critical":29},[33,29,40,29,40,29,40,40,40,29,34,29,34,33,29,40,29,40,29,40,29,29,34,29,34,34,29,33,34,33,29,40,34,33,29,29,29],null,{"problem":47,"audience":54,"pricing":45,"motivation":45,"time_to_build":45,"stack":62,"openness":86,"stage":87,"team_size":88},{"value":48,"source":49,"evidence":50},"Writing high performance C++ web APIs with less boilerplate","maker",[51],{"id":52,"by":11,"text":53},"8911919","Indeed, Silicon should be seen as a glue between low level http libraries, a message encoding format, others externals resources like databases, and your actual API. You can use…",{"value":55,"source":56,"evidence":57},"C++ developers writing web APIs","inferred",[58],{"id":59,"by":60,"text":61},"8912740","sighype","I like the concepts behind this framework, even if the '@' symbol is debatable. I think, combined with something like CodeSynthesis' ODB ORM (which apparently supports migrations…",[63,69,72,76,80],{"value":64,"source":49,"evidence":65},"C++14",[66],{"id":67,"by":11,"text":68},"8911560","You are right. I'll make it clear in the README. The preprocessing can be easy done by hand for those who want to skip the use of the preprocessor, it is actually pretty simple:…",{"value":27,"source":49,"evidence":70},[71],{"id":52,"by":11,"text":53},{"value":73,"source":49,"evidence":74},"cpp-netlib",[75],{"id":52,"by":11,"text":53},{"value":77,"source":49,"evidence":78},"mimosa",[79],{"id":52,"by":11,"text":53},{"value":81,"source":49,"evidence":82},"SQLite",[83],{"id":84,"by":11,"text":85},"8912779","I'll write more about it later, but silicon actually has a nice way to deal with databases. It currently only support sqlite, but it has: - a sqlite middleware: See the example…","open_source","beta","unknown",{"praise":90,"objections":112,"requests":147,"questions":183,"alternatives":202},[91,100,108],{"value":92,"source":93,"evidence":94},"Performance potential of a lightweight C++ web framework","commenter",[95,96],{"id":59,"by":60,"text":61},{"id":97,"by":98,"text":99},"8911693","grandalf","the point of this kind of thing is that it can allow super fast performance for critical endpoints: Suppose your app consumes a JSON api and it turns out that one or two…",{"value":101,"source":93,"evidence":102},"Modern C++ reduces verbosity, making it practical for web APIs",[103,107],{"id":104,"by":105,"text":106},"8912174","api","New features like auto and lambdas reduce C++'s verbosity to manageable levels. In many cases it's less verbose than Java.",{"id":59,"by":60,"text":61},{"value":109,"source":49,"evidence":110},"Useful sqlite and ORM middleware and CRUD support",[111],{"id":84,"by":11,"text":85},[113,128,132,136],{"value":114,"source":93,"evidence":115},"The @ preprocessor syntax is confusing and hard to maintain",[116,120,124],{"id":117,"by":118,"text":119},"8914585","tttt123","The @ definition is insane, something which would never fly in large scale projects. And who names a library function D? If the authors feels typing full meaningful function…",{"id":121,"by":122,"text":123},"8911518","vitriol83","the requirement for pre-processing makes me a bit suspicious, it's going to be a pain to interact with other parts of the toolchain, so i would hope there's a very good reason…",{"id":125,"by":126,"text":127},"8912458","BinaryIdiot","I really enjoy the C++ language but am incredibly rusty since I haven't had a job in a very long time that requires the knowledge of use of the language. I was actually thinking…",{"value":129,"source":93,"evidence":130},"Requiring a preprocessor complicates the toolchain",[131],{"id":121,"by":122,"text":123},{"value":133,"source":93,"evidence":134},"C++14 requirement is not clearly justified",[135],{"id":121,"by":122,"text":123},{"value":137,"source":93,"evidence":138},"No benchmarks and no latency numbers yet",[139,143],{"id":140,"by":141,"text":142},"8912837","erglkjahlkh","Where are the benchmarks? Seriously, I'd expect this thing to fly.",{"id":144,"by":145,"text":146},"8913477","hello_there","> I was able to serve 280k req\u002Fsecond Please don't forget to measure latency - both averages and percentiles :)",[148,158,163,170,177],{"value":149,"source":93,"evidence":150},"Add PostgreSQL support",[151,155],{"id":152,"by":153,"text":154},"8912786","Yadi","That is pretty awesome! Something for postgresql would be great. My stack heavily relies on pg and the other ORMs performance have been disappointing, I need to use something…",{"id":156,"by":153,"text":157},"8912842","you actually answered on my question on another reply. I want to make a postgres adapter and use this to retrieve the data, since my current API is written in ruby and it's a bit…",{"value":159,"source":93,"evidence":160},"Add a benchmark with latency measurements",[161,162],{"id":144,"by":145,"text":146},{"id":140,"by":141,"text":142},{"value":164,"source":93,"evidence":165},"Add a comparison with Facebook proxygen",[166],{"id":167,"by":168,"text":169},"8911685","jasode","If the author has seen Facebook proxygen[1] (another C++ http framework), a comparison to it would be helpful. At first glance, it looks like the Silicon dependency microhttpd is…",{"value":171,"source":93,"evidence":172},"Publish on biicode package manager",[173],{"id":174,"by":175,"text":176},"8911362","MordodeMaru","Pretty interesting Matt, would you consider uploading to biicode (a C++ deps manager) so that C++ programmers reuse it in there projects?",{"value":178,"source":93,"evidence":179},"More documentation beyond the README",[180],{"id":181,"by":153,"text":182},"8912745","This is so exciting! I wanna test it out right now and I have so many questions. are there any more docs than the description on Github readme? I know this sounds very n00b of…",[184,191,198],{"value":185,"source":93,"evidence":186},"What does the @ symbol do",[187],{"id":188,"by":189,"text":190},"8911321","TillE","I have to admit, I have no idea what the @ symbol does. Can anyone clarify? It can't be a macro, so I assume it's a C++14 feature I'm not aware of.",{"value":192,"source":93,"evidence":193},"Can it be done with a plain macro instead of a preprocessor",[194],{"id":195,"by":196,"text":197},"8911986","acron0","Could it not have been expressed with just a macro? EDIT: Down votes? lol",{"value":199,"source":93,"evidence":200},"Can it serve raw data as an API layer",[201],{"id":181,"by":153,"text":182},[203,207,211],{"value":204,"source":93,"evidence":205},"Facebook proxygen",[206],{"id":167,"by":168,"text":169},{"value":208,"source":93,"evidence":209},"Tree frog framework",[210],{"id":181,"by":153,"text":182},{"value":212,"source":93,"evidence":213},"ZLang preprocessor library",[214],{"id":215,"by":216,"text":217},"8912832","pfultz2","Actually using [ZLang](https:\u002F\u002Fgithub.com\u002Fpfultz2\u002FZLang), you could define them like this: ``` #define IOD_DEFINE_SYMBOL(name) iod_define_symbol(name, _##name) #define…",{"comments":219,"answered":220,"key":221},12,9,[222,223,226],{"id":67,"text":68},{"id":224,"text":225},"8912026","Here is the tranformation done by the preprocessor: https:\u002F\u002Fgist.github.com\u002Fmatt-42\u002Fa53cc0b0a8d8f1cf673f It would be really convenient to have it done by the C preprocessor, but…",{"id":227,"text":228},"8912191","#define S(name) is a bit dangerous. It would affect any C\u002FC++ function called S.",{"commenters":230,"max_depth":31,"maker_replies":219,"first_comment_mins":231,"lifespan_hours":232},22,52,24,[234,236,238,240,241,244,245,246,249,251,253,255,257,258,259,261,264,266,267,269,270,273,276,278,280,281,283,285,287,288,292,295,299,301,305,309,312],[121,29,33,235,122,29],"project\u002Fcritical\u002Fdesign",[67,29,29,237,11,33],"maker\u002Fneutral\u002Fdesign",[195,29,40,239,196,29],"project\u002Fneutral\u002Fdesign",[224,29,29,237,11,33],[242,29,40,239,243,29],"8912142","bratsche",[227,29,29,235,11,33],[215,29,40,239,216,29],[247,29,40,239,248,29],"8914305","Someone",[167,33,40,250,168,29],"project\u002Fneutral\u002Fidea",[52,33,29,252,11,33],"maker\u002Fneutral\u002Fidea",[59,38,34,254,60,29],"project\u002Fpositive\u002Fidea",[84,38,29,256,11,33],"maker\u002Fneutral\u002Fdocs",[152,38,34,254,153,29],[117,40,33,235,118,29],[260,40,29,256,11,33],"8916138",[125,262,40,263,126,29],4,"project\u002Fmixed\u002Fdesign",[265,262,29,256,11,33],"8912532",[188,34,40,239,189,29],[268,34,29,239,11,33],"8911335",[174,34,40,252,175,29],[271,34,29,272,11,33],"8911418","maker\u002Fneutral\u002Fnone",[274,34,29,275,175,29],"8912022","other\u002Fneutral\u002Fnone",[181,18,34,277,153,29],"project\u002Fpositive\u002Fdocs",[279,18,29,256,11,33],"8912799",[156,18,34,254,153,29],[140,31,34,282,141,29],"project\u002Fpositive\u002Fperformance",[284,31,29,282,11,33],"8912983",[144,31,33,286,145,29],"maker\u002Fcritical\u002Fperformance",[97,32,34,282,98,29],[289,220,33,290,291,29],"8911622","project\u002Fcritical\u002Fidea","igoldny",[293,220,29,294,11,33],"8911644","project\u002Fneutral\u002Fexecution",[296,220,40,297,298,29],"8911818","maker\u002Fneutral\u002Fexecution","malisper",[104,220,34,300,105,29],"project\u002Fpositive\u002Fexecution",[302,303,33,290,304,29],"8911349",10,"easytiger",[306,303,29,307,308,29],"8911356","commenter\u002Fneutral\u002Fnone","abique",[310,303,29,311,304,29],"8911406","commenter\u002Fcritical\u002Fnone",[313,303,29,314,315,29],"8911451","commenter\u002Fpositive\u002Fidea","matthewmacleod",[],[318,323,327,331,336,341],{"id":319,"name":320,"points":321,"category":322},"8907801","dogmedicationdb",252,"infrastructure",{"id":324,"name":325,"points":326,"category":322},"8923092","switcher",165,{"id":328,"name":329,"points":330,"category":20},"8893593","duoco.de",155,{"id":332,"name":333,"points":334,"category":335},"8893238","Timeline.com",123,"productivity",{"id":337,"name":338,"points":339,"category":340},"8918463","Griddle",122,"dev_tools",{"id":342,"name":343,"points":344,"category":345},"8923824","tld-list.com",101,"web_saas",false,"v2",{"id":349,"name":5,"line":6,"ai":346,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":29,"top":18,"kw":350,"maker":11,"domain":10,"tier":19,"attempts":29,"strip":351,"url":9,"mix":352,"praise":92,"objection":114,"sub":21},8911217,[24,21,25,26,27],"1030303330505103030300505501510351000",[31,32,33,34],1794036527445]