7 ms·
Programming Idioms
- kashfi 6y agoThanks for sharing.
- saagarjha 6y agoThese kinds of collections can be nice, but I think it’s fair to warn against looking at them too closely. Sometimes they’re not actually idiomatic and often the implementations have differences in them that see non-obvious.
- tgv 6y agoAnd some have problems: the Python example of reading a file into a string is: lines = open(f).read() which doesn't close the file. The second C example of this task is tricky, and seems to miss an offset. The C and Go implementations of uniform random integer include the upper limit, the Python and Rust implementations don't. And that's just from quickly browsing.
- KnobbleMcKnees 6y agoThis is really cool and seems pretty up-to-date ... which leaves me surprised that Obj-C is present but Swift isn't. (Even moreso considering that both Java and Kotlin are present).
- val_deleplace 6y agoYou can vote for Swift here https://github.com/Deleplace/programming-idioms/issues/30 https://github.com/Deleplace/programming-idioms/issues/30
- junke 6y agoSorry, [Common Lisp] is currently not a supported language. New time sink avoided.
- hazbo 6y agoPrevious discussion: https://news.ycombinator.com/item?id=21080606 https://news.ycombinator.com/item?id=21080606
- decentralised 6y agoI figured it would be ok since it's been over 6 months since it was last posted and I only found out about it today :-)
- LandR 6y agoThe clojure one to reverse a string makes it a sequence of characters, then reverses that sequence and puts it back together again as a string.. Why not jsut: (require '[clojure.string :as str]) (let [s "hello"] (str/reverse s)) => "olleh" Reversing a string is in the core library...
- diggan 6y agoWell, clojure.string/reverse is relying on StringBuilder so I guess you could call it not just Clojure but Clojure + Java really. Source for clojure.string/reverse is this: `(.toString (.reverse (StringBuilder. s))))` (The implementation of clojure.string/reverse) would only work on Clojure running on JVM. Clojure-clr, ClojureScript or any of the other ones, would use a difference implementation, not using StringBuilder. `(apply str (reverse s))` is then I guess "more" general across Clojure implementations. So Clojure is using StringBuilder, ClojureScript is using regexes + split to list + reverse + rejoin, ClojureCLR I'm not sure, but probably something C# specific. But in the end, that's all semantics and the point is moot. Since Clojure is a pragmatic language, using an already defined function is obviously better, so no reason why you wouldn't use clojure.string/reverse, all the Clojure implementations have it exposed already.
- boomlinde 6y agoOn a related note, the problem is underspecified. > Create string t containing the same characters as string s, in reverse order. Original string s must remain unaltered. Each character must be handled correctly regardless its number of bytes in memory. What encoding? Assuming UTF-8, what is a "character"? A code point? A grapheme? The result of the lack of specification is that the different approaches really solve different problems. Some, like the C implementation, have a naive approach that only solves the problem in fixed size encodings where the width is equal to CHAR_BIT. Others I'm sure run into problems with combining characters
- bmn__ 6y agoSubmit a task/"idiom" with an improved/stricter spec and link back to the original one.
- natmaka 6y agoSee also http://www.rosettacode.org/wiki/Rosetta_Code http://www.rosettacode.org/wiki/Rosetta_Code
- jzer0cool 6y agoThis is a nice to have all in 1 place. This improves time when learning 1 language to another. I could get lost spending time here advancing what I already know (or don't know) and enjoy the format of the content here. What was your process like in going about getting the original content for the various languages? Are you you somewhat familiar with all these languages and how to the curators go about accepting (or denying) a new submission.
- val_deleplace 6y agoAuthor here: there were 2 initial use cases for me, (1) I'm familiar with the language X but I forget e.g. how to "check if a file exists" (2) I'm learning a new language Y, I know that "checking if a file exists" is a legit need and there must be an idiomatic way to do it in Y, so I look at the entry, alongside implementations in other languages that I'm more familiar with, so I can quickly spot the similitudes and the differences. I do (1) all the time because my brain has very little onboard memory. The website is open to contributions without prior validations. This means that not all snippets end up being both correct and idiomatic. I manually revert spam and "obviously incorrect" entries. For languages that I don't know very well, I encourage actual experts to fix snippets, or add a better new implementation, when they see poor contents.
- decentralised 6y agoGreat resource, thank you for building it!