6 ms·
Experiments with Ruby and Go
- ExpiredLink 11y agoIt's funny that many people don't distinguish between language and standard (or default) libraries.
- throwaway125 11y agoIt's because the distinction isn't meaningful for day to day use. People use and compare languages and their standard libraries as a whole. I do think people recognize the fact that these two are different things (e.g. when comparing C to a language with a richer standard library it's one of the points that are often specifically and separately mentioned.), but it's just not very useful to separate them explicitely in a comparison of languages from a user's point of view (as opposed to a language designer's point of view).
- aikah 11y agoNot sure what you're talking about. Go provides No "methods" for arrays. You have to remember all these tricks : https://github.com/golang/go/wiki/SliceTricks https://github.com/golang/go/wiki/SliceTricks You can't even wrap them into functions or you'd have to write type assertions everywhere. Now,you could define a custom Array type with methods, but goodbye type safety. It's funny how sometimes Go works better as a "dynamically typed" language than as a statically typed one. Ruby on the other hand provides loads of methods for every single "core" type.
- bigdubs 11y agoThis is my biggest gripe with golang; I want to be able to write functional extensions for the blessed generic types (slice, map etc.), but can't. Until we can do things like this, or implement our own generic types, golang will be a niche language.
- virmundi 11y agoI don't think so. What you're saying is you want to apply a niche concept (fp, I know it's getting traction, but still pretty niche in the business world) to an OO language and have a hard time doing that. Golang is niche right now too, but the lack of functional ability is probably not going to to hugely affect anything.
- davelnewton 11y agoI'd disagree that FP is niche; the concepts are used throughout business, and more and more back ends are being written in an FP language. Front ends using JS are being written more and more in an FP style as well.
- tomblomfield 11y agoTwo things jumped out at me when I switched from Ruby to Go - Go speeds up my workflow since the compiler catches many of my errors. When I write Ruby, I'm about 75% confident it will be right first-time. With Go, that's about 95%. - I ended up thinking about every possible error. With Ruby, edge-cases would often only crop up after a few weeks of running the code in production.
- wiremine 11y ago> I ended up thinking about every possible error. Exactly. In Go you can't just wrap code in a try/catch block and not deal with the fall out. You can ignore errors with _, but you still have to explicitly write out _, so you visually see what you're ignoring. I think this is Go's simplicity is actually helpful. It feels like boilerplate at first, but there is something to being _forced_ to handle edge cases sooner rather than later.
- twblalock 11y agoIt's not just the try/catch thing. Ruby code can have a syntax error in a conditional that is rarely true, which may crop up in production from time to time. I've seen it happen many times, including in some popular Ruby libraries. A compiled language would have caught that.
- deleted 11y ago[deleted]
- 0x0dea 11y ago"Ruby code can have a syntax error in a conditional..." No, it can't. If this is something you've seen "many times", would you mind providing an example? Show me a program that Ruby tries to execute without having been able to parse it.
- TheDong 11y agoif foo.something foo.instance_eval "SYNTAX ERROR" end I know any form of eval is sort of cheating... But perhaps what he meant was not a syntax error, but things like: if foo.something foo.something_misspelled = bar end Which isn't technically a syntax error, but that code is invalid in a statically typed language.
- thomasahle 11y agoTotally have a look at Haskell next. It takes a while, but it's worth it :)
- bsaul 11y agoanyone else actually found the go code easier to understand than the ruby one liner combining sort, maps, reverse a funny "&" syntax (of which, as a non-ruby developer, the meaning isn't really obvious) ?
- the_af 11y agoNot me. I understand both code snippets, while being only passingly familiar with Ruby and not at all with Go. I can guess what the bits I'm unfamiliar with do. Ruby's code is more declarative, and seems to use common functional idioms, which make it very easy to understand ("map", "sort", "reverse", "take" mean mostly the same in a wide variety of languages). In this case I do not need to know what the computer is doing "close to the metal", just as I do not need to know the physics of asking someone to fetch me a glass of water. The Go snippet is also easy to understand, but it has more noise in the form of boilerplate. Here the name of the function is more helpful to understand what it's supposed to do. If the function was named GuessWhatThisDoes I'd figure what it does, but I'd have a harder time than with the Ruby version. To be honest, both snippets can be understood, but unless I truly needed to understand the step-by-step performance implications, I'd rather read the more declarative Ruby snippet.
- pizza234 11y agoWell, it's not very meaningful to compare a good example of something with the bad example of something else (one lines are generally considered bad practice also for this reason). If that line would be "optimized for readability", there would be at least one or two intermediate variables.
- bsaul 11y agoYet the author found the ruby code easier to understand. And I very often read praises about functional programming language's ability to chain functions in this fashion. I'm very often able to understand when two functions are chained the first time i read the line, but i very often have to read the line many times and decompose each parts above three.
- phamilton 11y ago
- phamilton 11y agoI'd highly recommend 7 Languages in 7 Weeks by Bruce Tate. It doesn't have Go, but it walks you through Ruby, Io, Prolog, Clojure, Scala, Erlang, and Haskell. It will give you a wide basic understand of why design tradeoffs have been made.
- fobbof 11y agoJava is not that bad too: https://gist.github.com/anonymous/b5c2b77545157a89d0b9 https://gist.github.com/anonymous/b5c2b77545157a89d0b9
- jorin 11y agoThank you for sharing, looks awesome! Can't believe this is Java code! I definitely need to checkout Java 8 at some point :)
- fobbof 11y agoJava is not that bad too: https://gist.github.com/anonymous/b5c2b77545157a89d0b9 https://gist.github.com/anonymous/b5c2b77545157a89d0b9