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.

Reply via email to