Hacker News new | past | comments | ask | show | jobs | submit | gumby's comments login

I haven’t heard of any investigation, much less charges leveled, of people who protested but did not enter the Capitol.

People who might know of / ultimately be charged with incitement have been subpoenaed, but again, I don’t know of any charges. Anyone pressing such charges will have to show a clear line between first amendment speech and not, so they are going to be careful not to waste their time.

Oh boo hoo. People who want to actually do business with Canada will simply select vaccinated drivers; the unvaccinated can continue to deliver domestically.

An idiotic article characteristic of the “business press”

This article mentions it too. No need to switch to a different billionaire to get this info.

Why assume that they are ideological enemies? I’m sure there are plenty of govt officials who filed such requests and many many more who, though they don’t object to vaccination, want to ensure that religious rights are protected and want to make sure that when they feel the need to object to something or ask for an exemption, that that will be honored.

Certainly it’s worth collecting statistics on who requested what to guide in future rule making. I do think this kind of data collection should be conducted by the census bureau, which does have an expertise and practice on privacy-protecting statistics collection and analysis.

Separately, it does appear that very few people care about their privacy at this level. People accept driving around with huge serial numbers attached to their vehicle for all to see; driving licenses with names and addresses on them; an inability to get an anonymous PO Box; electronic tolls that collect driver information rather than being anonymous…I could go on at great length.

I have never heard of Galesburg but I found this analysis riveting. Somehow it was more informative to me than the Strong Towns posts.

I suspect you can extend this analysis to the country at large. The national budget suffers from the same imbalance.

I wonder if clickbait and doomscrolling exploit the same cognitive mechanisms as gambling addiction.

At the end of the day several things made fexprs unnecessary.

One was the development of the macro which offered more powerful syntactic transformations (i.e. greater expressive power) in a simpler way.

The second was that they weren’t really powerful enough to provide metasyntactic extension at runtime.

You could get a lot of that power by running the macroexpander at runtime but I’ve never seen anyone do that…because who really needs it?

I worked on the 3-Lisp implementation at PARC. What I realized was that while indeed it unlocked the power to write metasyntactic operations (I.e. special forms like new control flow) it turned out the same set of existing control flow operators (e.g. cond, booleans, throw) seem to be adequate. The overhead (cognitive and in the implementation) of fexprs isn’t really worth the ability to do things like lazy evaluation and generators when there are already perfectly adequate mechanisms available

> The overhead (cognitive and in the implementation) of fexprs isn’t really worth the ability to do things like lazy evaluation and generators when there are already perfectly adequate mechanisms available

I would argue precisely the opposite. FEXPRs went away because they were too powerful. You don't need a macro system when you have FEXPRs as it doesn't buy you anything.

Compiling FEXPRs can be difficult, however. Compiling MACROs is easy because they are, by definition, bounded--they just go from source-to-source (more on this later).

And everybody in Lisp-land who weren't just computation theorists were obsessed with speed back then. So, FEXPRs had to go.

Tcl is very close to FEXPRs; Shutt's thesis shows it just didn't quite go far enough.

In addition, Steve Russell didn't add these to Lisp just because. Every piece of code was precious back in those days. If Steve Russell added it, he had a really good reason. I mean, he didn't even invent continuations until faced with mutual recursion.

"quote" is actually the interloper--not FEXPRs. Even Alan Kay saw this way back.

Quoting Alan Kay:

> The biggest hit for me while at SAIL in late '69 was to really understand LISP. Of course, every student knew about car, cdr, and cons, but Utah was impoverished in that no one there used LISP and hence, no one had penetrated the mysteries of eval and apply. I could hardly believe how beautiful and wonderful the idea of LISP was [McCarthy 1960]. I say it this way because LISP had not only been around enough to get some honest barnacles, but worse, there were deep flaws in its logical foundations. By this, I mean that the pure language was supposed to be based on functions, but its most important components—such as lambda expressions, quotes, and conds—were not functions at all, and instead were called special forms. Landin and others had been able to get quotes and conds in terms of lambda by tricks that were variously clever and useful, but the flaw remained in the jewel. In the practical language things were better. There were not just EXPRs (which evaluated their arguments), but FEXPRs (which did not). My next question was, why on earth call it a functional language? Why not just base everything on FEXPRs and force evaluation on the receiving side when needed? I could never get a good answer ...

