eush has quit [Quit: ERC (IRC client for Emacs 26.0.50)]
soegaard has quit [Quit: soegaard]
codebam has joined #racket
sagax has joined #racket
badkins_ has joined #racket
Arcaelyx has joined #racket
jao has joined #racket
Falacer has quit [Ping timeout: 245 seconds]
pera has joined #racket
androclus has joined #racket
<androclus>
hey, all.. i am an old programmer, but new to racket, and have also played with guile and clisp a little. I love the functional languages. I've have inherited an old nodejs web game that the higher-ups want to pick up again.
<androclus>
Since the old version of their web/game program is so old (nodejs/angularjs), it will have to be completely re-written from scratch
efm has quit [Remote host closed the connection]
<androclus>
so i was considering doing the server-side in racket
<androclus>
would this make any sense?
<androclus>
how does racket's web libraries compare to nodejs? and especially when scaling, etc.?
<s455wang>
I love racket but I don't want you to get fired for choosing racket
<androclus>
any thoughts?
<androclus>
hahah
<s455wang>
For all of nodejs's shortcomings you can't beat the ecosystem and community around it
<androclus>
okay, good. well, but put it this way: they are letting me do whatever i want. if you were in that boat, what would you do?
Falacer has joined #racket
<s455wang>
with no fear of failure, I'd use racket and learn a lot
<androclus>
ok, thx. and in the "learn a lot" category, what did you have in mind? in other words, would the "learn a lot" refer more to you building up your skills in racket? or more to building up racket's web skills (i.e., filling in the holes in racket's web libraries / framework(s))?
<s455wang>
both
rain1 has quit [Quit: WeeChat 1.6]
<androclus>
ok. so in regards to the 2nd part: in your opinion, racket -- as it is now -- cannot compete (yet) with nodejs for speed/ease/organization of (server-side) web projects?
rain1 has joined #racket
<s455wang>
I would say yes but also that I haven't done a lot of racket for web
<androclus>
hmm... this was a cs project? what did it do?
<s455wang>
online IDE for editing and running C and Racket programs for a first-year CS course
<androclus>
interesting..
<s455wang>
back when I worked on it was angularjs and racket with contracts, and it's since been migrated to typescript, react, and typed racket (partially)
rain1 has quit [Client Quit]
ubLIX has quit [Ping timeout: 240 seconds]
<s455wang>
hopefully it gives you an idea of what a big racket web project looks like
rain1 has joined #racket
<androclus>
okay, so it's doing racket on the back-end, and react/typescript on the front-end (browser)?
<s455wang>
yes
<androclus>
interesting.. fun?
<s455wang>
fun :) and it works
<androclus>
good to hear!
<androclus>
and how about performance? you probably didn't do any comparisons/tests, but -- given nodejs's single-thread event-loop for handling many requests efficiently (and with callbacks) -- just off the cuff, how do you think your project would do handling many requests, compared to if it had had a nodejs back-end?
<s455wang>
Since it runs a process per-user we had to take care to reduce memory usage
aeth has joined #racket
<s455wang>
So unfortunately it's not a fair comparison
<s455wang>
fastest way to get an answer on the internet is to say something wrong and have someone correct you
<lexi-lambda>
androclus: I think for most purposes, Racket web server performance will be on par with Node.js, especially given most web servers are I/O bound
<s455wang>
so hopefully someone comes in and corrects me soon :)
ubLIX has joined #racket
efm has joined #racket
<lexi-lambda>
Racket is single-threaded at the OS level, but so is Node.js. Both can handle several requests concurrently, but not in parallel; both can be run as several processes to achieve parallelism.
<lexi-lambda>
Instead of using an event loop for concurrency, Racket uses green threads.
Falacer has quit [Ping timeout: 240 seconds]
<androclus>
s455wang: hah, true. and thanks, i will look at your project
<androclus>
lexi-lambda: thank you.
<androclus>
lexi-lambda: when racket gets chez in upcoming version, will this also speed up racket's web responsiveness, as well?
<lexi-lambda>
probably not, at the moment Racket-on-Chez does not seem to be meaningfully faster than the existing C implementation
<androclus>
interesting.. you mean in regards to racket/web only? or to all of racket? (i had read r-on-ch is several times faster..) (?)
<lexi-lambda>
One of the more important takeaways from that blog post is that the I/O system in Racket-on-Chez is not very optimized at the moment, which I would expect to especially negatively impact a web server.
<androclus>
yes, i'd read that (or, well, admittedly: skimmed it). it looks like the main benefit is actually the codebase with chez is preferred for maintenance and flexibility (?)
<lexi-lambda>
Yes, that’s right.
<androclus>
i'm trying to remember where i'd seen someone say 4-20 times speed up.. and often approaching compiled-c speeds.. maybe reddit or something..
<androclus>
but i guess opinions are a dime-a-dozen..
<lexi-lambda>
To be clear, I don’t think Racket-on-Chez performance is terrible, but I also don’t think Racket 7’s performance is terrible.
<s455wang>
Maybe you were reading about Chez's perofrmance in general?
<lexi-lambda>
Yeah, pure Chez Scheme code can be really fast, but Chez Scheme code also tends to do a lot less than Racket code.
<androclus>
that rings a bell
<androclus>
do a lot less?
<lexi-lambda>
Racket code often brings in things like the contract system, which adds a lot of indirection that just doesn’t exist in idiomatic Scheme.
<androclus>
<--- over my head ('contract system', 'indirection')..
<androclus>
but interesting..
<lexi-lambda>
The contract system is used in Racket to dynamically enforce invariants. So, for example, to add runtime checks to ensure functions are invoked with the right types of arguments.
<androclus>
gotcha. seems that would be a nice feature to have, assuredly.
baldfat has quit [Read error: Connection reset by peer]
<androclus>
on the other hand, once those checks are done, also a nice feature to exclude in production?
<lexi-lambda>
To date, the Racket contract system has not provided such a feature, though it has sometimes been requested. I think the problem is that contracts can, in theory, do more than “just” add sort of safety checks, and even then, you often want the safety checks on in case things do happen to go wrong.
<androclus>
(oh, wait.. you said, 'runtime'.. nm)
<androclus>
ok
<lexi-lambda>
Racket’s contract system is more complete than traditional runtime type check-based assertions, since it can handle things like higher-order functions or mutable data structures. But it adds some indirection through proxy objects to do so, which makes optimizing Racket code much more difficult.
<lexi-lambda>
That said, you can always opt not to use contracts in your code if you don’t want to. Plus, some contracts are more expensive than others, and simple ones tend to be pretty cheap. There’s also a contract profiler to see how much time contracts are taking in your program.
<lexi-lambda>
I don’t think the performance of contracts is a big problem, just one (of many other) challenges that make Racket more difficult than, say, Chez Scheme to make go really fast.
<androclus>
i can see it might be very nice to have those options at times..
<androclus>
yes.. i could see that.
<lexi-lambda>
If Node.js performance is acceptable to you, than Racket performance probably will be, too.
<androclus>
hey, while i have your attention: i originally liked guile a lot (and andy, of course, who is a great teacher/explainer, and is having a lot of fun with guile).. but...
<lexi-lambda>
If you need C++ speeds, then maybe less so.
<androclus>
i am wondering why GNU/linux adopted guile, which was (and still is) in a much more infant stage than racket?
<androclus>
(perhaps 'infant' is not a good word.. )
<androclus>
okay (regarding nodejs)
<lexi-lambda>
Well, one (perhaps cheeky) answer is than GNU tends to have a particularly bad case of Not Invented Here syndrome. But I think that’s not the only reason. :)
<androclus>
it's just that now, it will be 1-5 players on a single game.. but later, there may be thousands of games being played simultaneously with 1-5 players each game.
<androclus>
it just seems there is so much more "fleshed out" in racket: good devs, an open community, GREAT documentation, lots of libraries, and still open source.. etc etc etc..
<androclus>
while andy is still trying to catch up in all these areas, as well as execution speed..
<lexi-lambda>
Racket can handle concurrent requests well, and the green thread scheduler will run threads while other threads are blocked on I/O. And if you need more performance than a single core can handle, you can always just run more processes and balance requests between them.
<androclus>
(and again, i really like guile and andy!) .. it just seems there was/is so much more advantage to racket, instead of re-inventing the wheel, you know?
<androclus>
okay..
<androclus>
and how about development hours? would you put racket ahead/behind/= to nodejs in terms of development time, for a web project?
<lexi-lambda>
I don’t know. I’ve used both, and I strongly prefer Racket. I think I’m meaningfully more productive in it. But as s455wang mentioned, the Node.js ecosystem is hard to beat. If you need to do something fancy that exists in an off-the-shelf npm package, then it might be faster to use Node.
<lexi-lambda>
In any case, I don’t think you’ll be wildly more productive in either system, and I think the concrete differences in productivity probably come down to which experience/development approach you subjectively prefer.
<androclus>
yeah, and i'm new to both..
<lexi-lambda>
Wrt Guile vs. Racket, aside from the aforementioned point that GNU’s mission tends to result in reinventing wheels as a matter of course, I think there are some reasons that Guile might be preferable for their needs than Racket.
<androclus>
but already i subjectively prefer racket.. even just at a syntax level, i hate 'reading' callbacks, especially when multi-level
<lexi-lambda>
Racket is really big and complicated, it does a lot of things, and it has been used for decades as a research vehicle. Guile seems to have originally been conceived as a small scripting language that’s easy to embed.
<androclus>
yes, and andy seems to have chez as his speed benchmark target.. again, a lean system compared to all racket has in it..
laxask has quit [Ping timeout: 245 seconds]
laxask has joined #racket
<lexi-lambda>
To be sort of fair to Node.js, callbacks aren’t as necessary as they once were since the advent of promises and async/await. But it is definitely still a different model.
tilpner has quit [Quit: WeeChat 2.4]
<androclus>
is there any equivalent to promises in racket?
<lexi-lambda>
You don’t need promises in Racket because Racket has threads.
Falacer has joined #racket
<androclus>
#Yay
<androclus>
+1 for Racket, then
<lexi-lambda>
To me, the big differences between the Racket and Node web development experiences is that I find Racket a more pleasant language, at a sort of fundamental level, than I find JavaScript. More things are runtime errors instead of just silently doing the wrong thing.
ubLIX has quit [Ping timeout: 255 seconds]
<lexi-lambda>
But that is a subjective difference.
<androclus>
well, i personally share (and we know also many others also) share the distaste of silent-die
orivej has quit [Ping timeout: 240 seconds]
<androclus>
does racket/web have a 'framework', like nodejs?
<lexi-lambda>
It does. It’s the web-server package.
<lexi-lambda>
Racket also, of course, has many other nice things, such as the macro system, which I am personally very fond of. But again, many people disagree over whether or not that is actually an advantage. :)
<androclus>
well, part of what i am going to have to do server-side is to run 1 or more computer players.. and sometimes this will involve a lot of code, to figure out what move these players want to make next. in fact, their decisions might even be somewhat recursive.. so i would look forward to doing that more in racket than in js/ts
<androclus>
yes, macros.. :/
orivej has joined #racket
<androclus>
btw, i did (just this morning) start looking at that page.. but that's actually what brought me here.. questions i had after reading..
<lexi-lambda>
I think the heart of s455wang’s advice was good: if you are trying to minimize risk and aren’t familiar with any tools, go with Node; far more resources are available for it and more people are likely to know how to use it.
<androclus>
btw, do you know of any major web apps out there that are racket web-server - based?
<androclus>
or is there a list or registry kept anywhere?
<androclus>
hmm.. ok
<lexi-lambda>
I don’t know of any “major” ones, but I am also not entirely sure what qualifies as “major”.
<lexi-lambda>
I don’t think either essay is wholly right or wholly wrong, for what it’s worth, but I think it’s best to evaluate Racket as you would any other programming language. And while I do think Racket is a remarkable language, as languages go, it’s also not magic.
<androclus>
well, yes, and to be fair, javascript did make functions into first-class citizens..
<androclus>
maybe it is more the syntax i don't like.. a bit ugly.. to my eye, brackets around everything with the function name on the *inside* has become more readable
<androclus>
cleaner.. just on principle.. easier to see/read the call-tree.. i don't know..
codebam has quit [Ping timeout: 272 seconds]
ym555 has joined #racket
<lf94>
Has anyone come across lisp with lots of runtime type checking?
<lf94>
I'm looking to get into a style of programming with a very small lisp/scheme and doing this
<lexi-lambda>
What precisely do you mean by runtime type checking?
tilpner has joined #racket
<ZombieChicken>
Can anyone who is subscribed to the users@racket-lang mailing list give me an idea of how many emails have been sent over the past 24 hours?
<lexi-lambda>
ZombieChicken: Looks like about 8.
<ZombieChicken>
okay, thanks.
<ZombieChicken>
New email account and wasn't sure if it was dropping emails or not
<ZombieChicken>
yeah, I tried that but I could find any way to get it to give me mail send times to work with.
<ZombieChicken>
anyways thanks
<lexi-lambda>
I see times in the top-right corner of the messages, but maybe I see something different.
<phoenixdarkdirk>
Got a simple Pollen question for anyone that is familiar. I'm just getting started trying to build a book. I've posted a gist with the particulars. I might lose my connection here, so if possible, replies to the Gist itself would be super helpful: https://gist.github.com/bstro/a7ab051c6aa76087f94effb6f38e02e9
tilpner has quit [Remote host closed the connection]
tilpner has joined #racket
lavaflow has joined #racket
<phoenixdarkdirk>
^^^ thanks in advance!
Falacer has joined #racket
hjek has joined #racket
dmiles has quit [Ping timeout: 244 seconds]
orivej has joined #racket
logicmoo has joined #racket
amz3 has quit [Ping timeout: 245 seconds]
badkins_ has joined #racket
Fernando-Basso has joined #racket
Falacer has quit [Ping timeout: 240 seconds]
<greghendershott>
ZombieChicken: Not sure exactly, I think about 5 to 10
<greghendershott>
Oops, thought I was scrolled to the end. That wasn't recent.
<ZombieChicken>
greghendershott: Always nice to have something resembling confirmation in any instance. Thanks
tilpner has quit [Quit: WeeChat 2.4]
tilpner has joined #racket
efm has quit [Ping timeout: 255 seconds]
efm has joined #racket
Sgeo_ has quit [Read error: Connection reset by peer]
pierpal has quit [Ping timeout: 244 seconds]
Sgeo has joined #racket
mario-goulart has quit [Read error: Connection reset by peer]
mario-goulart has joined #racket
hjek has quit [Quit: Leaving.]
hjek has joined #racket
hjek has quit [Client Quit]
laxask is now known as sudden
Arcaelyx has quit [Ping timeout: 250 seconds]
Arcaelyx has joined #racket
badkins_ has quit [Ping timeout: 250 seconds]
lavaflow has quit [Ping timeout: 245 seconds]
androclus has quit [Remote host closed the connection]
paroneayea has joined #racket
dustyweb has quit [Ping timeout: 250 seconds]
lavaflow has joined #racket
tfb has quit [Ping timeout: 250 seconds]
tfb has joined #racket
orivej has quit [Ping timeout: 255 seconds]
amz3 has joined #racket
badkins_ has joined #racket
paroneayea has quit [Read error: Connection reset by peer]