Re: [racket-users] Re: Naming conventions for private functions
Cool. Thank you, Robby and Matthias. On Fri, Oct 13, 2017 at 9:50 PM, Robby Findlerwrote: > If you want to know what the current racket does (not what the > chez-based one does), then you can "raco make x.rkt" and then "raco > decompile x.rkt" to see what is going on. > > In the cod quoted below, no closures are allocated because all of the > functions bar, baz, and jaz are eliminated before runtime. > > The current compiler doesn't try to do anything with set!, so if you > changed the program to this one: > > #lang racket > > (define (foo.1 x) > (define (bar) x) > (set! bar bar) > (bar)) > > (define (foo.2 x) > (define (baz) 8) > (define (jaz) x) > (set! baz baz) > (set! jaz jaz) > (println (jaz)) > (baz)) > > > you will see some lambda expressions survive. > > Of course, this may not be a bad thing, depending on what the actual > application itself is doing. And it may be the case that some of those > with empty closures aren't allocated, depending on various factors. > > Robby > > > On Fri, Oct 13, 2017 at 8:19 PM, David Storrs wrote: >> On Fri, Oct 13, 2017 at 2:57 PM, Matthias Felleisen >> wrote: >>> On Oct 13, 2017, at 2:55 PM, David Storrs wrote: On Fri, Oct 13, 2017 at 2:50 PM, David Storrs wrote: > Coming from a Perl background, I've long had a convention of naming > private functions with a leading underscore, e.g. _do-the-thing. Is > there a standard Racket convention for this and, if so, what is it? Addendum: I know that I can define functions inside the function for which they are the helper, but my understanding is that if I do that then the helper function is recompiled every time the parent function is executed. (define (flurble args) (define (helper-func) ...do stuff...) (helper-func ...)) (for ((i 1)) (flurble i)) ; helper-func will be built 10,000 times, right? >>> >>> >>> No it isn’t recompiled. But the run-time may allocate a closure a second >>> time. >>> Lambda lifting and similar techniques should avoid this but not necessarily >>> in >>> the current compiler. >> >> >> (define (foo x) >> (for ((i 1)) >> (define (bar) x) >> (bar))) >> >> So bar will be allocated 10,000 times in the above? How about baz and >> jaz in the below? >> >> >> (define (foo x) >> (define (baz) 8) >> (define (jaz) x) >> (println (jaz)) >> (baz)) >> >> (for ((i 1)) >> (foo 7)) >> >> -- >> 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. -- 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.
Re: [racket-users] Multiple namespaces in Racket
On Friday, October 13, 2017 at 1:06:15 PM UTC-4, Alexis King wrote: > > At this point, though it is indisputably evil, it seems more feasible > to use some name mangling scheme than to expand to a submodule. That > would be, of course, deeply unsatisfying, so I would very much like to > have a better solution. > Maybe do undisputedly?-evil name-mangling now to get things working, then become a saint with a better solution down the road. Sometimes I don't realize how to do something the "good" way until I've traveled down the path of doing it some less than good way, then the "good" way reveals itself early one morning or late one night, when I least expect it. 30 years ago C++ had ugly name mangling, until that ugly part of C++ went away 5-10 years later. The non-mangling way did not reveal itself at first. -- 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.
Re: [racket-users] Re: Naming conventions for private functions
If you want to know what the current racket does (not what the chez-based one does), then you can "raco make x.rkt" and then "raco decompile x.rkt" to see what is going on. In the cod quoted below, no closures are allocated because all of the functions bar, baz, and jaz are eliminated before runtime. The current compiler doesn't try to do anything with set!, so if you changed the program to this one: #lang racket (define (foo.1 x) (define (bar) x) (set! bar bar) (bar)) (define (foo.2 x) (define (baz) 8) (define (jaz) x) (set! baz baz) (set! jaz jaz) (println (jaz)) (baz)) you will see some lambda expressions survive. Of course, this may not be a bad thing, depending on what the actual application itself is doing. And it may be the case that some of those with empty closures aren't allocated, depending on various factors. Robby On Fri, Oct 13, 2017 at 8:19 PM, David Storrswrote: > On Fri, Oct 13, 2017 at 2:57 PM, Matthias Felleisen > wrote: >> >>> On Oct 13, 2017, at 2:55 PM, David Storrs wrote: >>> >>> On Fri, Oct 13, 2017 at 2:50 PM, David Storrs >>> wrote: Coming from a Perl background, I've long had a convention of naming private functions with a leading underscore, e.g. _do-the-thing. Is there a standard Racket convention for this and, if so, what is it? >>> >>> Addendum: I know that I can define functions inside the function for >>> which they are the helper, but my understanding is that if I do that >>> then the helper function is recompiled every time the parent function >>> is executed. >>> >>> (define (flurble args) >>> (define (helper-func) ...do stuff...) >>> (helper-func ...)) >>> >>> (for ((i 1)) >>> (flurble i)) ; helper-func will be built 10,000 times, right? >> >> >> No it isn’t recompiled. But the run-time may allocate a closure a second >> time. >> Lambda lifting and similar techniques should avoid this but not necessarily >> in >> the current compiler. > > > (define (foo x) > (for ((i 1)) > (define (bar) x) > (bar))) > > So bar will be allocated 10,000 times in the above? How about baz and > jaz in the below? > > > (define (foo x) > (define (baz) 8) > (define (jaz) x) > (println (jaz)) > (baz)) > > (for ((i 1)) > (foo 7)) > > -- > 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. -- 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.
Re: [racket-users] Re: Naming conventions for private functions
> On Oct 13, 2017, at 9:19 PM, David Storrswrote: > > On Fri, Oct 13, 2017 at 2:57 PM, Matthias Felleisen > wrote: >> >>> On Oct 13, 2017, at 2:55 PM, David Storrs wrote: >>> >>> On Fri, Oct 13, 2017 at 2:50 PM, David Storrs >>> wrote: Coming from a Perl background, I've long had a convention of naming private functions with a leading underscore, e.g. _do-the-thing. Is there a standard Racket convention for this and, if so, what is it? >>> >>> Addendum: I know that I can define functions inside the function for >>> which they are the helper, but my understanding is that if I do that >>> then the helper function is recompiled every time the parent function >>> is executed. >>> >>> (define (flurble args) >>> (define (helper-func) ...do stuff...) >>> (helper-func ...)) >>> >>> (for ((i 1)) >>> (flurble i)) ; helper-func will be built 10,000 times, right? >> >> >> No it isn’t recompiled. But the run-time may allocate a closure a second >> time. >> Lambda lifting and similar techniques should avoid this but not necessarily >> in >> the current compiler. > > > (define (foo x) >(for ((i 1)) >(define (bar) x) >(bar))) > > So bar will be allocated 10,000 times in the above? How about baz and > jaz in the below? This kind of situation is covered by ‘lightweight closure’ conversion, which we added in the late 90s and should still be there. Note how all instances of bar are identical. No need to re-allocate. > > > (define (foo x) > (define (baz) 8) > (define (jaz) x) > (println (jaz)) > (baz)) > > (for ((i 1)) > (foo 7)) Again, baz is covered trivially. Only a whole-program analysis can confirm that foo is applied to only 7 and therefor jaz is the same closure on every call to foo. ;; - - - Note that programs can use eq? to compare closures. I am ignoring this aspect. -- 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.
Re: [racket-users] Re: Naming conventions for private functions
On Fri, Oct 13, 2017 at 2:57 PM, Matthias Felleisenwrote: > >> On Oct 13, 2017, at 2:55 PM, David Storrs wrote: >> >> On Fri, Oct 13, 2017 at 2:50 PM, David Storrs wrote: >>> Coming from a Perl background, I've long had a convention of naming >>> private functions with a leading underscore, e.g. _do-the-thing. Is >>> there a standard Racket convention for this and, if so, what is it? >> >> Addendum: I know that I can define functions inside the function for >> which they are the helper, but my understanding is that if I do that >> then the helper function is recompiled every time the parent function >> is executed. >> >> (define (flurble args) >> (define (helper-func) ...do stuff...) >> (helper-func ...)) >> >> (for ((i 1)) >> (flurble i)) ; helper-func will be built 10,000 times, right? > > > No it isn’t recompiled. But the run-time may allocate a closure a second time. > Lambda lifting and similar techniques should avoid this but not necessarily in > the current compiler. (define (foo x) (for ((i 1)) (define (bar) x) (bar))) So bar will be allocated 10,000 times in the above? How about baz and jaz in the below? (define (foo x) (define (baz) 8) (define (jaz) x) (println (jaz)) (baz)) (for ((i 1)) (foo 7)) -- 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.
Re: [racket-users] Re: Naming conventions for private functions
On Fri, Oct 13, 2017 at 2:59 PM, Robby Findlerwrote: > Also: if you just don't `provide` a function from a module, then it > cannot be used outside. No naming conventions necessary. > Sure, but the underscore helps me know at a glance what I'm looking at, whether it's safe to make a breaking change to a function, etc. > Robby > > On Fri, Oct 13, 2017 at 1:57 PM, Matthias Felleisen > wrote: >> >>> On Oct 13, 2017, at 2:55 PM, David Storrs wrote: >>> >>> On Fri, Oct 13, 2017 at 2:50 PM, David Storrs >>> wrote: Coming from a Perl background, I've long had a convention of naming private functions with a leading underscore, e.g. _do-the-thing. Is there a standard Racket convention for this and, if so, what is it? >>> >>> Addendum: I know that I can define functions inside the function for >>> which they are the helper, but my understanding is that if I do that >>> then the helper function is recompiled every time the parent function >>> is executed. >>> >>> (define (flurble args) >>> (define (helper-func) ...do stuff...) >>> (helper-func ...)) >>> >>> (for ((i 1)) >>> (flurble i)) ; helper-func will be built 10,000 times, right? >> >> >> No it isn’t recompiled. But the run-time may allocate a closure a second >> time. >> Lambda lifting and similar techniques should avoid this but not necessarily >> in >> the current compiler. >> >> -- >> 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. -- 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.
Re: [racket-users] Naming conventions for private functions
I don't think there's a convention, and I've not yet found an ideal one. Around 2000, with portable RnRS-ish Scheme absent a module system, I started using a convention that I think I took from Olin Shivers, which is to prefix non-public toplevel identifiers with `%`. (At one point, I even had a script to use this convention to take these portable files and generate dialect-specific ones, such as PLT Scheme ones with generated `provide` forms at the end.) Then, considering that sometimes these identifiers show up in error messages and debugging tracebacks, I started prefixing with `%`, followed by the the library name, followed by `:`. That's good for debugging, but makes the non-public identifiers harder to read in the code in some ways, and unpleasant to type. I have a related convention, in which a `provide` form immediately precedes any definition form that defines exported things. I should start using a `define/provide` regularly, to eliminate most of the clutter this causes. (I found that the separate big `provide` lists elsewhere just waste a lot of time, and introduce errors. There are other ways to get a summary sense of what's defined in the module.) Better tool and debugging support could help (e.g., not having to embed package name in the identifier because sufficient location is always going to be available from error messages/tracebacks/debuggers, maybe syntax coloring in an editor to distinguish exported vs. non-exported among other properties). -- 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.
[racket-users] Re: Naming conventions for private functions
Robby Findlerwrites: > Also: if you just don't `provide` a function from a module, then it > cannot be used outside. No naming conventions necessary. But the no-naming convention is necessary. :-). -- --- Eric Eide . University of Utah School of Computing http://www.cs.utah.edu/~eeide/ . +1 (801) 585-5512 voice, +1 (801) 581-5843 FAX -- 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.
Re: [racket-users] can't (require table-panel) today
Doh! Ok, it’s me. I don’t know why I assumed table-panel was included out of the box. Thank you Dmitry! Geoff Knauth (mobile)Ты > On Oct 13, 2017, at 14:59, Dmitry Pavlovwrote: > > > >> #lang racket/gui >> (require table-panel) >> >> leads to: >> >> standard-module-name-resolver: collection not found > Have you tried raco pkg install table-panel? > > Best regards, > > Dmitry > > -- > You received this message because you are subscribed to a topic in the Google > Groups "Racket Users" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/racket-users/I7mlqYEjMWA/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > racket-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- 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.
Re: [racket-users] Intro and projects inquiry
On Thu, Oct 12, 2017 at 2:27 PM Andrew Gwozdziewyczwrote: > I love seeing all of these project ideas, but I really don't think > Racket needs a "killer app." I think what it needs is the people > passionate about it building tools in it, and *using* those tools in > the work place, and sharing the experiences of using those tools more > vocally. > This line of reasoning also works in reverse. When Racket becomes more popular, people will talk about it more. There's a network effect to consider. > We need people building tools and blogging about why using Racket made > the job easier. Why would it be harder to do in Python, or Ruby? We > need straight up advocacy, and that starts with everyone in this > thread who *hasn't* done that yet. > These activities are good for hardcore developer advocacy. They are less effective at swaying casual devs who can't code themselves out of a jam. You might get some push back on [...]. Explain to them [...] > Education is important. It's also slow and expensive. In my experience, "lead by example" is a more effective starting strategy than "show them the light." Anyway. I don't think it makes sense to solve problems that you don't > have. I've made a career out of solving other people's problems. It's why I'm an expert tool maker and an awful astrophysicist. Programmers and astrophysicists need each other to remain relevant. Ideas are cheap, but it's an easy way to get people taking. And this kind of discussion can lead to truly valuable insights as we share interests, hopes, pain points, and coping mechanisms. Eric -- 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.
[racket-users] [ANN] Porting PAIP's Prolog interpreter from Common Lisp to Racket, 1st version
Hi all, I am porting the Prolog interpreter shown in Peter Norvig's classic text on AI, "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp 1st Edition", https://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/, also known as PAIP, in its chapter 11, "Logic Programming". I have just ended its first version, corresponding to section 11.2, and shared: - the code at https://github.com/promesante/paip-racket/ - the experience in https://promesante.github.io/2017/10/12/porting_paips_prolog_interpreter_from_common_lisp_to_racket/ Enhancement suggestions more than welcome. Cheers Luis M. Rosso https://promesante.github.io/ https://github.com/promesante/ -- 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.
Re: [racket-users] can't (require table-panel) today
#lang racket/gui (require table-panel) leads to: standard-module-name-resolver: collection not found Have you tried raco pkg install table-panel? Best regards, Dmitry -- 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.
Re: [racket-users] Re: Naming conventions for private functions
Also: if you just don't `provide` a function from a module, then it cannot be used outside. No naming conventions necessary. Robby On Fri, Oct 13, 2017 at 1:57 PM, Matthias Felleisenwrote: > >> On Oct 13, 2017, at 2:55 PM, David Storrs wrote: >> >> On Fri, Oct 13, 2017 at 2:50 PM, David Storrs wrote: >>> Coming from a Perl background, I've long had a convention of naming >>> private functions with a leading underscore, e.g. _do-the-thing. Is >>> there a standard Racket convention for this and, if so, what is it? >> >> Addendum: I know that I can define functions inside the function for >> which they are the helper, but my understanding is that if I do that >> then the helper function is recompiled every time the parent function >> is executed. >> >> (define (flurble args) >> (define (helper-func) ...do stuff...) >> (helper-func ...)) >> >> (for ((i 1)) >> (flurble i)) ; helper-func will be built 10,000 times, right? > > > No it isn’t recompiled. But the run-time may allocate a closure a second time. > Lambda lifting and similar techniques should avoid this but not necessarily in > the current compiler. > > -- > 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. -- 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.
[racket-users] Re: Naming conventions for private functions
On Fri, Oct 13, 2017 at 2:50 PM, David Storrswrote: > Coming from a Perl background, I've long had a convention of naming > private functions with a leading underscore, e.g. _do-the-thing. Is > there a standard Racket convention for this and, if so, what is it? Addendum: I know that I can define functions inside the function for which they are the helper, but my understanding is that if I do that then the helper function is recompiled every time the parent function is executed. (define (flurble args) (define (helper-func) ...do stuff...) (helper-func ...)) (for ((i 1)) (flurble i)) ; helper-func will be built 10,000 times, right? -- 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.
[racket-users] Naming conventions for private functions
Coming from a Perl background, I've long had a convention of naming private functions with a leading underscore, e.g. _do-the-thing. Is there a standard Racket convention for this and, if so, what is it? -- 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.
[racket-users] can't (require table-panel) today
Is it me, or is it Friday the 13th? (Or both?) #lang racket/gui (require table-panel) leads to: standard-module-name-resolver: collection not found for module path: table-panel collection: "table-panel" in collection directories: /Users/me/Library/Racket/snapshot/collects /Applications/Racket/Racket-v6.11.0.1/collects ... [165 additional linked and package directories] in: table-panel no package suggestions are available . I click on Update Catalog and I get this: get-all-pkg-details-from-catalogs: bad response from server url: https://www.cs.utah.edu/plt/snapshots/20170919-807ce8d495/catalog/pkgs-all?version=6.11.0.1 response: #f (for-loop . #(struct:srcloc # 299 2 11021 1759)) (for-loop . #(struct:srcloc # 37 4 1350 2495)) (pkg-catalog-update-local13 . #(struct:srcloc # 15 0 286 3561)) (#f . #(struct:srcloc # 397 3 17564 3019)) (for-loop . #(struct:srcloc # 90 7 3331 437)) (.../more-scheme.rkt:261:28 . #f) -- 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.
Re: [racket-users] Intro and projects inquiry
On Thu, Oct 12, 2017 at 09:07:48AM +1100, Daniel Prager wrote: > Great topic! > > Providing examples and tutorials around data analysis and visualisation in > Racket (and filling gaps and simplifying) gets my vote. The biggest problem wth almost all free software is documentation. Sometimes it's simply absent; sometimes it's there but inadequaate, obsolete, or wrong; sometimes it's just impossible to find. Even a Google search gets lost in a plethora of helpful hints posted randomly about the web so you won't find the authoritative stuff even when it exists. -- hendrik -- 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.
Re: [racket-users] Multiple namespaces in Racket
This is a cool demo! Unfortunately, I have been thinking about the problem you describe since last night, and I am still totally stumped. This is something that seems difficult or impossible to paper over with more macros because #%require and #%provide are, ultimately, given special treatment by the macroexpander (at least that is my understanding), and the `expand` subform of #%provide is not something that can be emulated as a derived concept. At this point, though it is indisputably evil, it seems more feasible to use some name mangling scheme than to expand to a submodule. That would be, of course, deeply unsatisfying, so I would very much like to have a better solution. > On Oct 12, 2017, at 6:07 PM, Alex Knauthwrote: > > I just implemented this, and this is a problem, but the `all-from-out` > form in general is an ever bigger problem, it's completely broken. > > The first strategy is to just lift the provide form into a submodule, > but `all-from-out` expects there to be a require in the *same* module, > `all-from-out` always yells at you with the error, all-from-out: no > corresponding require. > > The second strategy is to try to resolve the `all-from-out` references > in the pre-transformer using `expand-export`. However this is still > broken for `all-from-out` because > `syntax-local-module-required-identifiers` complains about "not > currently transforming module provides." > (syntax-local-transforming-module-provides? is false). All-from-out > uses syntax-local-module-required-identifiers to determine what > identifiers should be in it, and that needs to be called within a > provide-transformer, not a provide pre-transformer. > > To create a new lifted module I need to use a provide-pre-transformer, > but to resolve all-from-out's properly I need to use a > provide-transformer. Is there any way around this? > > What I have so far: > https://gist.github.com/AlexKnauth/b7d9f2e0af1c5b8e2186d6581b1f7e4d > > Alex Knauth -- 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.
Re: [racket-users] Intro and projects inquiry
In this case, I'm thinking of the unfortunate JVM error messages from Clojure. As far as I know, the main reason to suffer through Clojure's attachment to the JVM is that no other Lisp has the same level of support for web applications. The second reason may be something about performance, but we can probably close that gap with some different approaches. I'm specifically thinking of taking a shot at a libev-based server like Common Lisp's Woo for higher performance, although that would be a shot in the dark because I don't understand the details affecting server performance right now. On Fri, Oct 13, 2017, at 11:55 AM, James wrote: > > On Oct 13, 2017, at 9:44 AM, 'Royall Spence' via Racket Users wrote: > > > Since we're bikeshedding here, I think we'd benefit from having a web > > toolkit on par with Clojure's Luminus. We only need a few more packages, > > a website documenting their interoperation, and a project skeleton to > > create the same sort of experience with the benefit of better error > > messages. I've already built one of the easy pieces (dotenv), and I'm > > working on more more of them. Some of the things I'd like to include, > > like server diagnostics, are a little over my head at the moment. I > > intend to keep checking off the boxes, though, and have a > > production-ready "framework" available sometime. > > That's really good. It's a pet peeve of mine that web sites and web > tools often don't give, bury or suppress error messages. My guess is > that it started with the notion that you should suppress error messages > to make SQL injection attacks harder. I don't agree with that idea in > the first place, much less in other areas besides opportunities for code > injection. > > -- > 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. -- 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.
Re: [racket-users] Intro and projects inquiry
On Oct 13, 2017, at 9:44 AM, 'Royall Spence' via Racket Users wrote: > Since we're bikeshedding here, I think we'd benefit from having a web > toolkit on par with Clojure's Luminus. We only need a few more packages, > a website documenting their interoperation, and a project skeleton to > create the same sort of experience with the benefit of better error > messages. I've already built one of the easy pieces (dotenv), and I'm > working on more more of them. Some of the things I'd like to include, > like server diagnostics, are a little over my head at the moment. I > intend to keep checking off the boxes, though, and have a > production-ready "framework" available sometime. That's really good. It's a pet peeve of mine that web sites and web tools often don't give, bury or suppress error messages. My guess is that it started with the notion that you should suppress error messages to make SQL injection attacks harder. I don't agree with that idea in the first place, much less in other areas besides opportunities for code injection. -- 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.
Re: [racket-users] Intro and projects inquiry
In my experience, it means two seemingly opposite things that unify to create bad software. On the one hand, it's an extreme conservatism and fear of attempting new things. Don't try a new language, just keep using PHP. Don't install the new PHP version with better features, it could be risky. Don't use automated library management and deployment, we don't understand it. Don't use git, it sounds scary. On the other hand, this same attitude of underconfidence and low ambition drives the adoption of dubious tooling. We cannot possibly be smart enough to write our own application, so use this slow and confusing web framework. Google and Facebook use these heavy Javascript tools, so we'd better do that, too, on every single project. Who are we to defy the "experts" in our field? At least, that's been my experience in 10 years of web development. It's perfectly fine to make mistakes, but I can't stomach the repetition. Enough of my complaining, though. Since we're bikeshedding here, I think we'd benefit from having a web toolkit on par with Clojure's Luminus. We only need a few more packages, a website documenting their interoperation, and a project skeleton to create the same sort of experience with the benefit of better error messages. I've already built one of the easy pieces (dotenv), and I'm working on more more of them. Some of the things I'd like to include, like server diagnostics, are a little over my head at the moment. I intend to keep checking off the boxes, though, and have a production-ready "framework" available sometime. On Fri, Oct 13, 2017, at 08:25 AM, David Storrs wrote: > On Fri, Oct 13, 2017 at 2:27 AM, Eric Griffiswrote: > > On Thu, Oct 12, 2017 at 9:31 AM David Storrs wrote: > >> > > > Web dev culture is a bigger issue. > > > > Eric > > How so? > > -- > 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. -- 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.
Re: [racket-users] Intro and projects inquiry
So someone should organize a loosely connected group to port the core of Racket to the JVM: — racket — the macro system — all non-GUI libraries and provide a Clojure-style way to leverage the GUI libraries. -- 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.
Re: [racket-users] Intro and projects inquiry
On Fri, Oct 13, 2017 at 2:27 AM, Eric Griffiswrote: > On Thu, Oct 12, 2017 at 9:31 AM David Storrs wrote: >> > Web dev culture is a bigger issue. > > Eric How so? -- 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.
Re: [racket-users] Intro and projects inquiry
On Thu, Oct 12, 2017 at 9:31 AM David Storrswrote: > My suggestion would be that the single largest thing that would make > Racket take off is if it could become a replacement for Javascript. RacketScript Playground does not optimize tail calls. If it turned ES6 strict mode on, and if strict mode works as advertised, could RacketScript leverage more Racket code to some advantage? It's an interesting problem, but I doubt making Racket work better in the browser would have the desired effect. Web dev culture is a bigger issue. Eric -- 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.