dddddd has quit [Remote host closed the connection]
FreeFull has quit [Quit: Goodnight LambdaComplex]
meepdeew has quit [Remote host closed the connection]
badkins has quit [Remote host closed the connection]
Sgeo__ has joined #racket
Sgeo_ has quit [Ping timeout: 244 seconds]
<zenspider>
lexi-lambda: any reading suggestions in the haskell space on how (and where) to force eager evaluation? I'm doing AoC day 19 and my racket code runs in 1/10th the time of my haskell version (interpreted).
<lexi-lambda>
No, I don’t think I have any specific recommendations, sorry.
<zenspider>
My profile output _I think_ says that the lazy parsing is kicking my butt. I was trying to force an eager parse to a vector of lambdas and then allow lazy evaluation of the rest but ... gah. the thing is a mess.
<lexi-lambda>
Though, wait, you’re running the Haskell version interpreted?
<zenspider>
yeah. both racket and haskell compile down to similar compiled run times
<zenspider>
but I suspect that since my haskell version is so much worse interpreted that I'm still doing stuff "wrong"
<lexi-lambda>
I don’t think GHC optimizes interpreted code, so I’d expect the performance of interpreted code to be bogus.
<zenspider>
versus racket's interpreted code? I'd figure they'd at least be the same order of magnitude
<lexi-lambda>
Haskell is not performant without an optimizing compiler.
<lexi-lambda>
And Racket has a JIT!
<zenspider>
did you do any of AoC this year?
<zenspider>
(in any language)
<lexi-lambda>
I didn’t, no… I’ve never done it past the first couple days.
<lexi-lambda>
Oh, wait, are you thinking that running Racket code without running `raco make` first runs it interpreted? I don’t think that’s true… IIUC running `racket foo.rkt` without running `raco make foo.rkt` first just compiles it on-demand in-memory… but it could be more complicated than that.
<zenspider>
ah... sure. in-memory... yes. As long as it is doing the work each time. I don't really care beyond that. I figure that runhaskell and racket CAN be considered fairly equivalent at that point.
<zenspider>
anyhow... I don't know why the haskell code is running the way it is. I tried BangPatterns and a couple other things...seq? to try to force the parse to be done eagerly. I figure there must be some way to structure the code in a way that lends itself to it better.
<zenspider>
all I know is that #haskell-beginners and the functional programming slack have not been helpful as far as code reviews or optimization suggestions go...
<zenspider>
If you aren't talking category theory... you get close to zilch
notzmv has joined #racket
pierpal has quit [Quit: Poof]
pierpal has joined #racket
endformationage has quit [Quit: WeeChat 2.3]
libertyprime has quit [Ping timeout: 268 seconds]
libertyprime has joined #racket
<lexi-lambda>
I don’t think `runhaskell` and `racket` are really analogous.
<lexi-lambda>
Haskell is lazy. You need a strictness analyzer to get decent performance out of a lazy programming language. Running `runhaskell` does not do strictness analysis, AFAIK, so you could end up with a program with different asymptotics than the optimized program.
jsomedon has joined #racket
<lexi-lambda>
I don’t think the performance results of `runhaskell` mean anything.
rnmhdn has joined #racket
buyfn has joined #racket
ZombieChicken has quit [Ping timeout: 256 seconds]
meepdeew has joined #racket
buyfn has quit [Ping timeout: 250 seconds]
_whitelogger has joined #racket
pie_ has quit [Remote host closed the connection]
pie_ has quit [Remote host closed the connection]
pie_ has joined #racket
dustyweb has quit [Remote host closed the connection]
buyfn has joined #racket
keep_learning has quit [Quit: Ping timeout (120 seconds)]
keep_learning has quit [Quit: Ping timeout (120 seconds)]
keep_learning has joined #racket
keep_learning has quit [Client Quit]
meepdeew has quit [Remote host closed the connection]
keep_learning has joined #racket
keep_learning has quit [Client Quit]
ym has quit [Ping timeout: 250 seconds]
ym has quit [Ping timeout: 250 seconds]
_whitelogger has joined #racket
buyfn has quit [Quit: buyfn]
badkins has joined #racket
badkins has quit [Ping timeout: 250 seconds]
keep_learning has joined #racket
keep_learning has quit [Remote host closed the connection]
keep_learning has joined #racket
keep_learning has quit [Remote host closed the connection]
keep_learning has joined #racket
<bremner>
lexi-lambda: thanks for syntax-parse hint.
Sgeo_ has joined #racket
Sgeo__ has quit [Ping timeout: 272 seconds]
keep_learning_M has quit [Quit: Leaving]
tilpner has joined #racket
tilpner has quit [Ping timeout: 245 seconds]
mzan has joined #racket
tilpner has joined #racket
libertyprime has quit [Ping timeout: 268 seconds]
Sgeo__ has joined #racket
Sgeo_ has quit [Ping timeout: 240 seconds]
buyfn has joined #racket
pie_ has quit [Ping timeout: 250 seconds]
tilpner has quit [Ping timeout: 246 seconds]
tilpner has joined #racket
libertyprime has joined #racket
fmnt has joined #racket
Sgeo_ has joined #racket
Sgeo__ has quit [Ping timeout: 246 seconds]
iyzsong has joined #racket
buyfn has quit [Quit: buyfn]
buyfn has joined #racket
tilpner has quit [Ping timeout: 246 seconds]
_whitelogger has joined #racket
libertyprime has quit [Ping timeout: 246 seconds]
dddddd has joined #racket
pierpal has quit [Quit: Poof]
pierpal has joined #racket
badkins has joined #racket
_whitelogger has joined #racket
Sgeo__ has joined #racket
Sgeo_ has quit [Ping timeout: 244 seconds]
audriu has quit [Read error: Connection reset by peer]
mahmudov has quit [Ping timeout: 245 seconds]
iyzsong has quit [Ping timeout: 252 seconds]
sleepnap has joined #racket
evhan has quit [Ping timeout: 240 seconds]
evhan has joined #racket
Sgeo_ has joined #racket
Sgeo__ has quit [Ping timeout: 250 seconds]
jao has joined #racket
zenspider has quit [Read error: Connection reset by peer]
zenspider_ has joined #racket
dbmikus has joined #racket
ZombieChicken has joined #racket
pierpal has quit [Quit: Poof]
pierpal has joined #racket
jao has quit [Ping timeout: 245 seconds]
tilpner has joined #racket
orivej has quit [Ping timeout: 268 seconds]
Sgeo__ has joined #racket
Sgeo_ has quit [Ping timeout: 246 seconds]
Sgeo_ has joined #racket
Sgeo__ has quit [Ping timeout: 245 seconds]
quipa has joined #racket
badkins has quit [Remote host closed the connection]
tilpner has quit [Quit: WeeChat 2.3]
orivej has joined #racket
pierpal has quit [Quit: Poof]
pierpal has joined #racket
tilpner has joined #racket
tilpner has quit [Quit: WeeChat 2.3]
tilpner has joined #racket
mzan has left #racket [#racket]
badkins has joined #racket
badkins_ has joined #racket
badkins has quit [Ping timeout: 250 seconds]
orivej has quit [Ping timeout: 250 seconds]
sauvin has quit [Read error: Connection reset by peer]
jsomedon has quit [Quit: jsomedon]
Sgeo__ has joined #racket
FreeFull has joined #racket
Sgeo_ has quit [Ping timeout: 244 seconds]
Sgeo_ has joined #racket
Sgeo__ has quit [Ping timeout: 244 seconds]
orivej has joined #racket
quipa has quit [Remote host closed the connection]
quipa has joined #racket
dbmikus has quit [Ping timeout: 268 seconds]
quipa has quit [Excess Flood]
quipa has joined #racket
quipa has quit [Read error: Connection reset by peer]
dbmikus has joined #racket
pierpal has quit [Quit: Poof]
pierpal has joined #racket
orivej has quit [Ping timeout: 245 seconds]
<badkins_>
I'm using the gregor package. The documentation discusses the conflict between the date struct in racket/base and gregor. I'm curious why there is no error when requiring gregor and using the date in gregor.
<badkins_>
In other words, it appears that (require gregor) silently replaces the built-in date struct.
badkins_ is now known as badkins
pie__ has joined #racket
rnmhdn has quit [Ping timeout: 272 seconds]
pie___ has joined #racket
libertyprime has joined #racket
pie__ has quit [Ping timeout: 252 seconds]
endformationage has joined #racket
<greghendershott>
badkins: requires are allowed to shadow bindings provided by a #lang
<badkins>
Interesting. I wonder why that is the case vs. two require statements importing the same symbol.
<greghendershott>
badkins: `date` is provided by `racket/base` IIRC so you get it via `#lang racket` or even just `#lang racket/base`.
<badkins>
Yes, I know. It seems #lang is treated differently than require. I would expect an error though. I suppose in this particular case, it is convenient, but I'd be willing to sacrifice convenience for explicitness.
<badkins>
i.e. I'd be fine with having to prefix the gregor date
hjek has joined #racket
<greghendershott>
I'm trying to find the justification in the Racket docs but can't seem to right now.
<greghendershott>
I think the idea is that a #lang or module lang is supposed to supply initial bindings that you can easily shadow.
<greghendershott>
Although I guess that's not really explaining "why"
<badkins>
Makes sense. I can see pros/cons either way. I didn't realize that normal defines will also shadow, so I think it makes sense then that a require would.
<greghendershott>
One practical point: require has an `except-in` or `rename-in`
<greghendershott>
But there isn't for a lang
<greghendershott>
I understand, I think it surprised me, too. But long ago so now I take it for granted. :)
<greghendershott>
When you do realize this, of course you can do things like require `racket/date` to be explicit, and then you'd get an error
<jcowan>
having a require overwrite bindings from another require would be very bad
<jcowan>
it can potentially break the existing procedures from the first require, silently
<greghendershott>
jcowan: Yes I think we all agree about that. But module lang bindings are different.
<greghendershott>
(I mean, why are they different, was the question.)
<jcowan>
ISTM it would have the same problem
<badkins>
I'm still a relative newbie, but it seems to me that the second require wouldn't break the first required lib because the first required lib wouldn't be referring to the symbols in the second required lib.
<badkins>
i.e. the 2nd would shadow the 1st in *my* code, but not in the 1st's code
<badkins>
For example, if I (define (+ a b) (- a b)), I wouldn't expect any built-in Racket code that uses + to break.
<jcowan>
R5RS only guarantees that breaking + will not break standard Scheme procedures that use +; no guarantees are made for user code that uses +
<rain1>
but code that uses + has already resolved the value and no longer cares about the symbol +
fmnt has left #racket [#racket]
<rain1>
or maybe that's not true
<badkins>
I just did a simple test and required a module that exports foo, and foo calls bar. I then required foo and shadowed bar - this had no effect on foo.
<badkins>
Which seems intuitive, at least to me.
Fernando-Basso has joined #racket
hjek has quit [Quit: Leaving.]
Arcaelyx has joined #racket
libertyp1ime has joined #racket
sagax has joined #racket
orivej has joined #racket
orivej has quit [Ping timeout: 246 seconds]
hjek has joined #racket
hjek has quit [Quit: Leaving.]
jao has joined #racket
dddddd has quit [Ping timeout: 244 seconds]
sleepnap has left #racket [#racket]
dbmikus has quit [Quit: WeeChat 2.3]
badkins has quit [Ping timeout: 245 seconds]
evdubs_ has quit [Remote host closed the connection]
evdubs_ has joined #racket
dddddd has joined #racket
badkins has joined #racket
orivej has joined #racket
Sgeo__ has joined #racket
Sgeo_ has quit [Ping timeout: 250 seconds]
Fernando-Basso has quit [Remote host closed the connection]
pie___ has quit [Ping timeout: 260 seconds]
Sgeo_ has joined #racket
Sgeo__ has quit [Ping timeout: 246 seconds]
hjek has joined #racket
pie___ has joined #racket
hjek has quit [Client Quit]
pie___ has quit [Remote host closed the connection]