cross-posted from: https://lemmy.today/post/34279957

guix shell sees to it that all of the dependencies (listed in the inputs and native-inputs sections) are available within the shell session it creates by downloading (or building, if necessary) the entire dependency tree.

Should you want/need more isolation from the host system, guix shell has you covered. The --pure flag will clear out most existing environments variables, such as $PATH, so that the resulting environment does not contain pointers to places like /usr. For more Docker-like isolation, the --container flag can be used, which will run the new shell session within a set of Linux namespaces so that the host system is inaccessible.

  • cecilkorik@lemmy.ca
    link
    fedilink
    English
    arrow-up
    5
    ·
    12 days ago

    Guh, someday I am going to have to learn that bracket-based syntax (lisp?) that keeps popping up on particularly interesting projects but I can never be bothered to learn.

    • frankenswine@lemmy.world
      link
      fedilink
      arrow-up
      3
      ·
      12 days ago

      it’s as simple as

      (command argument0 argument1 argument2)
      

      meaning arguments 0, 1 and 2 are applied to command. when an expression is evaluated it dissolves into a value according to its context.

      (+ 1 2 3)
      ; evaluates to 6 in a context where + actually means an addition or sum operation
      
      (* 2 (+ 4 3))
      ; evaluates to 14 (i think)
      

      the absolute killer feature is the elimination of idiotic, man-made madness excused with the term “operator precedence”

    • Ephera@lemmy.ml
      link
      fedilink
      English
      arrow-up
      2
      ·
      12 days ago

      Yeah, the style of syntax originated in LISP. The technical name is S-expressions.

      But yes, the basic syntax rules are extremely simple. It’s rather when you actually want to do something with that syntax that it takes some thinking…

      • HaraldvonBlauzahn@feddit.org
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        7 days ago

        Plus, any good editor will arrange the indentation to make nesting clear. For experienced Lisp / Scheme programmers, the parens nearly disappear, like commas or semicolons for c++ programmers.

    • hono4kami@piefed.social
      link
      fedilink
      English
      arrow-up
      1
      ·
      12 days ago

      Somehow it’s not the bracket syntax that stopped me.

      It’s the amount of dialects LISP has. Way too many of it. I don’t know where to start

    • HaraldvonBlauzahn@feddit.org
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      7 days ago

      As a first approximation, there is not much to learn. The lisp syntax thing is a scarecrow for the uninformed

      In Python, you write:

      a = atan2(x, y)
      b = sin(x)
      c = b if x > a else 1
      # use values of a, b and c here
      

      Where the indentation is a block.

      In Scheme, you write:

      (let ((a (atan2 x y))
            (b (sin x))
            (c (if (> x a) b 1)))
             ; use values of a, b, and c here
      )
      

      Where the outer paren around “let” determines the scope of the binding, and the scope serves as an expression with a value (like in Rust), and scopes can be nested arbitrarily deep.