So, even as far back as 1969, the fact that FEXPRs were "theoretically messy" was already causing them to be ignored. The "big thinkers" required source-to-source transformation or they couldn't publish papers--run-time interpretation need not apply.

Look at how long "mutation" remained a "problem" in the theoretical computation community while FORTRAN just simply trundled along and solved people's problems. Now, think about what those same theoreticians would think about FEXPRs that takes "mutation" and turns it up to 11.

The theoreticians simply banished FEXPRs rather than have to think about them.

Thanks for explaining this. I've been wondering about why FEXPRs disappeared ever since the first time I read about them. Such a simple and elegant idea that for some reason was replaced by macros which are much harder to understand. Also explains why functions aren't lists of code fragments which you can manipulate.

>run-time interpretation need not apply

...because it can eval? ;)

>Why not just base everything on FEXPRs and force evaluation on the receiving side when needed?

PostScript is a lot like Lisp, where everything is an FEXPR. You pass around executable arrays to control flow functions like "if" and "for", and can write your own like "send".

NeWS used an object oriented programming system that was a lot like Smalltalk with multiple inheritance, which leveraged the PostScript dictionary stack so it was quite efficient. PostScript object references (independent of the object it points to) can be executable or literal. Code in PostScript is represented by executable arrays, executable names are looked up on the dictionary stack, and their corresponding values are executed (literal arrays and other objects are pushed, executable arrays have their elements executed in order, etc.)

As well as "send"ing an executable name to an object to execute a method by that name in its scope (by loading its instance/class/superclass/etc onto the dictionary stack), you could also "send" an executable array to an object to execute that code in the context of the object. (But that was not a common practice, just the way it happened to work because of how it was implemented.)

James Gosling's Emacs Mocklisp was like FEXPRs on PCP, with support for prompting the user to supply omitted arguments.


DonHopkins on May 10, 2017 | parent | context | favorite | on: Emacs is sexy

Hey at least Elisp wasn't ever as bad as Mock Lisp, the extension language in Gosling (aka UniPress aka Evil Software Hoarder) Emacs.

It had ultra-dynamic lazy scoping: It would defer evaluating the function parameters until they were actually needed by the callee (((or a function it called))), at which time it would evaluate the parameters in the CALLEE's scope.

James Gosling honestly copped to how terrible a language MockLisp was in the 1981 Unix Emacs release notes:


    12.2. MLisp - Mock Lisp 

    Unix Emacs contains an interpreter for a language 
    that in many respects resembles Lisp. The primary 
    (some would say only) resemblance between Mock Lisp
    and any real Lisp is the general syntax of a program, 
    which many feel is Lisp's weakest point. The 
    differences include such things as the lack of a 
    cons function and a rather peculiar method of 
    passing parameters. 
"Rather peculiar" is an understatement. More info, links and code examples:


