4 ms·
I write haskell code all day. I spend my day writing it at work (with occasional HN breaks obviously) and then I go home and write personal projects in it. I
by papsosouid 14y ago
I write haskell code all day. I spend my day writing it at work (with occasional HN breaks obviously) and then I go home and write personal projects in it. I advocate haskell on a semi-regular basis. I certainly fall on the pro-haskell side of things. But GHC absolutely does not meet all those bullet points.
Compiler speed is not some minor difference, it is absolutely massive. Build times of 30 seconds vs 2 seconds, and that is without counting the 10 seconds of cabal resolving dependencies.
>Go comes with a complete set of documentation available from the command line
GHC does not come with command line docs.
>All Go code is statically compiled so deployment is trivial
GHC links in C libs dynamically, and as far as I can figure there is no way to get static linking working, so I have to have all the same C libs installed on my production servers as my build server. With go you can just upload your binary to a bare bones server and it works.
>but it also has a tool to clean up code: gofmt
GHC has nothing like this.
>And there's also go fix which can automatically convert Go code designed for earlier versions to newer versions
Or this.
Haskell is a great language, but it does not match go's toolchain.
- car54whereareu 14y agoActually if you import "net" go links to libc.so and some others.
- stock_toaster 14y agoI believe "net" does so for native dns lookups. You can disable that by building go with 'CGO_ENABLED=0', if desired.
- 4ad 14y agoThat is correct. It uses libc for resolving names because systems might be configured to use NIS or LDAP before DNS. With cgo disabled it defaults to using its own DNS resolver and resolv.conf.
- papsosouid 14y agoAh, if the original bulletpoints for go are wrong then ghc may be more comparable than I figured. Can you statically link go binaries? As in, if I am using a go postgresql binding, can I build a binary with libpq (the postgresql C library) linked in statically, so it can be deployed on servers with no postgresql libraries installed?
- cdoxsey 14y agoFrom what I understand cgo doesn't currently support static linking like this.
- Peaker 14y ago> Compiler speed is not some minor difference, it is absolutely massive. Build times of 30 seconds vs 2 seconds, and that is without counting the 10 seconds of cabal resolving dependencies I simply did not play with Go to know the compilation speeds. I believe you that it is a massive difference, and it is indeed a major Go advantage. > GHC does not come with command line docs. The haddocks are available from the command line. So I don't know what this means. Hoogle is available from the command line. > GHC links in C libs dynamically Ah, I see. Did you try -optl-static? I haven't, but it might work. > GHC has nothing like this. There are tools to format Haskell code by certain conventions on hackage.
- tikhonj 14y agoThis is a complete aside, but what are the good tools for formatting Haskell code? I've been using stylish-haskell, but it's somewhat limited and barfs on certain Unicode identifiers I like to use. (I should probably file a bug report for that...)
- Peaker 14y agoDon't know anything better than stylish-haskell, but AFAIK it fits the bullet point completely.
- papsosouid 14y ago>Hoogle is available from the command line. Hoogle is roughly the equivalent. It doesn't come with ghc though, and the rather lengthy dependency list has caused problems getting it installed before. Is there a command line only version that doesn't need all the web stuff? >Did you try -optl-static? Yeah, no such luck. It turns out go can't do this either though, so that one shouldn't have been on the list in the first place. >There are tools to format Haskell code by certain conventions on hackage. The "being included with the compiler" aspect is pretty big here. People are much more likely to format their code if they already have the tool to do it. I'm not sure what you mean by tools available on hackage though. Stylish-haskell is about it, and all it does is align and sort imports/pragmas. Gofmt can basically rewrite go code however you want it to. Sort of like if hlint were built in to stylish haskell and did the replacements instead of suggesting them.