Hacker Newsnew | past | comments | ask | show | jobs | submit | aidenn0's commentslogin

I bounced off of both Baldur's Gate when it was new, and Planescape: Torment 20 years after it was new.

Nix mostly does not guarantee deterministic output. It rather guarantees deterministic inputs, and then sandboxes the system to inhibit the build from accessing the outside world.

Deterministic inputs do not always imply deterministic outputs.


Indeed, the Reproducible Builds community is working on fixing non-deterministic build output https://reproducible-builds.org/

A lot of places did over-hire, but I'm suspicious that those places will successfully cut the fat rather than the muscle.

At work once someone dockerized a service that needed read access to NFS. The default for a docker image is to run as root, which would mean it was effectively "nobody" when reading over NFS.

For the typical case of world-readable files this was fine. Occasionally someone would feed it a file that was not group-readable but not world-readable and it would error (when it would have worked before).

I suggested printing the error message: "nobody can't read this file" but we solved it in a different way.


Kind of a non-issue when we won't let them stay. I know several Chinese nationals who: received STEM degrees in the US, really wanted to stay, but struggled to get a visa and ended up back in China.

"Ordinary people" can be moved to action by moving statements from people they look to for leadership.

It's an open letter from the pope. An encyclical will often clarify Church doctrine on a topic, or set of topics. See e.g. Humanae Vitae[1] for an example of one that has resulted in, essentially, a lay rebellion — at the time it was issued many clergy, including Bishops opposed it, but the Church itself has gradually become far more conservative (perhaps as a reaction to Vatican II) in the intervening years.

1: https://en.wikipedia.org/wiki/Humanae_vitae


About 50 years by Wikipedia's reckoning.

The use of cl:eval alone is enough to make me believe that the CL column was never reviewed by an experienced CL programmer. I am now more suspicious of the other columns, which are languages I'm far less familiar with.

> I am now more suspicious of the other columns, which are languages I'm far less familiar with.

It's not bad but for Clojure for example it says "nil is like null in Java" but null in Java is not falsy.

And it also says that destructuring is "named parameters" but it's not so: it's just destructuring (and there are two examples of destructuring given: one for the "named parameters" which aren't named parameters, and one for "parallel assignment" of local variables).

Nothing bad but it's not possible to go into much details in such a table.


CL list comprehension:

  (loop for file across "ABCDEFGH"
        nconc (loop for rank from 1 to 9
                    collect (format nil "~C~D" file rank)))

Or with more Python-esque syntax:

    (let ((files (coerce "ABCDEFGH" 'list))
          (ranks (loop for r from 1 to 9 collect r)))
      [(format nil "~a~a" file rank) (file <- files) (rank <- ranks)])
Based on the list comprehension macro from 1991 in https://3e8.org/pub/scheme/doc/lisp-pointers/v4i2/p16-lapalm... that still works.

    (defmacro comp ((e &rest qs) l2)
      (if (null qs) `(cons ,e ,l2) ; rule A
          (let ((q1 (car qs))
                (q (cdr qs)))
            (if (not (eq (cadr q1) '<-)) ; a generator?
                `(if ,q1 (comp (,e ,@q) ,l2) ,l2) ; rule B
                (let ((v (car q1)) ; rule C
                      (l1 (third q1))
                      (h (gentemp "H-"))
                      (us (gentemp "US-"))
                      (us1 (gentemp "US1-")))
                  `(labels ((,h (,us) ; corresponds to a letrec
                              (if (null ,us) ,l2
                                  (let ((,v (car ,us))
                                        (,us1 (cdr ,us)))
                                    (comp (,e ,@q) (,h ,us1))))))
                     (,h ,l1)))))))

    (defun open-bracket (stream ch)
      (do ((l nil)
           (c (read stream t nil t)(read stream t nil t)))
          ((eq c '|]|) `(comp ,(reverse l) ()))
      (push c l)))

    (defun closing-bracket (stream ch) '|]|)

    (set-macro-character #\[ #'open-bracket)
    (set-macro-character #\] #'closing-bracket)
Supports filtering too, e.g.

    (let ((xs '(1 2 3 4))
          (ys '(1 2 3 4)))
      [(+ x y) (x <- xs) (y <- ys) (evenp x) (oddp y)])
    ; -> (3 5 5 7)

I didn't try macroexpanding it yet, but when I make the 9 a runtime-parameter, I eventually get a stack-overflow with SBCL not TCO-ing the "H" binding in labels.

The comments make me think this is ported from scheme, which has precise TCO rules.

[edit] macroexpanded:

    (LABELS ((H-37 (US-38)
               (IF (NULL US-38)
                   NIL
                   (LET ((FILE (CAR US-38)) (US1-39 (CDR US-38)))
                     (LABELS ((H-43 (US-44)
                                (IF (NULL US-44)
                                    (H-37 US1-39)
                                    (LET ((RANK (CAR US-44)) (US1-45 (CDR US-44)))
                                      (CONS (FORMAT NIL "~a~a" FILE RANK) (H-43 US1-45))))))
                       (H-43 RANKS))))))
      (H-37 FILES))

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

Search: