@anmolagarwal4453 has joined the channel
Is there a rule that determines which Northwestern snapshots are kept for a relatively long time? Or, more to the point, is there one from the last few days that’s likely to be retained longer than the others?
While iterating over a sequence with for and related, is there a way to break out of the for form and return a single arbitrary value (imperative-style), such as #f ? I know of #:break and #:final but those return a partial sequence and not a single chosen value.
Sometimes you can make #:break/#:final do what you want, but, in general, you can use a continuation: (let/ec return
(for ([i (in-naturals)])
(return #f)
(error "won't get here")))
thanks! Yes indeed, that’s what I’ve been using but I’ll need to translate my code into languages without continuations. I guess I’ll have to rewrite as a named let :cry:
Maybe you can generalize your for loop to use for/fold ? In that case, you could return anything. A potential problem could be that you need to return a value for each accumulator if you use several (I think), but I guess most loops will use just one accumulator.
> but I’ll need to translate my code into languages without continuations. Maybe you can translate the let/ec to exception (assuming the target language supports exception).
Indeed, that’s a good idea
Sometimes for/or or for/and are a good choice for breaking early.
I’m trying to require a bunch of modules in an adjacent directory from the current one — you need to go up one directory, and then down into a different one. I’m trying to use require with relative-in , but I think I’m barking up the wrong tree there. I’m basically looking for something like
(require (in-directory "../tests/" (file "foo.rkt") (file "bar.rkt") ...)) The idea is that the presence of my fictional in-directory would basically just prepend "../tests/" to each of the paths afterwards. Does the relative-in form work like that, and I’m just misusing it? Or perhaps such functionality is just missing.
@michaelbychko has joined the channel
For the life of me, I cannot find out what relative-in actually does. With files a/{b,c}.rkt, I cannot get any variation of (require (relative-in "a" "b.rkt" "c.rkt")) to work. And I cant get expand-import to show what’s going on, so I can’t figure out how to “inspect” it. I just get errors about b & c not found in the current directory (not in a)
I think multi-in can do this, but it often ends up confusing me.
@jesse697 Reading the docs on relative-in it seems to be the right construct. Does it work, if you leave out file ?
@soegaard2 unfortunately I still get the error: tests/data.rkt:4:22: relative-in: bad module path
at: "../src/"
in: (relative-in "../src/" "types.rkt" "tokenize.rkt" "tokens.rkt")
Wait a minute … A module-path identifies a module, either a root module or a submodule that is declared lexically within another module. So "../src/" is not a module path.
I think you need more parentheses—seriously, around the sub-paths.
From the docs: (require (multi-in "utils" ("math.rkt" "matrix.rkt")))
“I think you need more parentheses” <== this lol
ah, multi-in; I missed that, thanks
wait I need racket/require?
that works — thank you! (seems kinda ugly to have to require racket/require, but so it goes
Although #lang racket (require racket/require) may seem redundant, it’s a good hint to the optimizer that, much like cowbell, you want more racket and more require.
Seriously it is annoying to need to require that, and, do so before your other requires. That details feels a little un-Rackety? But, it does de-noise the rest of the require, so on balance it’s nice.
I often set up a library or #lang with a “standard library” for a given project, particularly including <https://docs.racket-lang.org/adjutor/Stable.html#%28form._%28%28lib._adjutor%2Fmain..rkt%29.require-provide%29%29|my >require-provide<https://docs.racket-lang.org/adjutor/Stable.html#%28form.%28%28lib._adjutor%2Fmain..rkt%29.require-provide%29%29| macro>, so everywhere else I can avoid noise in my requires. But, while it does have <https://docs.racket-lang.org/adjutor/Stable.html#%28form.%28%28lib._adjutor%2Fmain..rkt%29.require-provide%29%29|a >multi<https://docs.racket-lang.org/adjutor/Stable.html#%28form.%28%28lib._adjutor%2Fmain..rkt%29._require-provide%29%29| subform>, note that it’s in the unstable section. As I mentioned, I tend to get confused by multi-in doing IIRC the Cartesian product of its clauses: I’m not sure my implementation is right, and I’m even less convinced that faithfully recreating the semantics of multi-in is really what I want to do.
Hi All. I need to be reminding of how my info.rkt files need to look like. I have extended the set of Cairo bindings in racket/draw and now want to make a multi package where the implementation is in cairo-lib and the tests are in cairo-test.
But … when I use (require cairo) in the tests, I am told that cairo/main.rkt is not to be found. It’s supposed to find cairo-lib/main.rkt , but I need something in info.rkt to make it work.
What?
@mflatt Would it be better to move the bindings in “bindings.rkt” to racket/draw/unsafe/cairo ?
https://github.com/soegaard/cairo/blob/main/cairo-lib/bindings.rkt
If you want cairo-main content to be in the immediate cairo collection, then include (define collection "cairo") in cairo-main/info.rkt.
I have no strong opinion. It’s nice for racket/draw to have only things that it needs, but it’s also nice to have Cairo things together. I lean weakly toward the status quo.
I see that you have that already.
You’re using something like <https://github.com/soegaard/cairo?path=cairo-lib> as the source for the cairo-lib package?
btw, how did you install the package? Did you add info.rkt after package installation or edited the collection field?
I tested in the terminal with: GitHub % raco pkg update cairo/
Haven’t submitted the package to the package server yet.
Let’s keep the status quo then.
Not sure why it was an pkg update command. I cloned the repo and this works: raco pkg install --name cairo-lib ./cairo-lib/
Can you run the tests too?
I think you want to create a cairo package that implies cairo-lib and cairo-test.
Yes but not quite: cairo-test/test3.rkt:14:62: bitmap%: unbound identifier
in: bitmap%
and yes I also manually installed cairo-test
I added cairo/info.rkt: #lang info
(define collection 'multi)
(define deps '("cairo-lib" "cairo-test"))
(define implies '("cairo-lib" "cairo-test"))
(define pkg-desc "Bindings for the 2d graphics library Cairo mathing the C api.")
(define pkg-authors '(soegaard))
btw, the common case I see is that the pointer package implies the -lib library and the -doc library, while the -test library is not installed automatically
Nope - I am still missing something. Installing cairo using the package manager in DrRacket still leads the same problem. (That (require cairo) fails.)
How about removing all cairo packages and re-install them again?
I did that indirectly by using a newer version of DrRacket than the one I use in the terminal.
Not sure why that is relevant. I think the collection information is only inspected at package installation time and will never be checked again.
I am not following. Cairo wasn’t installed for the version of DrRacket that I used to test (from the package server). In the terminal (using an older version), I used pkg update which removes the old package first, then installs again.
Just in case, I entered something incorrectly:
Okay, I didn’t know you are going through the package server. My point is that I doubt whether raco pkg update in the top-level directory would’ve worked, because it is now there different libraries in cairo/cairo, cairo/cairo-lib and cairo/cairo-test.
I don’t know what package raco pkg update removed and the package it installs. Installing in the top-level directory is different from installing in the three subdirectories.
Ah! I think, I am missing a directory. I need cairo-lib/cairo and not simply cairo-lib
If the collection is "cairo", then there’s no need for the extra library. If the collection is 'multi, then you need a directory cairo-lib/cairo
Plus, the collection information isn’t updated unless you remove and re-install the library
Yeah, it is multi.
The file on github is still "cairo" and not 'multi — could be why it works for me.
Wait - which info.rkt are we talking about :wink:
I’m looking at cairo-lib/info.rkt because that file defines how Rackets looks for cairo/main
Okay, that’s currently: #lang info
(define collection "cairo")
(define deps '("base"))
(define build-deps '())
(define pkg-desc "Bindings for the 2d graphics library Cairo mathing the C api.")
(define pkg-authors '(soegaard))
(define version "1.0")
(define test-responsibles '((all <mailto:jensaxel@soegaard.net\|jensaxel@soegaard.net>)))
The one in cairo/info.rkt is: #lang info
(define collection 'multi)
(define deps '("cairo-lib" "cairo-test"))
(define implies '("cairo-lib" "cairo-test"))
(define pkg-desc "Bindings for the 2d graphics library Cairo mathing the C api.")
(define pkg-authors '(soegaard))
In this case, the files ./cairo-lib will be placed in the cairo collection
When I currently clone the repo and run raco pkg install inside <repo>/cairo-lib, I need to use (require cairo/cairo/main) to import the library
If there are previous package installations and info.rkt just get updated, I suspect the old configuration is interfering with the new info.rkt
I was trying to mimic the organization of errortrace: https://github.com/racket/errortrace/tree/master/errortrace-lib
errortrace-lib has collection 'multi in <repo>/errortrace-lib
Ah!
Nope. I’ll postpone my experiments till tomorrow.
And I think you need to register multiple entries on the package server, each pointing to the right subdirectory on GitHub like what errortrace does
[May 31 17:01:04]$ raco pkg install -j 1 cairo
Resolved "cairo" via file://<HOME>/universe/cairo/loclogs/
The following uninstalled packages are listed as dependencies of cairo:
cairo-lib
cairo-test
Would you like to install these dependencies? [Y/n/a/c/?]
00: Resolved "cairo-lib" via file://<HOME>/universe/cairo/loclogs/
Resolved "cairo-test" via file://<HOME>/universe/cairo/loclogs/
The following uninstalled packages were listed as dependencies
and they were installed:
dependencies of cairo:
cairo-lib
cairo-test
...
raco setup: in <pkgs>/cairo-test/tests/cairo
cairo-test/tests/cairo/test3.rkt:14:62: bitmap%: unbound identifier
in: bitmap%
compilation context...:
<HOME>/universe/cairo/cairo-test/tests/cairo/test3.rkt
location...:
cairo-test/tests/cairo/test3.rkt:14:62
context...:
withenv:~/universe/cairo
[May 31 17:01:41]$ racket
Welcome to Racket v8.0.0.10 [cs].
> (require cairo)
> ^D
withenv:~/universe/cairo
[May 31 17:01:48]$ racket -l- tests/cairo/test
'(1 16 0)
"1.16.0"
......
(object:bitmap% ...)
ImageSurface: expected either a bitmap or both width and height with an optional format
context...:
(I setup a local catalog to test things out)
Thanks! Ignore test3.rkt.