GOPHERSPACE.DE - P H O X Y
gophering on hngopher.com
HN Gopher Feed (2017-10-17) - page 1 of 10
 
___________________________________________________________________
Zig Programming Language 0.1.1: First beta release
73 points by moomin
http://ziglang.org/download/0.1.1/release-notes.html
___________________________________________________________________
 
steveklabnik - 2 hours ago
Congrats on the release! Zig is not my cup of tea, but I'm glad it
exists. I still owe you a full review sometime, Andy. Never enough
hours in the day.
 
vortico - 2 hours ago
Andrew Kelley makes some great projects! Some other ones are the
libsoundio cross platform playback/recording library and the
genesis DAW.
 
ngrilly - 2 hours ago
Andy, is it a coincidence or have some features of Zig been
inspired by Go? More specifically: defer, the syntax for the array
type with [] as a prefix instead of a suffix, and the syntax for
array literals.
 
  AndyKelley - 2 hours ago
  Yeah both of those were inspired by Go, which I'm sure were
  inspired by older ideas.There's nothing new under the sun. What
  Zig brings to the table is high quality engineering and bringing
  the ideas together in a way that makes sense.
 
    ngrilly - 1 hours ago
    Incremental improvements and cross-pollination are great! I
    don't need a language with manual memory management for my
    current projects, but I'll definitely keep an eye on Zig. It
    solves most things I dislike in C, and keeps the good stuff.
 
Sir_Cmpwn - 3 hours ago
I spent some time with Zig a while ago. Here are my conclusions:-
The string handling is braindead- The compiler and stdlib is
immature. This seems like the first programming language the guy
has written. You should have a few failures to learn from before
you make a Serious Programming Language imo.- Code run at compile
time is a neat idea but has a weird syntax and really really
complicates the internals of the compiler and related
tooling.Unfortunately this is no C replacement IMO.
 
  AndyKelley - 3 hours ago
  Note: The set of people in the Zig community who are blocked is
  size 1 and it is Sir_Cmpwn. He is blocked for being rude,
  destructive, and making a large number of incorrect claims, which
  he ignores the rebuttals to.
 
    Sir_Cmpwn - 2 hours ago
    If you're going to make claims like this in public I think you
    had better back them up.
 
    bpicolo - 2 hours ago
    Hey Andy,I'm getting a 403 on your docs page:
    http://ziglang.org/documentation/
 
      AndyKelley - 2 hours ago
      The link was outdated in the README. Fixed.
      http://ziglang.org/documentation/master/
 
  halayli - 2 hours ago
  Your feedback is not constructive. At least give examples why
  it's stdlib is immature or why the string handling is braindead
  and what you think is missing. This way the community would know
  more what to work on.
 
    Sir_Cmpwn - 2 hours ago
    I should have mentioned that I approached Zig with my feedback
    at that time and engaged in discussions on the matter. My
    concerns were largely disregarded.
 
sitharus - 2 hours ago
I think it?s great people keep experimenting with new languages.
Sure many will die off and be forgotten, but the people involved
will learn and create. If we keep waiting for someone else to make
the perfect language we?ll never get anywhere.I like how error
handling is structured, though I?m undecided on if I prefer a
specific case of a more extensible system. Pretty sure it?s right
for 80% of cases though.
 
lossolo - 2 hours ago
Syntax looks almost exactly like Rust with some elements from Go
and D.What about memory management ? They say there is no GC so
manual memory management? Any memory safety features ?
 
ngrilly - 2 hours ago
There are two really interesting ideas in Zig that I'd like to find
in Go:- The %% operator and the %return expression used to simplify
error handling.- The concept of compile-time parameters used to
implement generic functions and generic data structures.
 
e12e - 56 minutes ago
Well, it certainly looks ambitious. But... It's not very pretty?
Looks a bit like an unholy union of TeX and C?https://github.com
/zig-lang/zig/blob/master/example/cat/main...
 
keithnz - 10 minutes ago
Does Zig have a compile to C option?  This would open it up to a
massive embedded world.
 
