Threads for jake-jake-jake

  1. 4

    There’s so much wrong with this article I don’t know where to start.

    “lisp-1 vs lisp-2”? One of the things that lispers forever ado about.

    I guess this depends on who you talk to–on the whole for lispers the only people who don’t consider lisp-2 to be a mistake are the hardcore CL fans. Emacs Lisp is the only other lisp-2 with a large userbase, and if you talk to elisp users, most of them are annoyed or embarrased about elisp being a lisp-2. If you look at new lisps that have been created this century, the only lisp-2 you’ll find is LFE.

    Not a Important Language Issue […] For another example, consider today’s PHP language. Linguistically, it is one of the most badly designed language, with many inconsistencies, WITH NO NAMESPACE MECHANISM, yet, it is so widely used that it is in fact one of the top 5 most used languages.

    You can use this same argument to justify classifying literally any language issue as unimportant. This argument is so full of holes I’m honestly kind of annoyed at myself at wasting time refuting it.

    Now, as i mentioned before, this (single/multi)-value-space issue, with respect to human animal’s computing activities, or with respect to the set of computer design decisions, is one of the trivial, having almost no practical impact.

    Anyone who has tried to use higher-order functions in emacs lisp will tell you this is nonsense. Having one namespace for “real data” and another namespace for “functions” means that any time you try to use a function as data you’re forced to deal with this mismatch that has no reason to exist.

    I could go on but I won’t because if I were to find all the mistakes in this article I’d be here all day.

    1. 9

      I guess this depends on who you talk to–on the whole for lispers the only people who don’t consider lisp-2 to be a mistake are the hardcore CL fans.

      This only is doing a lot of work here, given that CL is where the majority of practice happens in the (admittedly tiny) Lisp world.

      1. 4

        I know anecdote is not data but I know far more people who work at Clojure shops than I do Common Lisp shops. How would we quantify “majority of practice?”

        1. 2

          It’s more to do with whether qualify Clojure as a dialect of Java or a dialect of Lisp.

          Clojure proclaims itself a dialect of Lisp while maintaining largely Java semantics.

          1. 2

            CL programmers are so predictable with their tedious purity tests. I wish they’d move on past their grudges.

            1. 3

              Dude you literally wrote a purity rant upthread.

              1. 2

                Arguing about technical merits is different from regurgitating the same tired old textbook No True Scotsman.

                1. 3

                  Look, (like everyone else) I wrote a couple Scheme interpreters. I worked on porting a JVM when Sun was still around. I did a JVM-targeting “Lisp-like” language compiler and even was paid for doing it. I look on Clojure and immediately see all the same warts and know precisely why they are unavoidable. I realize some people look at these things and see Lisp lineage, but I can’t help seeing some sort of Kotlin with parens through it.

                  And it’s not just me really: half of the people who sat on RxRS were also on X3J13, and apparently noone had a split personality. So no need to be hostile about technical preferences of others. When you talk to your peers it helps to build a more complicated theory of mind than “they are with me or they are wrong/malicious”.

                  1. 2

                    Sure, you can have whatever prreferences you want. But if you go around unilaterally redefining terms like “lisp” and expecting everyone to be OK with it, well, that’s not going to work out so well.

                    1. 2

                      If you hang around long enough you hear people calling about anything as “Lisp-like”. Forth, Python, Javascript, Smalltalk, you name it. Clojure is a rather major departure from lisps both in syntax and semantics, so this is not a super unusual point.

      2. 6

        on the whole for lispers the only people who don’t consider lisp-2 to be a mistake are the hardcore CL fans.

        That folks who use a Lisp-1 prefer a Lisp-1 (to the extent that non-Common Lisp, non-Emacs Lisp Lisp-like languages such as Scheme or Closure can fairly be termed ‘Lisps’ in the first place) is hardly news, though, is it? ‘On the whole, for pet owners the only people who don’t consider leashes to be a mistake are the hardcore dog owners.’

        Emacs Lisp is the only other lisp-2 with a large userbase, and if you talk to elisp users, most of them are annoyed or embarrased about elisp being a lisp-2.

        Is that actually true? If so, what skill level are these users?

        For my own part, my biggest problem with Emacs is that it was not written in Common Lisp. And I think that Lisp-N (because Common Lisp has more than just two namespaces, and users can easily add more) is, indeed, preferable to Lisp-1.

        1. 4

          Is that actually true? If so, what skill level are these users?

          This is based on my experience of participating in the #emacs channel since 2005 or so. The only exceptions have been people coming to elisp from CL. This has held true across all skill levels I’ve seen including maintainers of popular, widely-used packages.

        2. 4

          I dunno. I think the article is a bit awkward but I think the author is absolutely right: in practice, to the language user, it doesn’t really make a difference.

          I am a full-time user of a lisp-1. When I use it, I appreciate the lack of sharps and the like for when it’s time to use higher order functions or call variables as functions. The same language has non-hygienic macros, which Dick Gabriel rather famously claimed more or less require a separate function namespace, and have almost never found my macro usage to be hampered.

          At the same time, I was for three years a professional user of Elixir, a language with both syntactic macros and separate namespaces. I found it mildly convenient that I could declare an variable without worrying about shadowing a function, and never found the syntax for function reference or for invoking variables as funs to be particularly burdensome at all.

          To the user, it really doesn’t have to matter one way or the other.

        1. 1

          This may be a naive concern, but if changes are applied in a commutative way based on modified files, how can we feel secure about changes on mutually dependent files? This seems to undermine assumptions we make about testing changes to a repo.

          1. 2

            It is a valid concern, but:

            • First, you can add extra dependencies to Pijul changes, possibly using automation and language-specific scripts to detect them.
            • Second, other existing tools (such as Git) do not offer more guarantees: in Git, nothing prevents you from creating a bad state of your repositories by just rebasing. But at least in Pijul you get the guarantee that it will be super easy to get out of that bad state (no reflog needed).
          1. 5

            I’ve been enjoying manually making things with my hands: bread, garden trellises, clay pots. Work has been somewhat stressful and the political situation in the states nearly overwhelming; having to unflinchingly focus on a small task and seeing its immediate outcome, thinking about how to do it better on the next attempt, has been a relief.

            1. 1

              so good to switch to a different mode of working. I really used to enjoy making ethernet patch cables.

            1. 3

              I recently moved to a new place. I’m going to uproot a tree and build a raised bed in its place. Also plan to ride down to the library to pick up Ashley’s Book of Knots.

              1. 1

                Finishing up packing and getting ready to drive cross country. Moving is not fun!

                1. 1

                  In 2019, though, Python 3 has finally (mostly) become the default version of the language for new Python development, and many companies and projects are using the top features of Python 3: f-strings, Path, type hints, asyncio, and, of course, Unicode rendering.

                  Wait, what parts of Python 3 does Unicode rendering?

                  1. 1

                    str objects are unicode objects (utf-32 iirc) rather than byte strings as they were in python 2. That change was the single most painful point for my own code transition.

                    1. 3

                      Yeah, I know python 3 strings are unicode, but what does that have to do with rendering?

                      1. 1

                        Oh…. I missed the word rendering. Not sure.

                      2. 2

                        I believe the default is utf8.

                        1. 1

                          After a bit of reading it looks like you are correct. PEP393 changed it from something (utf-32?) to a flexible internal representation which defaults to utf-8.

                    1. 2

                      Starting a project in Rust for shits and giggles (something to keep documentation in sync with code); cleaning my apartment and deciding what I can get rid of in advance of a move I’m making in a couple of months.

                      1. 3

                        Writing up a presentation on using mypy to enforce types in python.

                        1. 1

                          For public consumption at some point? I’d love to pitch python as a safe language at my company! We are 95% modern C++.

                          1. 1

                            I’ll perhaps share it here. I’d need to get my blog working again. But we’ll see.

                            What would you use python for that you currently do with C++? I always assume that if you’re using C++, performance constraints pretty much make using python (at least normal cpython without any fancy interpreter or jit compilation) impossible.

                            1. 1

                              We have an informal and cultural directive to do everything in C++ because it’s ‘safe’ (typed) and peformant. Unfortunately this gets used as a crutch, as devs assume it’ll be fast because it’s C++, not because of the design of algorithms. End result is slow, bloated, tech-debt-heavy C++ GUI apps (because verbose, coupled C++ code is harder to change than python IMO).

                              So to answer your question, we’d use python for rapid prototyping, and GUI development, and ideally C++ for the low level algorithmic stuff.

                        1. 4

                          I saw a talk for this at Strange Loop, and I have to say it is delicious. I can’t wait to show it to my team and put it into use next week. Maybe I’ll write my first emacs minor mode to employ it.

                          1. 6

                            This does sound like a good strategy, and if someone reached out to me this way I’d definitely be happy to schedule some time. I enjoy talking shop with interesting people.

                            I would like it if this was done with less focus on career advancement, though, and more about learning from people for the sake of learning. At least personally, a career is a nice way to put food on the table, but the learning and tinkering is what really interests me.

                            1. 6

                              I also believe shifting the emphasis from career to discussing interesting things and making friends or meeting peers would improve this post. As it stands, it reads as if the primary reason a person has for reaching out to people is transactional: I’ll buy you this coffee so you can help me develop my professional chops.

                              That’s fine as far as it goes, I guess, but I personally am more likely to respond to someone who is merely interested in a topic than someone who is interested in learning enough about it to climb the ladder.

                            1. 3

                              Two and a half days of work, then heading to St Louis for Strange Loop!

                              1. -1

                                The fact that print ‘foo’ no longer works in python 3 is the most annoying change. There’s no reason for it, and almost 100% of my code would run fine on python 3 if not for it.

                                Python is so lucky they won the mindshare war. This upgrade has been a mess.

                                1. 36

                                  Speaking as someone who is going through a long delayed upgrade from 2 to 3 at the moment, if print becoming a function is the biggest issue you will have, you would have no problem just running 2to3 and being done with it.

                                  But print is probably not the issue. For us, it’s been the distinction between bytes and string (or, that our codebase relied on the lack of distinction in python 2).

                                  1. 3

                                    Ah yeah, excellent point. I’ve run into that too, especially with stdout/stdin.

                                  2. 11

                                    … almost 100% of my code would run fine on python 3 if not for it.

                                    Then use 2to3 and continue with Python3.

                                    1. 5

                                      Fixing mistakes is often like that. :-/

                                    1. 4

                                      Gonna read through the Strange Loop program and decide which talks I wanna see next week! Also, doing a DnD one off (my first time as a DM).

                                      1. 13
                                        1. 1

                                          I’m taking a break from programming and learning to repair stone walls which have collapsed on the edge of my garden. It’s coming along nicely. http://0x0.st/zVss.jpg

                                          1. 2

                                            Excellent. I have a dream of building a series of drystack retaining walls, and then planting espaliered plants along them.

                                          1. 4

                                            Flying to California for a week of camping and hanging out with old friends on the beach and in the trees.

                                            Speaking of which, any book recommendations? Genre or subject is irrelevant so long as the book is good. I just loaded Hallucinations by Sacks onto my ereader but that will probably not last the week.

                                              1. 2

                                                Thanks for the suggestions! I’ve never read Simmons, but I’ll check this out. And Vonnegut is always fun.

                                                1. 1

                                                  Thanks, added to the list.

                                                  1. 1

                                                    This seems pretty interesting. Thanks!

                                                  2. 1

                                                    The Three Body Problem Trilogy. My favorite Sci-Fi series.

                                                    1. 1

                                                      I’ll download it and add to the list. Thanks!

                                                  1. 2

                                                    Going with my wife to her former workplace (a very nice seafront touristic village). She will hang out with former colleagues, I will relax reading “Deep Learning” by Goodfellow, Bengio and Courville and improving my Golang scraper.

                                                    1. 1

                                                      How do you like scraping in go? I have done tons of scraping with python, and I imagine (perhaps wrongly) that not having a REPL to create scrapers is pretty difficult. Of course, ease of concurrency might make up for it.

                                                    1. 4
                                                      1. Et cetera
                                                      2. Lib, rhymes with bib.
                                                      3. Care as in care free, bears.
                                                      4. Like physic.
                                                      5. Schema (sounds like schemer); pluralized like schemers.
                                                      1. 2

                                                        I would come by if I am in town.

                                                        1. 4

                                                          Going to seen an opera in a graveyard.