[HN Gopher] Racket v8.0
___________________________________________________________________
Racket v8.0
Author : azhenley
Score : 255 points
Date : 2021-02-14 03:46 UTC (19 hours ago)
(HTM) web link (blog.racket-lang.org)
(TXT) w3m dump (blog.racket-lang.org)
| mark_l_watson wrote:
| I tried the new release of Racket v8.0 (Chez backend) built for
| Apple M1 Silicon this morning. I have a version of my Common Lisp
| Knowledge Graph Navigator written in Racket. Very fast both on
| boot up (for the IDE) and running my program. Thanks to the
| Racket (Scheme) team!
| ph2082 wrote:
| Anyone using Racket in production?
| shakow wrote:
| I don't know if it counts as "production", but I quite often
| use it to develop small GUI utilities in academic settings.
|
| Performances are bad, but when playing with relatively small
| datasets, the portable (Linux/macOS/Windows) GUI, the huge
| stdlib, the ease of deployment of fat binaries and the
| pleasantness of the language in itself make for a very
| seductive tool.
| alexott wrote:
| ~20 years ago, we developed the commercial software using the
| MzScheme - it was quite successful project in ex-USSR, I'm not
| involved into development since 2007, but Scheme was used until
| at least 2012-2013th, maybe it's still used.
| slaymaker1907 wrote:
| I'm currently working on a TSQL parser in Racket because I want
| to do some code analysis on a few huge stored proc files (some
| of which are over 30k lines of code). I didn't want to use
| existing parsers because the trees they produce are monstrous
| [1,2]. Tried doing some fancy grep work, but it was giving me
| way too many false matches and wasn't as sound as I would have
| liked.
|
| I could use any language with reasonable parsing tools, but I
| like how flexible Racket is about it. Currently using
| megaparsack[3], but there are many different parsing tools
| available depending on your needs. Also, once you have done
| parsing, there are lots of convenient ways to manipulate the
| parse trees into whatever shape you need.
|
| I also think Racket has a lot of tooling that would make it
| great for large code bases.
|
| -It has great offline docs (scribble) which don't force you to
| use some comment based system like JavaDoc.
|
| -It has a very powerful and fast contract system that can be
| attached either at definition time like most languages or only
| at module boundaries.
|
| - While it has a macro system, it has a really good macro
| debugger (it lets you view how the code is iteratively expanded
| with options to show/hide the expansion of various macros).
| Since even non-hygienic macros deal with syntax objects and not
| just datums, macros don't even screw up error messages since
| line/column info is preserved!
|
| - You compile to executables unlike most scripting languages.
|
| - You can write some code with types and some with them, but
| unlike say TypeScript the boundary between typed and untyped
| code is sound since contracts are used to verify these
| boundaries.
|
| - A lot of the time you don't even need types because most
| names (i.e. variables and functions) are verified at compile
| time (to be more specific, at macro expansion time).
|
| - It has very aggressive sandboxing tools that let you control
| not only what names are visible to some untrusted code, but
| also control how much memory it uses without creating a new
| process.
|
| - Safer global variables in the form of parameterize. Very
| convenient for stuff like when you need to temporarily change
| the stdout for a single call.
|
| [1]: https://github.com/datacamp/antlr-
| tsql/blob/master/antlr_tsq... [2]:
| https://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlser...
| [3]: https://github.com/lexi-lambda/megaparsack
| noisy_boy wrote:
| Interesting coincidence - I'm working on a parser that parses
| the AST produced by JSqlParser[0] for a create view statement
| to generate mapping between the columns of a view and the
| columns of its underlying table. It is an interesting example
| of having to use the visitor pattern[1].
|
| [0]: https://github.com/JSQLParser/JSqlParser [1]:
| https://en.wikipedia.org/wiki/Visitor_pattern
| soegaard wrote:
| Yes.
|
| https://github.com/racket/racket/wiki/Organizations-using-Ra...
|
| Besides of course all the Racket pages/systems (home page,
| package system, continuous integration system etc).
|
| E-commerce is also possible.
|
| https://defn.io/2019/08/20/racket-ecommerce/ "matchacha.ro, a
| small e-commerce site selling Japanese green tea"
|
| If you are into quilting, then https://www.youpatch.com/ uses
| Racket.
| cpach wrote:
| All of Hacker News is written in the Arc language, which runs
| on top of Racket.
| vasergen wrote:
| Another question, how racket compares to clojure for production
| developmen?
| brabel wrote:
| Congratulations! It's been a long time waiting!
|
| I've wanted to develop desktop UIs that look professional and are
| lightweight, and I wonder if Racket, with its built-in UI
| framework, could be a good choice.
|
| I did try it once but the hello world app was already really
| heavy (200MB of RAM instantly taken , if I remember correctly),
| but maybe I did something wrong (debug mode perhaps??)
|
| Can I package a Racket app with a MacOS installer and sign it?
| How about Windows and Linux?
| cnasc wrote:
| Generally speaking, for smaller size you should use #lang
| racket/base and then only import the extras you need.
| Decabytes wrote:
| I've been using Racket on the rpi3 (BC not chez as it's not in
| the repos yet) and the resource issue is exacerbated (as well
| as the start up times). I asked about reducing the start up
| time and resources load recently on the subreddit, but other
| than doing things like this below I've found nothing.
| #lang racket/base (require racket/draw pict
| racket/gui/base racket/class) ;; avoiding pulling in
| to many extra deps so have to redefine some useful functions
| (define (first lst) (car lst)) (define
| (second lst) (cadr lst)) (define (third lst)
| (caddr lst)) (define (false? val) (not
| val))
|
| If anyone cares the code is here
| https://gitlab.com/diegocrespo/imgmac/-/tree/master. For
| context this is a paint program that currently creates a
| 1024x748 window with a canvas, 31 buttons, and a file menu. It
| uses 280M of memory on my desktop running Manjaro, which isn't
| the greatest. In my testing, typed racket also increases the
| memory uses.
|
| Thankfully after creating a basic frame and canvas, the jumps
| haven't been as big, but I could easily see the program going
| to 400M by the time it's done. I will download Racket 8.0 today
| and see how it performs
|
| I think once Gerbil scheme becomes more mature I'll do more
| work in that. It's faster, smaller, and borrows a lot of things
| from Racket that I like.
|
| *EDIT* I installed racket 8.0 (super easy and removed the old
| installation as well!) and compiled my program. Compiling it
| and running it results in it going from 280M down to 220M,
| That's a 27% improvement. Creating an exe brings the memory
| usage back to 243M but that's still down. I'm less familiar
| with creating exes so there might be some settings I can tweak.
| rscho wrote:
| I don't know the current memory consumption, but FWIW Racket
| recently improved on that front.
|
| As for debug mode, you should AOT compile with 'raco make' to
| run a fair test.
| fileeditview wrote:
| I was/am in the same boat. A few months back someone
| recommended this blog to me: https://alex-hhh.github.io/
|
| If you want to see some "real world" high quality Racket GUI
| stuff this is the place to go. Very inspiring. I'd love to do
| more with Racket & its GUI lib.
| nmg wrote:
| WOW - in his space invaders example, his animated sprites are
| displayed in the REPL. So neat.
| breck wrote:
| Awesome. Racket is the best. The phrase "language oriented
| programming " was a turning point for me when I first encountered
| it.
| The_rationalist wrote:
| Can you ELI5 it's value proposition?
| rscho wrote:
| In substance: easily make a DSL targeted specifically at your
| problem.
|
| This proposition is often criticized by software engineers
| for resulting in code that is potentially inscrutable to
| anyone but the writer. IMO, this misses the forest for the
| tree. Sure, one-off DSLs probably aren't suited to entreprise
| codebases you'd use Java for. But what the critics miss is
| that this truly enables domain experts. In that way, it's a
| bit like the MS Excel value proposition cast into a (very
| well-designed) programming language. Which makes it ideal for
| solo devs, scientists, small teams, etc. (as most lisps).
| That's what makes Racket interesting to me, at least.
| The_rationalist wrote:
| General purposes programming languages that enable to
| easily and expressivelly build readable DSLs are useful.
| But what does Racket bring over say Kotlin DSLs?
| https://kotlinlang.org/docs/type-safe-builders.html
|
| For building DSLs the following features are useful:
| Infix/postfix functions, Operator overloading,
| Varargs/spread operator, Scope controling what is allowed.
| Other features??
| rscho wrote:
| I'm not a Kotlin expert, but I expect that it enables
| easily _interpreted_ DSLs. Racket enables easy _compiled_
| DSLs through its macro system. So, no interpretative
| overhead.
|
| Also you can really, really change both syntax and
| semantics: https://docs.racket-lang.org/2d/
|
| Although not similar technically speaking, Graal/Truffle
| is a better comparison in spirit, IMO. But Graal/Truffle
| is hugely complex, with many many man-hours in it.
|
| Classic example and discussion: https://www.reddit.com/r/
| programming/comments/i1slm/comment/...
| https://www.hashcollision.org/brainfudge/index.html
| iainctduncan wrote:
| My job is to doing due diligence on tech companies during
| major investments and acquisitions, and one of the most
| successful (and interesting) I've seen was doing exactly
| what you describe. It wasn't Racket, but the code base was
| an engine with a very sophisticated DSL enabling all their
| in-house domain experts to work hyper-productively. Their
| work was split into an engine, which their low level super-
| senior hackers worked on, and the assets, which were the
| things customers bought and were made in a DSL by highly
| educated domain experts. It was really impressive, and they
| are doing _very well_. I 've long been convinced that this
| is the logical highest level of "onion/hexagonal/ports and
| adapters" architecture, and seeing what they had done was
| really cool.
| breck wrote:
| Let's say you and your friends wanted to figure out the best
| way to share toys so that everyone is happy.
|
| There's a new method to doing that, pioneered by these Racket
| folks, called "Language Oriented Programming".
|
| And what it means is that the first step to solve your
| problem is to create the simplest language you can think of
| to describe your problem.
|
| So let's create a language where you can list everyone's toys
| like this "ballToy", "elsaToy", "blockToy". And then we can
| list all your friends like this "Adam", "Emily", "Maya". And
| then we can list feelings like "Happy", "Sad"...(going to
| skip the meat for brevity)...and then we rearrange these
| words until we get the program with the most Happys! And
| we've solved the problem using "Language Oriented
| Programming". We spent our time not on the computer language,
| but on creating a new simple domain specific language
| customized for our problem.
| Decabytes wrote:
| *Disclaimer I know nothing about German and very little about
| English Grammar*
|
| In German there is a word called "Schadenfreude" whose
| literal translation into English is _Schaden_ "damage"
| _freude_ "joy". The actual meaning is roughly ...
| The experience of pleasure or joy, that comes from witnessing
| failures, or humiliation of another.
|
| Because of the "design" of the English language, it is
| difficult (but not impossible) to relate these complex
| emotions in the way it is done in German. Because of this we
| have to say "I am experiencing joy from seeing X person in
| pain" while the Germans get to say "I feel Schadenfreude".
| The German way is more succinct. Coincidentally in
| programming, there are problems which if you are just
| constrained to the syntax and semantics of your programming
| language, get solved by saying "I am experiencing joy from
| seeing X person in pain" instead of "Schadenfreude". By being
| able to create a new language with less friction than it has
| been in other programming langauges before, whose design
| allows you to solve your problem with the word
| "Schadenfreude" instead of "I am experiencing joy from seeing
| X person in pain", allows you to create programs that are
| more expressive, succinct, have less bugs, and be easier to
| maintain.
| bobthepanda wrote:
| Well, _Schadenfreude_ is a loanword in English, albeit not
| common.
| neilv wrote:
| I'm imagining Marketing panicking when they hear us in
| Engineering:
|
| Q: Can you explain the value proposition of DSLs?
|
| A: Sadism.
| [deleted]
| linspace wrote:
| I'm simply amazed by Racket. It stands out because while it is
| developed by academics and based on a language with a history of
| caring more about the language than solving real problems it
| comes with excellent documentation, good performance and decent
| libraries including unsexy things like a GUI toolkit.
| canadianfella wrote:
| What is a "sexy" library?
| zelphirkalt wrote:
| I agree with you about the positive points of Racket.
|
| I would note however, that being developed by academic greats
| and being based on that language is exactly what enables it to
| stand out. It is usually academics, who innovate in PLT and
| come up with new elegant concepts, that one can use to tackle
| lots of challenges.
| slaymaker1907 wrote:
| For anyone trying to install on Windows and getting a big scary
| warning of doom, it's probably nothing to worry about [1].
|
| [1]: https://groups.google.com/g/racket-dev/c/Oxi3dJn-EME
| felixr wrote:
| This announcement assumes everyone knows what Racket CS is. I
| think they should explain CS == ChezScheme and link to
| https://docs.racket-lang.org/guide/performance.html#%28tech....
| vasergen wrote:
| Thanks, exactly my first thought was it stands for Computer
| Science
| threatofrain wrote:
| Does anyone have any summaries or news about the ongoing Racket
| team effort to develop modern syntax?
| samth wrote:
| The most recent proposal is https://github.com/racket/rhombus-
| brainstorming/pull/122
| bjoli wrote:
| It is called rhombus and there is an open discussion going on
| at https://github.com/racket/rhombus-brainstorming
| soegaard wrote:
| Still in the brain storm phase.
| Decabytes wrote:
| Matthew Flatt has said that now that Racket on Chez is done,
| there will be more time to devote to this problem. I'm excited
| to see where the conversation goes in the next coming months.
___________________________________________________________________
(page generated 2021-02-14 23:02 UTC)