timthelion - 3 hours ago
I think that it is sad that we keep on creating new programming
languages that are not radically different. The Zig language
ecosystem faces the same problems as C and the compiler will
preform many of the same tasks, lexing, parsing, optimizing,
documentation, supporting all sorts of weird edge cases and use
cases. From what I see in the introduction, I don't see a
convincing case for a new language here. This kind of
incrementalism is not worth another persons years of effort to
create a parallel path.I think that if you are going to spend years
creating a new language, you ought at least to try something new.
Otherwise, you become just another amateur landscape artists. Maybe
you're paintings will look nice, but they'll never really be of any
great value to society.
 
  sitharus - 2 hours ago
  The problem with incremental improvements is you have to keep
  backwards compatibility. This is a big issue when it comes to
  keywords. For instance this is valid C#:  using async =
  Task;   class BadIdea {     public async async
  async(async async) { }   }
 
    steveklabnik - 2 hours ago
    Rust has a fun similar one. I'm assuming for the same reason as
    C#: contextual keywords.  union union<'union> {       union:
    &'union union<'union>,   }  https://github.com/rust-
    lang/rust/blob/59675d29eb47eb743026d...
 
      AndyKelley - 1 hours ago
      please, I have to know, what is evil_lincoln testing?
 
        steveklabnik - 1 hours ago
        This is why I love this file.To understand what
        evil_lincoln is doing, you have to understand very old
        Rust. Here's the commit that introduced it:
        https://github.com/rust-
        lang/rust/commit/664b0ad3fcead4fe4d2...  fn evil_lincoln()
        {       let evil <- log "lincoln";   }  log was a keyword
        to print stuff to the screen. Hence the joke,
        https://en.wikipedia.org/wiki/Lincoln_LogsNow that log is
        the println! macro, the joke is lost.It doesn't say
        explicitly why this is "weird", but given some other
        comments in the file,  // FIXME: Doesn't compile   //let _x
        = log true == (ret 0);  I am assuming that using the return
        value of log was buggy, and so this tested that you could
        save it in a variable. I don't remember the exact semantics
        of log, but if it's like println!, it returns (), which is
        useless, so binding it to a variable is something you'd
        never write in real code, so it's "weird" in that sense.
 
  hota_mazi - 2 hours ago
  > This kind of incrementalism is not worth another persons years
  of effort to create a parallel pathHistorically, incrementalism
  is pretty much the only way that languages can reach mainstream
  status e.g. C/ObjC/Javascript/C++/Java/C#/Kotlin.Of course,
  having languages that break away from the mainstream is equally
  important to generate new avenues of research, but it's clear to
  me both approaches are a requirement for a healthy PLT field.
 
  ngrilly - 2 hours ago
  I disagree. We don't have enough incremental improvements,
  because it's difficult to improve a language and migrate the
  existing code base at the same time. I'd be happy with a better C
  (for example get rid of header files and #include), a better
  Python (for example better parallelism without a GIL), a better
  Go (for example with a solution for generics and marginally less
  verbose error handling), a better JavaScript, etc. I'm mentioning
  "mainstream" languages on purpose.
 
gsnedders - 3 hours ago
So why would I be interested in Zig rather than Rust, if I'm trying
to replace C code with something safer and more modern?
 
  AndyKelley - 2 hours ago
  https://github.com/zig-lang/zig/wiki/Why-Zig-When-There-is-A...
 
  ngrilly - 2 hours ago
  For example: "The motivation for this design philosophy is to
  enable users to write any manner of custom allocator strategy
  they find necessary, instead of forcing them or even encouraging
  them into a particular strategy that may not suitable for their
  needs. For example, Rust seems to encourage a single global
  allocator strategy, which is not suitable for many usecases such
  as OS development and high-performance game development."
 
    steveklabnik - 2 hours ago
    NB: that is sorta true right now (as the sentence says, "seems
    to"), but it's also an area of active work; we don't expect
    Rust to end up that way.To elaborate a bit:Right now, the
    standard library relies on an allocator. The language itself
    does not. If you want to write your own types and back them up
    by your own allocator, you can 100% do that today. But that
    doesn't help you with any of the stuff in the stdlib.We have
    work on:1. A trait for allocation, so that allocators can have
    the same APIs. https://github.com/rust-lang/rust/issues/328382.
    Swapping out that allocator entirely, wholesale. Tor and
    Firefox both want this. https://github.com/rust-
    lang/rust/issues/273893. Allowing you to swap out the allocator
    of stdlib types on a per-instance basis; this almost had an RFC
    for the needed machinery, but was postponed. Will probably come
    up again in the coming year after #1 & #2 get resolved.
 
      ngrilly - 2 hours ago
      Duly noted ;-)