[{"data":1,"prerenderedAt":313},["ShallowReactive",2],{"project-29305643":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":46,"what":47,"said":84,"maker_in_thread":186,"shape":194,"grid":198,"attempts":270,"same_week":277,"maker_shows":31,"maker_hidden":306,"reader_version":307,"card":308},"29305643","Repl (CheerpX demo)","Run Python, Ruby, Node.js, C++, Lua in the Browser via x86 to WASM JIT","title","Show HN: Run Python, Ruby, Node.js, C++, Lua in the Browser via x86 to WASM JIT","https:\u002F\u002Frepl.leaningtech.com\u002F?python3","repl.leaningtech.com","apignotti",1637584305,2021,171,31,279,2533,12,"notable","dev_tools","browser-based language repl","web_app",[24,25,26,27],"run python in browser","x86 to wasm","browser repl","cheerpx","debated",0.02,{"positive":31,"neutral":32,"mixed":33,"critical":34},6,4,2,5,17,{"execution":37,"idea":39,"performance":40,"privacy":42,"design":43},{"positive":38,"critical":33},1,{"positive":32,"critical":38},{"positive":41,"critical":41},0,{"positive":41,"critical":38},{"positive":38,"critical":38},[34,41,34,34,45,41,41,41,41,41,41,34,41,45,41,45,38,38,34,41,34,38,41,38,45,45,41,41,38,45,41],3,null,{"problem":48,"audience":46,"pricing":46,"motivation":62,"time_to_build":46,"stack":68,"openness":81,"stage":82,"team_size":83},{"value":49,"source":50,"evidence":51},"Running programming languages and Linux tools in the browser without a server","maker",[52,56,59],{"id":53,"by":54,"text":55},"29306496","eatonphil","This is awesome! Thanks for providing more details (was a bit hard to notice your medium post at first) [0]. For folks here interested in doing this kind of thing (one example is…",{"id":57,"by":11,"text":58},"29307407","The point of this technology is generality. It is theoretically possible, given enough work, run Python directly in Wasm. The effort would be, though, Python specific and you…",{"id":60,"by":11,"text":61},"29311687","Any disk block which is used or modified is stored locally into an IndexedDB instance. You can find more info in the accompanying blog post:…",{"value":63,"source":50,"evidence":64},"Demonstrate the CheerpX technology and gauge interest in the use case",[65],{"id":66,"by":11,"text":67},"29307736","CheerpX is really not just limited to REPLs, this demo was intended to showcase the technology and to measure the public interest for this specific use case. We don't plan to…",[69,73,77],{"value":70,"source":50,"evidence":71},"WebAssembly",[72],{"id":57,"by":11,"text":58},{"value":74,"source":50,"evidence":75},"x86 emulation (CheerpX)",[76],{"id":57,"by":11,"text":58},{"value":78,"source":50,"evidence":79},"IndexedDB",[80],{"id":60,"by":11,"text":61},"unknown","launched","company",{"praise":85,"objections":102,"requests":138,"questions":154,"alternatives":166},[86],{"value":87,"source":88,"evidence":89},"Impressive technology and a fun demo","commenter",[90,94,98],{"id":91,"by":92,"text":93},"29306610","syrusakbary","This is quite impressive. I would love to see if we can have something similar that doesn't require JS at all, so we can execute x86 programs server-side just using Wasm…",{"id":95,"by":96,"text":97},"29311787","EMM_386","Very impressive stuff. Even after 20 years of developing, I still have trouble wrapping my mind about the complexities involved here. If anyone hasn't read the blog post about…",{"id":99,"by":100,"text":101},"29310735","kzrdude","Oh, that's fun. You're right, I went straight for luajit and typed in some praise for Mike Pall. Everyone is weird..",[103,114,128],{"value":104,"source":88,"evidence":105},"Broken or crashing in some browsers (Firefox hangs, rendering issues)",[106,110],{"id":107,"by":108,"text":109},"29306702","lbhdc","This isn't working for me in firefox. The tab hangs, then crashes.",{"id":111,"by":112,"text":113},"29308999","the_duke","It loads fine for me, but has severe rendering issues. There is no text, just weird, colored diagonal lines.",{"value":115,"source":88,"evidence":116},"No mobile browser support and Safari lacks SharedArrayBuffer",[117,121,125],{"id":118,"by":119,"text":120},"29314671","ngcc_hk","No mobile version of chrome, Firefox etc though",{"id":122,"by":123,"text":124},"29308681","miohtama","Hopefully Safari will support this on one day.",{"id":126,"by":11,"text":127},"29308728","The blocking feature is SharedArrayBuffer, but it should become available in the not-too-far future.",{"value":129,"source":88,"evidence":130},"Security: no permission checks in the filesystem",[131,135],{"id":132,"by":133,"text":134},"29310868","throwawayninja","I would like to register the security issue: \"import os; os.system('cat \u002Fetc\u002Fshadow')\" demonstrates that without a kernel to check permissions (and without a user ID to be…",{"id":136,"by":11,"text":137},"29311034","Oh no! You have pwned a non-existing cloud VM :-) More seriously though, you are right. The current implementation of the Linux syscalls interface does not enforce permissions…",[139,146],{"value":140,"source":88,"evidence":141},"Add more languages and alternative REPLs like bpython or ipython",[142],{"id":143,"by":144,"text":145},"29307613","dec0dedab0de","If anyone else was confused and was too embarrassed to say it out loud, I was stubbornly typing exit() to try the other languages before I actually read the menu. You have to…",{"value":147,"source":88,"evidence":148},"Open source the CheerpX emulator",[149,150],{"id":143,"by":144,"text":145},{"id":151,"by":152,"text":153},"29312337","ntauthority","It's a shame that even the underlying compiler tech seems to be proprietary and intended to be commercially licensed once 'finished'. I feel like a lot of creativity (and…",[155,162],{"value":156,"source":88,"evidence":157},"Where are files stored after reload",[158],{"id":159,"by":160,"text":161},"29311541","badsectoracula","This is neat. I actually managed to run Bash and a custom executable (a 32bit compiled version of my LIL interpreter - that i compiled under 86box running Caldera OpenLinux from…",{"value":163,"source":88,"evidence":164},"Could this run x86 programs server-side without JS",[165],{"id":91,"by":92,"text":93},[167,178,182],{"value":168,"source":88,"evidence":169},"Pyodide (CPython ported to Wasm)",[170,174],{"id":171,"by":172,"text":173},"29307833","AkshitGarg","> given enough work, run Python directly in Wasm It is already possible! See https:\u002F\u002Fgithub.com\u002Fpyodide\u002Fpyodide",{"id":175,"by":176,"text":177},"29309680","azakai","> It is theoretically possible, given enough work, run Python directly in Wasm. To be fair that's not just theoretical, the Pyodide project does exactly that:…",{"value":179,"source":88,"evidence":180},"Brython, Klipse and other JS language implementations",[181],{"id":53,"by":54,"text":55},{"value":183,"source":88,"evidence":184},"v86 x86 emulator",[185],{"id":91,"by":92,"text":93},{"comments":187,"answered":45,"key":188},7,[189,190,191],{"id":60,"text":61},{"id":57,"text":58},{"id":192,"text":193},"29309997","As pointed out by another user, I was actually referring to compiling Python _directly_ to Wasm. Porting the C++ _implementation_ to Wasm is obviously possible.",{"commenters":195,"max_depth":34,"maker_replies":187,"first_comment_mins":196,"lifespan_hours":197},20,106,16,[199,201,203,205,208,212,214,216,220,222,223,225,226,228,231,235,237,239,240,242,243,244,246,247,250,254,257,259,263,266,268],[159,41,34,200,160,41],"project\u002Fpositive\u002Fexecution",[60,41,41,202,11,38],"maker\u002Fneutral\u002Fdocs",[53,38,34,204,54,41],"project\u002Fpositive\u002Fidea",[206,38,34,204,207,41],"29306762","sere_lt",[209,33,45,210,211,41],"29307315","project\u002Fmixed\u002Fperformance","bruce343434",[57,33,41,213,11,38],"project\u002Fneutral\u002Fidea",[171,33,41,215,172,41],"commenter\u002Fneutral\u002Fidea",[217,33,41,218,219,41],"29308471","commenter\u002Fneutral\u002Fnone","tyingq",[175,33,41,221,176,41],"commenter\u002Fneutral\u002Fperformance",[192,33,41,213,11,38],[224,33,41,215,176,41],"29310630",[91,45,34,204,92,41],[227,45,41,213,11,38],"29306678",[229,45,45,230,144,41],"29306847","project\u002Fneutral\u002Fprivacy",[232,45,41,233,234,41],"29306945","other\u002Fneutral\u002Fprivacy","jcun4128",[236,45,45,213,92,41],"29307027",[107,32,38,238,108,41],"project\u002Fcritical\u002Fexecution",[111,32,38,238,112,41],[143,34,34,241,144,41],"project\u002Fpositive\u002Fdesign",[66,34,41,213,11,38],[95,31,34,204,96,41],[132,187,38,245,133,41],"project\u002Fcritical\u002Fprivacy",[136,187,41,230,11,38],[151,248,38,249,152,41],8,"project\u002Fcritical\u002Fidea",[251,252,45,253,100,41],"29308521",9,"project\u002Fmixed\u002Fexecution",[255,252,45,256,207,41],"29310089","project\u002Fneutral\u002Fexecution",[99,252,41,258,100,41],"other\u002Fneutral\u002Fnone",[260,261,41,258,262,41],"29312392",10,"laserlight",[118,264,38,265,119,41],11,"project\u002Fcritical\u002Fdesign",[122,18,45,267,123,41],"project\u002Fneutral\u002Fnone",[126,18,41,269,11,38],"project\u002Fneutral\u002Fperformance",[271,276],{"id":272,"t":273,"points":274,"comments":275},"25646022",1609858005,88,27,{"id":4,"t":12,"points":14,"comments":15},[278,283,288,293,298,301],{"id":279,"name":280,"points":281,"category":282},"29278180","Pony",693,"consumer_social",{"id":284,"name":285,"points":286,"category":287},"29288618","Cleanvoice",221,"creative",{"id":289,"name":290,"points":291,"category":292},"29329610","Ory Kratos",107,"security_privacy",{"id":294,"name":295,"points":296,"category":297},"29284296","WildCard",101,"languages",{"id":299,"name":300,"points":274,"category":20},"29321748","Tamagui",{"id":302,"name":303,"points":304,"category":305},"29313350","Retrocomputing with Clash",80,"learning_science",false,"v2",{"id":309,"name":5,"line":6,"ai":306,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":29,"top":18,"kw":310,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":311,"url":9,"mix":312,"praise":87,"objection":104,"sub":21},29305643,[24,25,26,27],"5055300000050303115051013300130",[31,32,33,34],1794036613393]