1. 6

    Is it just me or are other people also bothered by the over use of emoticons and the low quality of this writing? I wish that style of writing would stay confined to SMS and not bleed into technical articles.

    1. 6

      I don’t know how you measure “quality of writing”, but I thought it was fine.

      No typos I could read and good sentence structure. Tasteful use of emojis I thought. Distasteful would be every one or two paragraphs, but they only used like 5 in the whole article.

      Just a different way to express. A waaaay more casual one.

      1.  

        i’m a fan of emoji used to decorate text, but not used to replace words.

        1.  

          That’s a good way to put it. Indeed.

        2.  

          Tasteful use of emojis I thought.

          Maybe it’s just me but when I see “Oh 💩, it compiles to JavaScript.” I just have to think of trying-to-be-cool parents, which I just find tiering. And that’s setting aside that I don’t believe vulgar language should be used at all in written documents.

          1.  

            Can’t disagree with that, tbh (on the use of the shit emoji).

          2.  

            “Tasteful use of emojis” sounds like “subtle trolling” to me.

            Although it’s ok, I only see the same “tofu box” emoji.

          3.  

            Didn’t bother me since it was at least a different style. I like seeing a mix of styles. If it annoyed you, I think you’ll like some of his comments on the HN thread which get right to the point. Specifically, he as a list of what’s bad and what’s great.

          1. 2

            interesting! i have a (backburnered) project trying to write libraries in ocaml and call them from racket; this should be very helpful.

            1. 3

              i decided to install antergos rather than vanilla arch on mine. can recommend; it’s just an arch distro with a few nice conveniences added on top and a more streamlined install process.

              1. 1

                To be honest, I’m glad he’s retiring. I feel like he’s been trying to take the language places it really shouldn’t go of late. If he wants a type safe language he should design something new and call it Guidothon :) Let Python do what it does well.

                1. 4

                  my day job is doing static type inference for python (in friendly competition with mypy), so i can speak to this - no one, from guido downwards, wants to turn python into a “type-safe” language. the PEPs have always been explicit about how type annotations are treated strictly as comments by the language, are not needed, and can be safely ignored if you don’t want to use them; they just provide a clean and natural way to document your types with a consistent standard that third-party tools can use to do static typechecking.

                  note also that your python code has types; they just aren’t enforced at compile time. consider the following code:

                  def f(a, b, c):
                    return b * b - 4 * a * c
                  
                  def g(x):
                    return f(x, "hello", "world")
                  

                  python will run this obligingly enough, only crashing when you call g which in turn calls f which throws an exception because you are trying to perform arithmetic operations on strings. now consider the same code with annotations:

                  def f(a: float, b: float, c: float) -> float:
                    return b * b - 4 * a * c
                  
                  def g(x):
                    return f(x, "hello", "world")
                  

                  python will still treat this code identically to the first version; you haven’t lost any of your ability to shoot yourself in the foot. but now you have two additonal things - someone can read the type annotations on f and know what it expects without having to read the actual code, and a static type checker can analyse your code and tell you that you’re calling a function that expects floats with strings before you ever run it.

                  all that PEP484 added to the language was a standard notation to add these helpful type comments, and some syntactic support from the parser and interpreter to make them a natural looking part of the code.

                  1. 2

                    If Guido was the sort to name something Guidothon, then I strongly suspect he would have done decades ago, and now he’d be retiring because of GEP 527, etc, etc.

                  1. 12

                    Say what you will about the Ruby community, but I’ve never seen them fly into a moral panic over a tiny syntax improvement to an inelegant and semi-common construct.

                    The person-years and energy spent bikeshedding PEP 572 are just astoundingly silly.

                    1. 7

                      Say what you will about the Ruby community, but I’ve never seen them fly into a moral panic over a tiny syntax improvement to an inelegant and semi-common construct.

                      Try suggesting someone use “folks” instead of “guys” sometime…

                      1. 13

                        I switched to folks and do you know how satisfying of a word it is to say? “Hey folks? How’s it going folks? Listen up folks!” I love it.

                        On the other hand the interns weren’t too keen on “kiddos.”

                        1. 6

                          I’ve gotten used to saying “’sup, nerds” or “what are you nerds up to?”

                          1. 4

                            A man/woman (or nerd, I guess) after my own heart! This has been my go-to for a while, until one time I walked into my wife’s work (a local CPA / tax service) and said, “What up, nerds?” It didn’t go over so well and apparently I offended some people – I guess “nerd” isn’t so endearing outside of tech?

                            Thankfully, I don’t think I learned anything from the encounter.

                            1. 3

                              It’s not endearing within tech to anyone over 40.

                              1. 2

                                I generally only use it in a technical setting – so within my CS friend group from college, other programmers at work, etc… whenever it’s clear that yes, I am definitely not trying to insult people because I too am a nerd.

                        2. 1

                          as @lmm notes above, a minimalist, consistent syntax is an important part of python’s value proposition. in ruby’s case, adding syntactic improvements is aligned with their value proposition of expressiveness and “programmer joy”, so it’s far less controversial to do something like this.

                        1. 4

                          The global menu bar issue is something I deeply care about. Linux has a very good global menu bar, but people either are moving away from it or do not know that it is available. Just use Ubuntu 16.04 and see in action.

                          Since 2014 Ubuntu modified GTK and Qt so that all desktop applications made use of a global menu bar. Everything works now perfectly. Ubuntu 16.04 with the default Unity desktop is a very usable desktop. All my non-techy acquaintances like it. These modifications have, however been refused upstream, because they do not fit the GNOME 3 paradigm (most of which I like).

                          I really do not understand why people are against global menus. They are better, scientifically proven better. And they save a lot of vertical space, that in modern super-wide monitors is a precious resource.

                          Why doesn’t the global menu bar receive the love it deserves?

                          1. 2

                            They are better, scientifically proven better

                            Citation needed

                            1. 3

                              From Fitt’s law [1] and Steering Law [2] comes that global menu bars are much easier to access.

                              Fitt’s law tells you that global menu bars are better because they can be reached by moving the cursor to an infinitely big target [3]. In other words, you can throw your mouse pointer somewhere up and it will surely and easily reach global menu bar.

                              Steering Law tells you navigating along/inside a vertical or horizontal tunnel is hard if the tunnel is thin (hello badly implemented JS menus that disappear when you move to a submenu). In the case of a global menu bar navigating it is easy because it is infinitely tall, just push your cursor slightly up.

                              Global menu bars are easier to access, but are they faster to access? This a good question, because, on average, the global menu bar is farther away than the local menus. It turns out that, on average, they are equally fast to access. [4] Windows requires more aiming precision (slower) but less travel distance (faster). MacOS requires less aiming precision (faster) but more travel distance (slower).

                              All things being equal, simplicity should always preferred, because it means that more people can fruitfully use a system, for example people with disabilities.

                              1. P.M. Fitts: The information capacity of the human motor system in controlling the amplitude of movement. J. Exp. Psychol. 47, 381–391 (1954)
                              2. J. Accot, S. Zhai: Beyond Fitts’ law: Models for trajectory-based HCI tasks. In: CHI 1997: Proceedings of the SIGCHI conference on Human factors in computing systems, pp. 295–302. ACM, New York (1997)
                              3. A. Cockburn, C. Gutwin, S. Greenberg: A predictive model of menu performance. In: CHI 2007: Proceedings of the SIGCHI conference on Human factors in computing systems, pp. 627–636. ACM, New York (2007)
                              4. E. McCary, J. Zhang. GUI Efficiency Comparison Between Windows and Mac. In: HIMI 2013: Human Interface and the Management of Information. Information and Interaction Design pp 97-106, Springer (2013)
                              1. 1

                                This makes sense, thank you for the detailed response.

                            2. 2

                              how does it play with focus modes other than click-to-focus? e.g. in focus-follows-mouse, if you have to move your cursor through another window en route to the global bar, it would rebind to the new application.

                              1. 2

                                Focus-follows-mouse has a delay before switching applications. Move across fast, no app switching. Or go around (fairly easy with non-overlapping windows).

                                1. 1

                                  I haven’t tried these global menus in Linux, as an Enlightenment user, but how long ia the delay and is it configurable?

                                  I’d tie it to motion, because I appreciate my desktop being fast and all kinds of stalls annoy me. I’d imagine this to be very true if I have to touch a pointer device.

                                  1. 1

                                    It appears to be a hard-coded 25ms delay, at least in GNOME shell. Others may implement it differently.

                            1. 3

                              I really like both the model Pony-lang exposes and the syntax. After having tried it for a couple of weeks on some toy TCP driven stuff, I found the compiler messages just be too arcane to really feel I could get anywhere by spending a couple hours here and there messing with it.

                              Pony would benefit from a good polishing of UX with regards to compiler messages, because they can be one of the most important (and delightful) features in this next generation of compiled languages and I’m not sure any of them get it 100% correct yet, thought Crystal lang is getting closer and closer.

                              1. 5

                                elm does a really good job of compiler messages

                                1. 2

                                  100% agree. I haven’t done much beyond mess around with it because I didn’t have any projects I could use it for, but I think they are maybe the best compiler messages I’ve seen. It has almost instantly apparent (and intuitive) what the compiler thought I was doing wrong, even if I was unaccustomed to elm’s syntax.

                                2. 3

                                  We appreciate folks opening issues with code that wouldn’t compile for them and the corresponding compiler message that they found confusing.

                                1. 14

                                  I really hate browser notifications. I never click yes ever. It feels like preventing browsers from going down this hole is just yet another hack. The Spammers and the CAPTCHAers are fighting a continuous war, all because of the 2% of people who actually click on SPAM.

                                  1. 7

                                    I’m amazed there is no “deny all” setting for this

                                    1. 5

                                      My firefox has that in the settings somewhere:

                                      [X] Block new requests asking to allow notifications

                                      This will prevent any websites not listed above from requesting permission to send notifications. Blocking notifications may break some website features.

                                      help links here: https://support.mozilla.org/en-US/kb/push-notifications-firefox?as=u&utm_source=inproduct

                                      1. 2

                                        Did anyone find the about:config setting for this, to put in ones user.js? I am aware of dom.webnotifications.enabled, but I don’t want to disable it completely because there are 3 websites which notifications I want.

                                        1. 3

                                          permissions.default.desktop-notification = 2

                                      2. 1

                                        there always has been in Chrome and Safari and since very recently, there’s also one in Firefox. It’s the first thing I turn off whenever I configure a new browser. I can’t possibly think of anybody actually actively wanting notifications to be delivered to them.

                                        Sure, there’s some web apps like gmail, but even there - I’d rather use a native app for this.

                                        1. 3

                                          I can’t possibly think of anybody actually actively wanting notifications to be delivered to them.

                                          Users of web-based chat software. I primarily use native apps for that, but occasionally I need to use a chat system that I don’t want to bother installing locally. And it’s nice to have a web backup for when the native app breaks. (I’m looking at you, HipChat for Windows.)

                                      3. 5

                                        There is a default deny option in Chrome, takes a little digging to find though. But I agree that it’s crazy how widespread sites trying to use notification are. There’s like 1 or 2 sites that I actually want them from, but it seems like every single news site and random blog wants to be able to send notifications. And they usually do it immediately upon loading the page, before you’ve even read the article, much less clicked something about wanting to be notified of future posts or something.

                                        1. 1

                                          The only time I have clicked “yes” for notifications is for forums (Discourse only at this point) that offer notifications of replies and DMs. I don’t see a need for any other websites to need to notify me.

                                          1. 1

                                            Does anyone know what Kore is? There’s no links in the post, and the closest I could find was https://github.com/kframework/kore but I’m not entirely sure it is

                                            1. 5

                                              I think it’s more likely https://kore.io/

                                              1. 5

                                                Indeed, that’s the correct link. Kore is an easy to use web platform for writing scalable web APIs in C.

                                              2. 4

                                                I used to work for an information security company called KoreLogic; we referred to ourselves internally as “Kore”.

                                                Whenever I talked to someone from outside the company it would go like this:

                                                “I work for KoreLogic Security. Not CoreLogic with a ‘C’. Not Core Security. Not Kore IO. KoreLogic with a ‘K’, but not the KoreLogic with a ‘K’ in the United Kingdom.”

                                                (And for future reference, you should absolutely talk to the KoreLogic people if you need information security consulting. I cannot say enough nice things about them.)

                                                1. 1

                                                  Also not OpenKore, a bot software for an MMO ;)

                                                  1. 1

                                                    huh, until I read this comment I automatically assumed it was pronounced “ko-ray”

                                                1. 2

                                                  the linked discussion of why you can’t send an EOF to a port and close the write half but leave the read half open was very interesting too

                                                  1. 2

                                                    still the site i ping reflexively to see if my internet is working

                                                    1. 17

                                                      This is cool, AFAICT it’s basically their existing container-tab feature (which requires no extension), and the only difference is that it automates the creation of a container for Facebook, so that whenever you load Facebook it loads in the Facebook container tab.

                                                      This is great, but even better is this amazing extension called “not using Facebook”.

                                                      1. 12

                                                        Its a real shame some of us have close friends and family who don’t care about digital privacy and use Facebook to communicate. The container is a great idea (and good on Mozilla for putting it together!) So not all of us can use the ‘not using Facebook’ extension. ¯_(ツ)_/¯

                                                        Disclaimer: I also don’t care enough.

                                                        1. 2

                                                          I have plenty of friends and family who use that website and they’re all happy to communicate using other methods like text message, email, even Signal.

                                                          1. 7

                                                            I’m sure you do have plenty of friends that don’t mind communicating that way. I do not. I do use signal as my primary SMS driver however and am a big fan. My point is that dropping FB as a communications tool is a case by case study. I don’t think I can’t convince moms to use something else to video call me while she’s already on FB talking to her quilting friends.

                                                            1. 1

                                                              Have you tried? (Quitting FB completely, at least for a month?) If not, how can you be so sure?

                                                              1. 10

                                                                I’ve quit facebook more than 5 years ago, and I’ve tried ever since to convince others to do so as well, but to paint it as anything simple is ignorance of how deep its roots now run in a lot of communities. Even I still rely on facebook indirectly to find out about events through friends who are still on facebook. I’ve also lost contact with a lot of old friends, and while I see that as no problem, since the friendships that mattered to me still persisted, I can’t ask others to accept the same. With no clear alternative in sight, asking people to quit facebook is akin to asking people decades ago to get rid of their landlines. You’ll need more than “facebook is watching you”.

                                                                1. 8

                                                                  This is very true. If Facebook was just a creepy surveillance system designed to sell you ads, no-one would use it. For many people, Facebook provides value - connections with friends and family, the ability to communicate over vast distances, a place where you can, in some ways, curate your own personality. The problem is that FB offers this seemingly for free, while hiding the actual cost from its users.

                                                                2. 9

                                                                  I’ve done so and, tbh, I completely isolated myself from many friends. Not that I don’t speak to/see them, but that I miss lots of spontaneous opportunities. Like a picture with a drink saying “come grab a drink if you’re nearby”, that I don’t see anymore, or just basic events that I don’t receive anymore and is a pain to forward/update to people that are not on FB…

                                                          2. 18

                                                            umbrellas will never keep you as dry as not going outside, yet they remain popular

                                                            1. 4

                                                              umbrellas will never keep you as dry as not going outside, yet they remain popular

                                                              I find “outside” to be a genuinely wonderful and interesting place for which I can think of no substitute.

                                                              1. 9

                                                                that’s pretty much how i feel about my community of friends on facebook. (your other comment about friends keeping in touch via other platforms misses the third place aspect of facebook)

                                                                1. 2

                                                                  (your other comment about friends keeping in touch via other platforms misses the third place aspect of facebook)

                                                                  By all means, make Facebook your third place of choice for you and your friends. ^_^

                                                                  1. 4

                                                                    and thanks to mozilla for providing one of those means!

                                                                2. 7

                                                                  Really? I find it rather overrated. The rank grind’s mostly terrible, most of the map is just empty water and the graphics leave a lot to be desired (I think charging for the HD contact lens upgrade in-game while immersive is a very EA-style move).

                                                                  Also the big event storylines are a bit far-fetched. I mean, putting a bright orange idiot in as president? Come on.

                                                              2. 2

                                                                I installed this and I’m not even sure it works because it’s possibly mimicking my container-tab-Facebook setup so closely. Might need a new profile to examine the exact difference…

                                                              1. 3

                                                                Had no idea Vala exists. What a wonderful little language, wasted my evening playing with it!

                                                                1. 5

                                                                  It really is a hidden jewel. I wouldn’t call it little though! I’ve been a fan for several years, I have not used it in anger yet, though.

                                                                  1. 3

                                                                    i used it for a project some years ago, wrapping a maemo gui interface around an open source C library. it was very pleasant to use, and suited the task admirably, though today i’d probably use D for the same thing.

                                                                1. 2

                                                                  i have fond memories of this - in an early-in-my-career job, working with a large and messy legacy c++ codebase, i would often fire up jgrasp when i just wanted to read through a file and be able to quickly navigate through the overall structure of it. very nicely designed interface, especially when working with code that has functions with very large bodies.

                                                                  1. 1

                                                                    i remember this experiment! the most fascinating bit was how a what was meant to be a “pure logic” circuit ended up intimately coupled to the physical characteristics of the hardware it was hosted on. taking a leap forwaard to artificial consciousness, if we ever achieve it it might similarly end up being coupled to the AI’s body, down to the level of quantum effects, as opposed to the science fictional notion of a disembodied intelligence that can freely upload itself anywhere.

                                                                    1. 5

                                                                      It says it’s written in C++, but the repo is 99% Haxe..?

                                                                      1. 2

                                                                        I can’t find any references to Wren in that repository. Maybe it’s old code?

                                                                        1. 5

                                                                          Yep, apparently between Luxe’s “alpha” and not-yet-released “preview” versions it has changed considerably.

                                                                          On https://luxeengine.com/alpha/ it says:

                                                                          All the details of this transition are being expanded in the development logs!
                                                                          In short: The alpha code base was temporary and is going away.

                                                                          1. 3

                                                                            if it was a deliberate strategy to use haxe to develop the alpha quickly and experiment with strategies, and then port to c++ once the code had crystallised, i would love to read a blog post about it.

                                                                      1. 11

                                                                        This problem is largely solved by “Jump To” in an IDE (or fancy editor). This sort of thing is why I no longer do real work in languages without these niceties. I just don’t have the patience for it any more.

                                                                        1. 5

                                                                          Code reviews and online examples can suffer though - I have a very hard time reading unfamiliar Haskell and Agda code on Github where definitions aren’t either explicitly imported in an import list or given a qualified name. But perhaps that’s an argument for better online tooling…

                                                                          1. 2

                                                                            That’s a good point, although I agree that better tooling is probably the answer, particularly since fully-qualified imports still mean you’re stuck tracking down docs and such in code review with most of the existing tools.

                                                                            1. 1

                                                                              I have to admit, I fully agree with brendan here. Fully qualified imports really do increase readability to any new, or even old code.

                                                                              I don’t think better tooling is the best approach, I find explicit versus implicit generally explicit ends up being clearer.

                                                                              A possible middle ground is allow ONE unqualified import only as (if i remember right, only skimmed docs) purescript does. That would at least remove ambiguity as to where something could be coming from.

                                                                            2. 1

                                                                              Haskell’s Haddock supports hyperlinked source and so does Agda.

                                                                            3. 4

                                                                              you don’t even need that much; I find vim’s split-window feature is perfectly usable if I want to read the code where something is defined, or look at both the current code and the top of a file simultaneously. whereas on the flip side I know if no good way to eliminate the visual clutter caused by fully qualified names everywhere.

                                                                              1. 4

                                                                                You also can generate ctags and use them in vim ;)

                                                                                1. 1

                                                                                  true :) I used to do that more often in my c++ days; somehow I lost the habit now that I’m doing python at work and ocaml at home, even though ctags would probably help with both of those.

                                                                                2. 3

                                                                                  this doesn’t solve the “import all names” problem that you hit in languages like Python where some people do import * or you are importing something that was already re-exported from another location. You end up with busy work that an IDE could handle with a name lookup

                                                                                  Though I agree that once you find the definition, split windows is a pretty nice way to operate

                                                                                  1. 1

                                                                                    I too find the result to be cluttered. But I also find new programming languages/syntaxes to be strange and chaotic in the same way. Once I use the language long enough, I am no longer overwhelmed. My hypothesis is that the eye will adapt to fully qualified names everywhere in the same way.

                                                                                  2. 1

                                                                                    I came here to say just this: with a sufficiently smart editor (vim, ide, or otherwise) this problem goes away almost entirely.

                                                                                    That said, I think there are some arguments to be made for always-qualified imports

                                                                                    1. 6

                                                                                      I think it can be a cultural thing as well. I never enjoy typing datetime.datetime but don’t mind collections.namedtuple. itertools.ifilter is annoying though. Redundant words or information looks and reads bad.

                                                                                      When the culture is to assume qualified imports, then the library will always be used to provide context, and that can be quite nice.

                                                                                      When resolving a qualified name is the same syntax as a method call, that can look bad quickly. Python very much suffers from this problem. Think of Clojure stylebanespace syntax as an alternative.

                                                                                    2. 1

                                                                                      Does “Jump To” actually jump you to the import declaration or the function definition? I’ve never used an IDE. My guess is that an IDE would largely eliminate manual identification of the function’s origin. So that’s useful! But I’m not convinced that this would be faster than reading the module name inline in plain text. No keystroke or mouse click required to get the information. I guess the argument for using an IDE to solve this problem is something like the IDE places the information close at hand while also enabling a less verbose code style. That’s a reasonable argument. At some point the conversation becomes purely a debate about the pros and cons of IDEs. Then I would say that it’s nice to have code that doesn’t incur a dependency on a code editor.

                                                                                      1. 2

                                                                                        You can jump to the declaration in most IDEs (provided there is support for the language). In many you can also view the documentation for a symbol inline, no need to go searching in most cases. I agree with you that this really just changes the debate to one about tooling. However, since many people (myself included) prefer the readability of unqualified imports, tooling support is important to at least think about. For example, I work in Dart a lot at work, the Dart community tends toward unqualified imports because, at least in part, I think, pretty much everyone who writes Dart code uses either an IDE or an editor plugin with IDE-like features.

                                                                                    1. 5

                                                                                      this could so easily have been a neat “here’s how I put together a quick web interface” blog post without the mean-spirited “lol, this other idiot couldn’t do it in six months” bit.

                                                                                      1. 15

                                                                                        C++ got its act together. Java and Perl came along (and later, Python). Meanwhile, Lisp hadn’t advanced much in about a decade (since the ANSI spec was finalized). It was still a win, but the competition had narrowed the field. Once upon a time Lisp had a long list of features that no other language had (GC, full numeric tower, CLOS, incremental development, macros) that list kept getting shorter and shorter, and the case for Lisp, which had never been easy even in the best of times, was getting harder and harder to make.

                                                                                        I think that this is definitely an issue with Lisp. The core is really, really good; it still has plenty of features that common languages don’t have. But even though it’s more advanced than they are, it’s still stuck in 1994. The median language is a lot better in 2018 than it was in 1994: it’s JavaScript, which is a horrible, terrible, no-good language but still orders of magnitude better than C for software development.

                                                                                        Lisp is still better: it still has things JavaScript, Python, Java, Ruby, Scala, Erlang & Go are all missing. But it’s not as much better as it used to be, because all of those languages are much more capable than C, assembler & Pascal.

                                                                                        But then a very strange thing happened: I noticed that all around me people were writing code using C++ and Java and Python and even (gasp!) Perl, and they were actually getting it to work without tearing their hair out. In fact, in a number of cases I saw people whip things up in Perl in a couple of hours that would have taken me days or weeks to do in Lisp.

                                                                                        I think that’s a factor of batteries being included. Once upon a time Common Lisp was derided for including hash tables: nowadays they are table stakes. Once upon a time people laughed at Common Lisp for being a huge standard; now they laugh at it for not including a web server, let alone standardising sockets.

                                                                                        The good news is that this is fixable (we can always have a new standard, if we want to go to the effort), and in practice it more-or-less is fixed: Quicklisp provides semi-standard libraries for everything. Would it be nice to have a truly-standardised library equivalent to, say, Go’s? Hell yes. Can we get by with what we have now? Sure.

                                                                                        I do think that the Lisp world needs to consider a compatibility-breaking Common Lisp 2 at some point. The world has changed a lot in 24 years; it’s time Lisp took note.

                                                                                        1. 9

                                                                                          What do you think of other newer age Lisps like Clojure?

                                                                                          1. 9

                                                                                            Honestly, I don’t like Clojure — it’s not (IMHO) really a Lisp (among other things, it breaks conses). It’s a neat language, but it’s not my cup of tea. I’d like to see a Lisp continued & carried on, not a break with tradition.

                                                                                            1. 8

                                                                                              cons, car, cdr is the least that I miss in clojure, I guess they are a bit too low-level for my taste (and kind of complicated for reading code, although I never had a problem writing them out for some reason).

                                                                                              What I kind of miss is in Clojure is CLOS, i.e. a multiple dispatch object system.

                                                                                              1. 3

                                                                                                I am not familiar with CLOS, but Clojure does have this.

                                                                                                1. 1

                                                                                                  Yes, and if it hadn’t this, one could probably write a multiple dispatch system with macros. I guess i could build my own island of multi methods. But that is a little different from an ecosystem that invests in them like Dylan or cl.

                                                                                                  1. 1

                                                                                                    I’ve been meaning to try Common Lisp. Things like the condition system, image dumping, CLOS, and MOP seem different from what I know and worth learning. I’m going to try out PAIP. Any insight on what the CL ecosystem tends to do with mutli-dispatch?

                                                                                                    1. 2

                                                                                                      I might be the wrong person to ask, because I never really used it (CL, and multiple dispatch) for more than a few example programs. First of all it implements OO in a way that nicely fits into the lisp functional programming world, i.e. procedures/functions first. Then there are the instances were you’d normally resort to the visitor pattern and can use multiple dispatch for truely polymorphic functions. I think they aren’t as widespread as one might think, but every now and then, multiple dispatch really helps at keeping code simple.

                                                                                            2. 8

                                                                                              You beat me to it. Ill go straight to saying it seems to solve that very problem with proof being its mainstream status having a big community and plenty of job ads for it. Need more LISP initiatives like that.

                                                                                            3. 8

                                                                                              I do think that the Lisp world needs to consider a compatibility-breaking Common Lisp 2 at some point.

                                                                                              i’d love to see that effort put into optimising the racket runtime and adding libraries to it, personally. i think it has real potential to be an “industrial-strength” langage; the design is already excellent.

                                                                                              1. 6

                                                                                                i’d love to see that effort put into optimising the racket runtime and adding libraries to it

                                                                                                Some work is being done right now to integrate the Chez scheme backend with Racket, which would mean some really nice speed improvements for compiled code.

                                                                                                1. 3

                                                                                                  The problem with Racket is that it’s very much a Scheme rather than Lisp, with all the mistakes that come with being a Scheme: Lisp-1, #f, (car '()) being an error. It’s an incredibly impressive body of work, but I wish that effort had been expended on Common Lisp instead.

                                                                                                  1. 8

                                                                                                    wait why shouldn’t that be an error though.

                                                                                                    1. 4

                                                                                                      wait why shouldn’t that be an error though.

                                                                                                      Because it makes writing code which walks through lists a bit simpler. It’s useful that (car nil)nil & (cdr nil)nil. This — like having multiple namespaces — is one of the places where Lisp is more pragmatic than Scheme. I find that quality attractive in a programming language meant to be used.

                                                                                                      I really wish that I could find a good article about this to share with you. I know that I’ve read one in the past, found the arguments convincing and have had the ‘nil should be carable’ bit set in my head since.

                                                                                                      1. 7

                                                                                                        It’s useful that (car nil) → nil & (cdr nil) → nil.

                                                                                                        That sounds horrible, a recipe for “foo is not a property of undefined”-style errors miles away from where the problem actually occurred. Surely your functions should know what kind of data they expect to be operating on, and fail-fast is not.

                                                                                                        1. 3

                                                                                                          Yes that is my view too. Though I think for smal projects bargap’s proposal could be good but as the project grows in size the need for errors to happen close to the source of the problem grows.

                                                                                                          1. 1

                                                                                                            It actually works out very well with the sort of code which is written in Lisp. Typically, Lisp systems depend on it.

                                                                                                            1. 2

                                                                                                              I’ve found it to be the single largest source of errors in the lisp systems I work with.

                                                                                                              1. 1

                                                                                                                Are you writing Lisp or Scheme? If you’re finding it to be a huge source of errors in Scheme, then wouldn’t that tend to support the Common Lisp way of doing things?

                                                                                                                1. 3

                                                                                                                  I mostly write Clojure and Emacs Lisp, (since 2008 and 2004 respectively) which use nil in the same way Common Lisp does. I don’t have these problems when I write Racket.

                                                                                                                  1. 1

                                                                                                                    I don’t know Clojure, but I’ll agree elisp is a good basis for comparison. All I can say is that my experience with elisp & Common Lisp differs from your own, and that my experience with Scheme has convinced me that I do not want to write a large system in it — nor use a large system written in it.

                                                                                                          2. 6

                                                                                                            Leaving nil out of the language is hands-down my favorite thing about Racket. So many of the problems of CL and Clojure just evaporate completely.

                                                                                                            1. 6

                                                                                                              Of course Racket has nil. It’s just written '().

                                                                                                              1. 7

                                                                                                                When I say nil here I’m referring to a single value which can mean “emptiness”, “false”, or “not found” depending on the context. Racket has three different values for each of those cases instead of lumping them all into a single value, and that is much less error-prone.

                                                                                                            2. 2

                                                                                                              Could you write a car that doesn’t error, Call it care

                                                                                                      2. 3

                                                                                                        That reference to Quicklisp made me think about slib

                                                                                                        I like the idea of having a standard library build only on spec scheme and app’s built with the specific particularities of scheme implementations.