I was just recently writing about how PostScript is "homomorphicier" than Lisp, because it has a shorter more elegant Quine (but let's try not to think about BASIC):


Speaking of writing PostScript with PostScript, Stan also wrote an elegant PostScript Quine, which is even shorter than the Lisp Quine (PostScript is like a cross between Lisp and Forth, but homomorphic and more like Lisp actually -- but PostScript is even homomorphicier than Lisp because it has an even shorter Quine!):


    Date: Thu, 14 Sep 89 20:29:28 -0400
    To: [email protected]
    Subject: A PostScript Quine
    From: [email protected]  (Stan Switzer)

       "'Yields falsehood when preceded by itself in quotes" yields
       falsehood when preceded by itself in quotes." -- W. V. O. Quine

    A "quine" is a program which when evaluated yields its own
    representation.  A quine can be formally described as a fixed point of
    a language's denotation function.  Trivial evaluations (e.g.:
    literals) are excluded and the program cannot require any input data
    (e.g.: "cat cat.c").

    In my experience, the merit of a language is inversely related to the
    length of its shortest quine.  (Though I _am_ prejudiced toward
    reflective semantics.)

    For the heck of it, let's say a PostScript quine is a procedure
    "{...}" which when followed by "n { exec } repeat" yields the same (or
    equivalent) value for any non-negative integer value of "n"
    (including 0).

    The shortest I have found for PostScript is

      {{[ exch /dup load /exec load ] cvx} dup exec}

    Compare to Lisp:

      ((lambda(f)(list f (list 'quote f))) '(lambda(f)(list f (list 'quote f))))

    or (ASCII) C:


    Not that it'll change your life or anything...


    Stan Switzer  [email protected]
The only problem I have with Stan's theory about the merit of a language being inversely related to the length of its shortest Quine is the existence of "10 LIST" in BASIC, which is a decidedly un-meritorious language. But to its credit, DECSYSTEM 10 BASIC even has a "LISTREVERSE" command, which might be useful for implementing a Eniuq. For what it's worth, "10 LIST" and "10 LISTREVERSE" are also Line-by-Line Palendromic Quines, since single line programs are the same listed forwards and backwards. https://news.ycombinator.com/item?id=20007960

>LISTREVERSE and LISTNHREVERSE print the contents of the user's memory area in order of descending line numbers. LISTREVERSE precedes the output with a heading, LISTNHREVERSE eliminates the heading.

Stan now works at Adobe (of course, how could they NOT hire him after he wrote that beautiful PostScript Quine! ;) ):






HyperLook SimCity Demo Transcript: This is a transcript of a video taped demonstration of SimCity on HyperLook in NeWS.


SimCity, Cellular Automata, and Happy Tool for HyperLook (nee HyperNeWS (nee GoodNeWS)): HyperLook was like HyperCard for NeWS, with PostScript graphics and scripting plus networking. Here are three unique and wacky examples that plug together to show what HyperNeWS was all about, and where we could go in the future!


> PostScript is a lot like Lisp, where everything is an FEXPR. You pass around executable arrays to control flow functions like "if" and "for", and can write your own like "send".

TECO had that property too and it made it easy to write incomprehensible code (even for those of us who grokked the syntax)

So you're saying that Gosling's Emacs MockLisp was even more like the original TECO in Original Emacs than Gnu Emacs Lisp??!

Mistaking the path for the journey.

(Or more prosaically, mistaking the how for the what or the process for the goal)

I think you and the author are using different definitions of “hero”.

When I read your comment I think of the classic Campbell hero, a presumed universal archetype also familiar, if slightly different from the ancient Greek or Mahabarata heroes. Luke Skywalker was consciously modeled on this definition.

I think the author, despite referring to Yoda, is referring to the American archetype of hero: the lone white gunman on the frontier. The argument against this is that teams are more effective for large projects and teams done work with such a “hero” (NBA teams are great examples of this).

My comment is not about the coherency, or lack thereof, of the post.

You know what, you mention something that has pissed me off with a recent evolution of American culture by citing two examples I find relevant, so I'll expand.

Star Wars is a 1977 movie. It actually consciously uses the codes (and copies some scenes!) of WWII war movies. What are the heroes doing in it? They are helping a big organization (the rebellion) fight a formidable enemy. Just managing to flee from such an enemy is a heroic endeavor.

Compare it to today. In most, if not all, blockbuster movies, organizations that the heroes belong to are either incompetent, corrupt, are a hindrance when they are not the main antagonist. There is a total loss of the idea that belonging to an organization can make sense and can help a personal journey.

Sheriffs, policemen, journalists, they used to be the heroes of various fictions. Now we seem to refuse to believe that these can be heroes. We refuse to believe that collaboration with a team can be effective. Actually, now it is a trope that if the hero has a trustworthy associate, treason will happen some time in the storyline.

And somehow I understand what it is about: people are disgruntled with their work. They realize the company they are working in is not helping their personal hero's journey and hindering it. But really, the reaction that "therefore I shall do it all alone" is really bad.

Agreed. There are are far too many stories nowadays which say we are living in times where the courage of men fails and we should break our bonds of fellowship.

But today is not that day!

You're bothered that movies don't seem as authoritarian as they used to be. Do you realize that's what you've said?

Someone telling you what to do is not inherently authoritarian. Your claim is over the top.

For example, roads have enforced speed limits. Those are typically set in a technocratic way: traffic engineers look at surrounding conditions, design constraints of the road itself etc and set a number. That process is subject to oversight (which can be wrong or right) that provides some democratic accountability. Building codes are another good example.

It’s generally better to go along with such rules as a form of delegated decision making and expertise. And when you are freed from having to make a decision on every little thing (do I believe the label of the provenance of these eggs?) you can go forward to, you know, live your life.

When you consider that the opposite to individualism is authoritarianism, there has been a cultural failure in society.

There is a difference between authoritarianism and believing it is worth seeking out a trustworthy team.

> I suspect once she goes to school she’ll give up Japanese in favor of English

That's not necessarily the case; we spoke German in the home and our son remained personally comfortable continuing in German with us (speaking, reading, texting etc) through leaving the house for university.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact