Héllo, # Summary
I am slowly moving to Racket as my language of choice. My goal is to port the work I've done in GNU Guile and BiwaScheme to Racket and RacketScript [0]. I'd like to create a software stack I call "mono" that is a monolithic solution for doing applications with a web GUI. By monolithic, I mean that component of the application must be in the same processus (in GNU/Linux parlance). This means that the application, as I designed it, can only scale vertically. It's only means to work on a single machine. FWIW, I'd like to cover most MVP needs on a single machine. It will require to rethink the architecture of the app to scale (which will prolly means going distributed, but there might be a middle ground). [0] https://github.com/vishesh/racketscript # Frontend Regarding the frontend side of the thing, I aiming at something like clojure "om" right now what I have is summarized in forward.scm [1]. It's 201 sloc of R6RS with some extensions to interop with javascript. I don't have an elegant solution for doing what is so called "isomorphic" and sometime even "universal" application. [1] https://github.com/amirouche/forward.scm Nowdays universal/isomorphic architectures are something useful to fix two things: 0) Speed of rendering the very first page which is silly and an early optimization. 1) SEO. Pure client side rendering is still not liked by most search engines. Here I am aiming at the next generation of crawlers which *should* (and already can) support scraping pure client side applications (via headless browsers). That said, there is workaround when working with something like forward.scm. You simply can render backend side the same thing rendered frontend side (and not share anycode if that's easier). I think that's a compromise one can make. Truly universal/isomorphic webapps are an open problem. Even Hop.js [2] doesn't do it in a nice symbiotic way. [2] http://hop.inria.fr/home/index.html Universal webapp should let the developer code in a network transparent way while taking into account: - latency, because for instance drag'n'drop can not be fully handled backend side because you want the interaction to be snappy - privileges, because for instance client side validation of data allows for a smooth UX but you can not consider that data safe when it reach the backend. - processing power available. This is a more complicated issue. That said, if you drop the latency problem. You can write a trivial framework that computes everything in the server and pay the bill! tl;dr: Simply said, I only aim at porting https://github.com/amirouche/forward.scm to racketscript. # Backend Backend side things are more blurry. What I am sure is that want an in-process database. I think it's difficult to craft a DSL that can do everything you want to do with a database because of the network. Maybe I am wrong. My initial goal was to implement something similar to datomic, but I was not sure its immutable property was useful. Now, I believe it ok. And with the help of minikanren [3] I think I can have something similar to datomic based on my previous work with wiredtiger database library [4]. By the way, do you recommend binding wiredtiger using typed racket? [3] they are other solution in racket. [4] http://hyperdev.fr/projects/wiredtiger/ That said, I am not sure it can scale as much as I want/need given racket thread model [5]. I will experiment. [5] http://docs.racket-lang.org/reference/eval-model.html#(part._thread-model) Anyway, I stumbled upon rscheme persistence [6] and though that it could change my approach of disk persistence. Also someone on the IRC channel told me about GemTalk Systems which apparently achieve transparent persistence and distribution. Are you aware of such work in racket? Can you recommend something to read regarding the subject? Is pointer swizzling a good start? [6] http://www.rscheme.org/rs/a/2005/persistence/ amz3 -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.