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.  

        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.  

          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.

                                                                                1. 5

                                                                                  I like s-q-l but I hear sequel a lot more

                                                                                  1. 2

                                                                                    In my university, and at school, (Germany) I’ve never heard anyone say sequel, only SQL. Probably because it is interpreted as an acronym.

                                                                                    1. 1

                                                                                      In real world office talk, always s-q-l but in academics, “sequel”. I think there is a pattern here.

                                                                                      Some acronyms are meant to be pronounceable but I don’t think that’s SQL’s case.

                                                                                    1. 1

                                                                                      Can anyone ELI5 this for me? I read the introduction but in not familiar with ocaml specifically or type systems in general…

                                                                                      1. 3

                                                                                        it’s proposing to extend ocaml with a new class of objects, whose lifetime is managed via RAII (a la C++).

                                                                                        here is an explanation of RAII; read that and then read over sections 2.1 and 2.2 where the paper discusses how RAII might be combined with a garbage collector. It also borrows ideas from linear and affine type systems tried out in other languages (most notably rust) and explores how they would fit into this new language.

                                                                                      1. 9

                                                                                        apart from being a very interesting paper, the author has a wonderfully readable and engaging style.

                                                                                        1. 3

                                                                                          Really nice tutorial! Has anyone else found material covering the implementation of some other common language features (Objects, methods, etc)?

                                                                                          1. 3
                                                                                            1. 3

                                                                                              Thanks (-:. See also the follow-up: http://papl.cs.brown.edu/

                                                                                              1. 2

                                                                                                i went through a few chapters, and i’m curious about the focus of this book - it seems to spend less time than PLAI on the details of implementing interpreters, and more on building up the foundations a la HtDP. is it meant to eventually supersede PLAI, or is it more of a companion volume for people who want to start from an earlier point?

                                                                                                1. 3

                                                                                                  It’s actually a hybrid. Pretty much most of the content of PLAI is in there, but mostly in the second half. The first half is like a very brief version of HtDP. But there is also content that is not in either book: e.g., the material on tables is driven by language features we added to Pyret.

                                                                                                  The real goal is to eventually interleave these parts: “here is some programming, now here’s the corresponding PL content; here’s more programming, here’s the corresponding PL content”. I was starting to do that, but realized there are some open research questions I have about how to present semantics. So with Preston Tunnell Wilson I am now investigating those issues. Once they are sufficiently resolved, they will feed back into the restructuring of PAPL.

                                                                                                  Hope that make sense.

                                                                                          1. 2

                                                                                            setting PAGER=most does this automatically too.