15 ms·
A look at Crystal, a programming language for humans
- EyeSayUntoThee 3y agoCrystal has already "taken off" for me, in the sense that it does everything I need it to do. The standard library is replete with http client and server, as well as JSON, and a host of other useful bits, just have a look: https://crystal-lang.org/api/ https://crystal-lang.org/api/ Wrapping of C-libraries is a relatively painless experience: https://crystal-lang.org/reference/1.8/syntax_and_semantics/c_bindings/index.html https://crystal-lang.org/reference/1.8/syntax_and_semantics/... I can use any/all command-line utilities with an IO buffer (image processing, other out-of-band processing) The stock "DB" module supports Sqlite, MySql, and PostGres out of the box. SPEED: anyone "sticking" with RoR is not paying attention here: Crystal is a compiler and spits out a binary executable with low memory usage compared to it's interpreted cousin. This binary executable can be run by systemd as a normal system service, started with command-line options, etc. Apples-and-Oranges comparison: I've turned a nodejs-based app that used roughly 600mb memory into an executable using 12mb. The latter has also not leaked any substantial amount of memory after running for 5 months straight now (still says 12mb) so, take that as you wish... For me, Crystal has already arrived. I don't need group approval for this to be the case. I can happily use version 1.7.3 for the rest of eternity, so I don't see this rug being pulled from out from under me in the near future. Perhaps use private shard repos if this is your actual concern.
- lincpa 3y ago[dead]
- lgreiv 3y agoI wish Crystal would take off. It has so many things going for it (many of them mentioned in the article): performance, useful tooling such as an opinionated formatter, an integrated RSpec-like test framework, a powerful standard library, an awesome type system that gets out of the way most of the time, a familiar syntax. So far I have been building some smaller personal CLI tools and a few web apps (with the Lucky framework). I’ve also tinkered with running it in AWS lambda functions in a custom (albeit unfinished) runtime. Coming from a decade of Ruby, due to the similar syntax and mindset Crystal is my go to for cases where I need performance or runtime-less execution (e.g. in containers from scratch that contain only the binary and dependencies, if needed). Crystal's standard library provided enough functionality for me in the past to get away with only few dependencies per project, which is great for supply chain security and complexity. Some of it's highlights are: - an ergonomic HTTP::Server and client - OAuth / OAuth2 clients with token refresh - JSON/YAML/XML parsing/generation/mapping - JSON/YAML mapping to classes - native templating similar to ERB
- Mawr 3y agoDon't get your hopes up, Crystal is doomed to never become mainstream. We can divide programmers into two camps, those that enjoy programming itself and those who use it as a means to an end. The latter greatly outnumber the former, let's say 9:1. That massive disparity in numbers is why only the languages that enable the latter group thrive. Ruby is the perfect example, the language got a massive exposure boost due to Rails, but once the hype died down, everyone left. That's because beyond Rails, Ruby has nothing to offer to programmers who want to get stuff done. Nothing besides pain, of course. To those who enjoy playing with languages, "did you know there are 10 different ways you can filter an array in Ruby?" ([1]) is joyful to hear. But when you're woken up at 3am to find a bug in production `arr.reject(&:even?)` is the last thing you want to see. This sort of cleverness, ambiguity and implicitness in language design repels 90% of programmers, and that is the reason why languages like Perl, Ruby, Scala, and now Crystal are either dead, dying, or destined to die. [1]: https://news.ycombinator.com/item?id=35836570 https://news.ycombinator.com/item?id=35836570
- Mawr 3y ago(self-reply) Addendum: EWD 340 (Prof. Edsgar Wybe Dijkstra) [1]: "The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague. In the case of a well-known conversational programming language I have been told from various sides that as soon as a programming community is equipped with a terminal for it, a specific phenomenon occurs that even has a well-established name: it is called “the one-liners”. It takes one of two different forms: one programmer places a one-line program on the desk of another and either he proudly tells what it does and adds the question “Can you code this in less symbols?” —as if this were of any conceptual relevance!— or he just asks “Guess what it does!”. From this observation we must conclude that this language as a tool is an open invitation for clever tricks; and while exactly this may be the explanation for some of its appeal, viz. to those who like to show how clever they are, I am sorry, but I must regard this as one of the most damning things that can be said about a programming language. Another lesson we should have learned from the recent past is that the development of “richer” or “more powerful” programming languages was a mistake in the sense that these baroque monstrosities, these conglomerations of idiosyncrasies, are really unmanageable, both mechanically and mentally. " [1] https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340...
- deleted 3y ago[deleted]
- notmypenguin 3y agoThere’s really a lot to be said for an easily readable relatively terse language that compiles to a tiny binary executable with low memory usage and can be run as a service, profiled, etc. We use it extensively in production. I really would only ever consider Rust as an alternative, it’s that good.
- varjag 3y agoThere are two types of modern programming languages: those that look like C and those that look like Python.
- lkschubert8 3y ago+ Those that look like ruby?
- quickthrower2 3y agoRuby looks like Python
- sph 3y ago(concat '(c python) lisp-derived-languages) Also add Forth, Prolog, Brainfuck, Haskell/ML and Ruby. There's more to programming than you think.
- Izmaki 3y agoSo it's Python but with small syntactical differences?
- colesantiago 3y agoCan python compile to a binary with no extra tooling?
- actionfromafar 3y agoIf shedskin becomes ready, that would be a contender. It's really cool, it converts Python to C++.
- sph 3y agoSure, if Python were Ruby-like, it had `do` blocks, static typing, was compiled to native language with LLVM. But yeah, it has "if", "class" and a not-great multithreading story like Python.
- realusername 3y agoIt's more like a high-performance typed Ruby.
- k__ 3y agoend end end lol, I don't think so.
- qwertfisch 3y ago} } } It’s the same in languages with C-Syntax.
- ubertaco 3y agoIn the same way that a car and a boat are the same, but with small cosmetic differences.
- actionfromafar 3y ago
- p0w3n3d 3y agoIn my opinion a new programming language nowadays should focus on (in this order): 1. easy interfacing with existing library ecosystem (like e.g. C interfaces) 2. nice testing framework 3. good IDE with good context help and refactor plugins 4. syntactic sugars and improvements over other languages
- avg_dev 3y agoOn (3): see https://en.wikipedia.org/wiki/Language_Server_Protocol?wprov=sfti1 https://en.wikipedia.org/wiki/Language_Server_Protocol?wprov... LSP is pretty well supported in editors; it has emacs and vim and vscode support (a lot of other support as well). It makes it possible for any editor that supports LSP to be language aware (supporting the use of code completion, syntax highlighting, warning and error messages, and refactoring tools, per the Wikipedia article). All that is needed is for someone to implement a language server for the language. I used to use Perl a few years ago and even that had some (slightly buggy) LS implementations, which I found very helpful. I haven’t used Crystal but I did use Ruby extensively for some time, and having read this and some other articles about Crystal, I’m guessing (2) is well taken care of because of the aim of matching rspec functionality, and (4) by means of being Ruby-influenced. Not sure about (1).
- avg_dev 3y agoAlso see this comment: https://news.ycombinator.com/item?id=35828603 https://news.ycombinator.com/item?id=35828603 :(
- straight-shoota 3y agoCrystal core developer speaking: I think Crystal shines with these focus points, except 3. which needs some love (but it's on our radar). 1. C bindings are nice and easy 2. The integrated spec framework builds on the syntax of rspec and is quite capable. Of course it's opinionated, and there are alternatives in the ecosystem. 3. There are some IDE plugins with basic features. Context awareness in source code is an intricate problem because it requires a lot of semantic analysis. So it needs a bit more effort to iron out. 4. Crystal feels like a dynamic language, yet it's fully statically typed. Features like type inference and union types make this possible.
- transfire 3y agoCrystal should get more attention, from desktop application developers in particular. Crystal makes it much easier to maintain large performant code bases. Basically working with Crystal is much more like working with Python or Ruby, but with performance comparable to C. Unlike Rust or Go where you get the performance, but you don’t get the huge bump in productivity b/c youre working at a lower level of abstraction.
- Alifatisk 3y agoThe burden with Ruby is that there is no clear way of shipping an application to the end users without requiring the end user to install the runtime. Crystal might be the proper solution as the syntax is almost identical (if not is already) and I can finally ship self contained binaries!
- Alifatisk 3y agoI've had my eyes on Crystal for a couple of years, the only drawback is Windows support. When that's done, I might use it!
- xenonite 3y ago„All the main platform features for Windows are finished“ (10 days ago) https://github.com/crystal-lang/crystal/issues/5430 https://github.com/crystal-lang/crystal/issues/5430
- Alifatisk 3y agoThanks!
- actionfromafar 3y agoDanke
- mrkeen 3y ago> I remember when I first learned about type inference, one of my first thoughts was, why can’t we just create a statically typed language that does type inference for everything. The compiler would still have to figure out the types at compile time anyway, and I’d save myself a few keystrokes. > Turns out this is what Crystal does. It does aggressive type inferencing, and only asks you to declare types when it can’t figure it out. > Crystal does not have a global type inference engine
- davidgrenier 3y agoCorrect me if I'm wrong, but F# has had that on inception 18 years ago which it inherited from the ML family of programming languages. Though I agree it's a much saner default to ask for type information rather than default to Any/dyn like Julia does.
- yxhuvud 3y agoThe underlying principle in Crystal is that data structures usually require explicit declaration while types of values passed around on the stack usually don't need to be declared. I find it makes it easy to reason about the result while still being very stream lined.
- ghusbands 3y agoAs the sibling comment points out, this has been a feature of many functional programming languages for a long time. If you infer everything, though, it becomes a little unfriendly in use. When you make a change in one location and accidentally use the wrong type for something, it can affect global type inference and you get error messages in other locations. In essence, if you use only type inference, a change anywhere in the program can turn up as an error due to a type mismatch anywhere else in the program. Most languages with powerful type inference aim for a middle ground where important types are declared and mostly-local types are inferred.
- pantulis 3y agoAs a very anecdotal data point, I once created a pet project that interfaced with a CouchDB endpoint and inserted some keys with dates in a complex nested JSON structure and deployed it to Heroku. (It was ment to be called as a Apple Shortcut) It took me half a day with Ruby, two days with Crystal and a little more than a week with Rust. The Crystal experience was very very smooth coming from Ruby. With Rust it felt like I was wrestling with the compiler.
- segfaltnh 3y agoAnd you had a ton of experience with Ruby heading into this comparative exercise? I feel like a lot of us are hitting a point in our career where we have decades of experience doing it one way, and learning something new is slow, but make the mistake of thinking that's entirely a reflection on that new thing. (Myself included.)
- pantulis 3y agoYes, I used to be a seasoned Ruby dev myself, not so much as I'd like these days. I had of course no previous experience with Crystal or Rust whatsoever. The trickiest point with Crystal was mapping the JSON dynamic payload to a typed structure to be parsed, modified and sent back. On top of strong typing, Rust added its particular syntax and lifetime complexities. It was a fun side project and, performance wise, being it deployed in Heroku and so on, I didn't get any clear advantage between Crystal and Rust because everything was just doing a couple of network calls to a CouchDB endpoint with minimal modifications to the payload. I wanted to share this as anecdotal evidence for Ruby developers. Coming from other languages, the developer experience would arguably be different.
- deleted 3y ago[deleted]
- coryaf 3y agoLooks fine I guess, but (like Ruby) it's not as intuitive as Python, and I have a lot of hopes that Mojo will bring about a performant Python like programming experience
- pmarreck 3y agothis must be a matter of opinion, because I always thought Python was a crappier Ruby
- czbond 3y agoSame. Python always seemed like it was cobbled together poorly. While to me, Ruby seemed to be elegant experience. I used Ruby because I really don't like the "programming part" - but the "I'm creating a product ASAP, the language is the method of having to do so" part. I drank the Go koolaid (hoping for a C++ variant) but felt like I was using C or Assembly (har) in having to recreate practically everything ground up.
- pmarreck 3y agoI could never stand Go. So much boilerplate. Literally designed to appeal to the most inexperienced developer. Write 4 times as much code to do the same amount of work as 1 line of Elixir or any functional language... Gross.
- bantunes 3y agoRuby is Python minus white space mandates and having to try three times to get strings right. Also, backwards compatibility is not such a big deal. Of course, also minus the massive corporate support by the likes of Google. Try it, it's very programmer-friendly.
- compumike 3y agoWe've been happily using Crystal in production at Heii On-Call (free website / cron job monitoring, free critical alerting to iOS/Android apps, on-call scheduling) [1] specifically for higher-throughput components of the overall system, such as the API server [2] and the system that continuously does website monitoring [3]. For context, we do use Ruby on Rails for the main website frontend. Really I find Crystal to be so much more ergonomic and pleasant to use than Go or Rust, though I could see that being a matter of opinion. Very concise, very readable, very fast once compiled. Porting utility classes from Ruby is so easy too. I end up spending more time porting unit tests than porting the underlying code. And the testing story (Crystal's "spec" [4]) is really nice. If you want to try Crystal without installing anything, I made a "crystal-docker-quickstart" project template you can clone [5]. You can safely try out Crystal and have your first static binary compiled in about 15 seconds via something like: git clone https://github.com/compumike/crystal-docker-quickstart.git my_app cd my_app ./d_dev make && out/my_app Lastly, I've found that the Crystal community [6] is small but friendly and helpful. It's at that magical stage of an open source community where people are extremely competent and responsive, but not (yet?) burned out from dealing with so many people. [1] https://heiioncall.com/ https://heiioncall.com/ [2] https://api.heiioncall.com/ https://api.heiioncall.com/ [3] https://heiioncall.com/outbound_prober https://heiioncall.com/outbound_prober [4] https://crystal-lang.org/reference/1.8/guides/testing.html https://crystal-lang.org/reference/1.8/guides/testing.html [5] https://github.com/compumike/crystal-docker-quickstart https://github.com/compumike/crystal-docker-quickstart [6] https://forum.crystal-lang.org/ https://forum.crystal-lang.org/
- Alifatisk 3y ago>Really I find Crystal to be so much more ergonomic and pleasant to use than Go or Rust, though I could see that being a matter of opinion. That's very faschinating to read! > Very concise, very readable, very fast once compiled. Can I get a perspective on how fast we are talking?
- zerr 3y agoThe minimum requirement for a language to take off: first class Windows support. The current preview support is good enough to start playing. A high-performance (C-like, LLVM based) and a very high-level language with Ruby-like expressiveness coupled with static typing and compile-time (as well as runtime) safety, and with the ability to produce standalone native executables make it really one of a kind.
- notmypenguin 3y agoHonestly, windows isn’t something I can take seriously in 2023. Developers should be using the same Linux distro their servers run, IMO. Does that sound harsh? So does dismissing a language due to “windows support”
- ungamedplayer 3y agoGo ask AWS for their kernel that boots AWS. It won't boot your laptop.
- Alifatisk 3y agoThis hits the point
- pmarreck 3y ago> The minimum requirement for a language to take off: first class Windows support many open source languages “made it” without this qualification, and I’d suggest that Microsoft has a long history of primarily supporting its ecosystem languages on its platform.
- metaltyphoon 3y agoCan you name a language that “made it” and what you mean by “make it”?
- pmarreck 3y agoBash? Ruby earlier on? Node earlier on? Erlang? Elixir? Perl, earlier on? Clojure? Go earlier on? All the standard Unix utilities and their DSL's? (sed, awk, bc, jq, etc.) Apple's Objective-C/Cocoa, and Swift? Rust (earlier on)? Scala? Haskell? Every one of these languages' Windows support tends to lag their *nix support, and most are fairly widely deployed (my definition of "making it"). Many may support Windows now to some degree, but did not originally and not for their entire incubation period. Early Python did not have good Windows support. Neither did PHP... which is exactly why Microsoft basically copied PHP to make ASP. Hell, even C/C++ was basically fleshed out on Unixes long before Windows even existed. Linux (and Unix flavors before it, as well as things like BSD) is the premiere developer OS, period. It enjoys, by far, the most languages to choose from. Windows is the developer OS only for the Windows ecosystem of technologies, which is far too limiting IMHO. The fact that you've even asked this question makes me think you are living under a Redmond rock. If you didn't have access to WSL, you wouldn't even be able to fully enjoy most of these languages. Which is exactly why WSL exists! No one would need it otherwise! In fact, the only open-source language I can think of that DID premiere with first-class Windows support was Java.
- pmarreck 3y agoit’s = “it is” otherwise it’s “its” he or she makes this grammatical error multiple times if you don’t know which to use, if you can substitute “it is” and it makes sense, then use “it’s”, otherwise not
- slondr 3y agoI never saw the pitch of crystal compared to Ruby with RBS.
- compumike 3y agoFor me, the pitch is performance: Crystal would be several times faster, while using a tiny fraction as much RAM. In my use case for https://heiioncall.com/ https://heiioncall.com/ I ported a part of our system from Ruby to Crystal and we're seeing about ~10x faster throughput while using ~1/10th as much memory. That changes the operating economics drastically enough that, for example, Heii On-Call provides free website and API endpoint monitoring.
- ubertaco 3y agoI love Crystal, and have loved it for several years. It was my go-to for Advent of Code or small fun projects for a while. Eventually, I got so tired of constantly jumping between browser docs and my editor because of the lack of a working and useful language server (yes, I know about Scry and Crystalline, but neither of them actually do autocomplete outside of maybe 2% of cases), and I got so used to an amazing tooling experience when writing F# (my other favorite language) that I just kinda dropped off using Crystal. Things I would've written in Crystal, I wrote in F#. If I _really_ needed a static binary, I picked up Rust (though I love Crystal's syntax _so much more_ than Rust's). If Crystal gets a good language server, heck yeah I'll roll with it. In the meantime, it just sorta feels like a missed opportunity.
- actionfromafar 3y agoI'm afraid to try F#, I might like it too much from what I see. If only F# could compile to a single EXE.
- pjmlp 3y agoNative AOT is getting there.
- metaltyphoon 3y agoIt can do that already.
- laurentlb 3y agoI compile my F# application with --standalone and share a single exe file to my users. It still requires .NET to be executed (but note it works on many platforms thanks to Mono).
- JohnFen 3y ago> It still requires .NET to be executed Which means it's not really standalone.
- deleted 3y ago[deleted]
- b33j0r 3y agoJust a tip. I scrolled multiple screenfuls and actually know less now about this language. Put the recipe at the top. We want to know what it will produce. If you have a heart-warming story about how you learned it in the tootledge of Chef van Rossum, tell that story below the fold. I want a sense of the flavor before your whole life story :)
- avg_dev 3y agoFor future readers: https://crystal-lang.org/ https://crystal-lang.org/ Summary: - Ruby-inspired syntax - statically-typed, with built-in type inference - types are non-nullable, with nullable types represented as a union of a type and nil - macros built-in including templating, AST inspection, type inspection, ... - green threads ("fibers") for concurrency - C-bindings built-in - package manager built-in ("shards") (also it is compiled and cross-platform with Windows functionality in some kind of preview/beta that the article author found mostly usable [I think debuggers and the interpreter were exceptions here], and it has a large standard lib)
- remram 3y agoI wish they had used the headline to say something about the language rather than the useless tagline "for humans". Is it imperative, functional, object-oriented? For embedded, scripting, system programming? Is it new? A dialect of something else? Nope, all I know is it's "for humans", and possibly computers can run it too (?)
- pwdisswordfishc 3y agoIt's as opposed to Ook, the programming language for orangutans.
- deleted 3y ago[deleted]
- LVB 3y agoSlow compile times were a real issue for me when I was trying to leverage Crystal. This is acknowledged as a significant (and challenging to solve) issue: https://dev.to/asterite/incremental-compilation-for-crystal-part-1-414k https://dev.to/asterite/incremental-compilation-for-crystal-...
- npn 3y agoCompilation time was a huge pain point for me, too. Dev builds took 30s to finish, completely killed the productivity. It's much better now though, after I compile the compiler myself, using glibc instead of musl, using LLVM 15 instead of LLVM 14, and disable the GC (for the compiler). Dev builds now only take 5~8s, and release builds only take ~1 minutes instead of 2 minutes 30 seconds.
- e12e 3y ago> I recently implemented a Brainfuck interpreter in the Crystal programming language Aw, a bit of a missed opportunity to write a crystal version of the impressive (but probably dated?) "How I start"-article for Nim: https://howistart.org/posts/nim/1/ https://howistart.org/posts/nim/1/
- zw963 3y agoFor friends from China who are interested in Crystal,i create the Github crystal-china org, https://github.com/crystal-china https://github.com/crystal-china, and I also hold https://crystal-china.org https://crystal-china.org domain name, although there is still no time to build a website. Let us discuss use Chinese in TG,Discord, and do something together.
- prh8 3y agoReal world example for Crystal: our overnight sitemap generation (built using Ruby, as part of our Rails app) took 6 hours to generate 20 million links. At some point due to infra changes, it stopped running to completion. Since then, we ported it over to Crystal, with the main code virtually unchanged (library to help generate sitemaps has matching API). Just had to set up basic database mapping for a few tables. That version is now in production, and it now processes 30 million links in about 30 minutes.
- throwaway3838g 3y agoJust curious, what makes Crystal so much faster for this use case?
- prh8 3y agoThe biggest thing is the massive speed improvement compared to working with bloated ActiveRecord models, associations, plus some memory bloat. The Crystal implementation is massively fast dealing with database data.
- moe 3y agoCrystal performance is close to Go-lang. It's just very fast across the board. Consequently, just like Go-lang, it beats Ruby by an order of magnitude on pretty much any benchmark. Newcomers often assume Crystal must be sluggish like Ruby because "how could a language with such a convenient syntax be so fast", but it really is not. https://www.techempower.com/benchmarks/ https://www.techempower.com/benchmarks/
- Alifatisk 3y ago> Crystal performance is close to Go-lang. It's just very fast across the board. I know Go is known for it concurrency, does Crystal come close to that aswell?
- npn 3y agoin fact Crystal concurrency is the same with Go, both using coroutine technique. though Go should be more performance because it is built for that feature.
- anta40 3y agoWindows support is still under development, yes? https://crystal-lang.org/install/on_windows/ https://crystal-lang.org/install/on_windows/ I'll stick with Nim then, it's Windows support is much better. Of course for backend dev, Linux is usually #1 choice. Let's try Crystal.
- russdill 3y agoBuild support in general isn't great. The way external objects are linked is a bit hinky, cross compilation support is poor, and running multiple instances of the compiler at the same time on the same machine isn't supported.
- singularity2001 3y agoThey seem to suffer from similar problems as Julia: Type inference for large projects seems to be extremely difficult and results in huge compile times / startup times and or runtimes.
- eigenspace 3y agoThere's been a lot of progress made over the past few releases for Julia's startup and compile times. With the upcoming release of version 1.9, we'll be caching native machine code from the precompilation phase of a package. Packages will be able to specify precompilation workflows that are run when the package is installed and then cache the results from that leading to a huge improvement of the loading time for most heavy packages.
- jwoertink 3y agoLucky core dev here! I've been using Crystal in production since about 2017. I love the language, but there's definitely some hard tradeoffs which are mentioned in this thread. Our larger app has some serious compile time issues. We deploy with github actions, and it takes about 30min to build the production binary, compile assets, and push the binary to the server. But overall, I've found my apps are way more stable, and really fast as well as running on much smaller machines. The tradeoffs for us are definitely worth it.
- watzon 3y agoAbsolutely concur. Build times are an issue, support is a problem, and I've fallen out of love with a lot of the "magic" you get from Crystal and Ruby. I'll take explicit imports over a globally shared namespace any day.
- alex_lav 3y agoI find myself getting pretty immediately turned off by IMO kind of silly and unverifiable catch phrases languages use as marketing tools. Crystal uses "a programming language for humans", much like EmberJS's "for _ambitious_ web developers". As I skim the Crystal page, it's not clear to me what is supposed to stand out as a language that makes it "for humans" any more than any other language? It just seems silly.
- brightball 3y agoI’m honestly more interested in jRuby at this point. I think the coming combination of jRuby with fibers is going to become extremely compelling based on the early numbers that Charles Nutter was seeing. This is approaching BEAM levels of concurrency. https://twitter.com/headius/status/1653051050285203456?s=46&t=alZCBpHQmrOiijvY9w8DwA https://twitter.com/headius/status/1653051050285203456?s=46&...
- EyeSayUntoThee 3y agoWow, I disagree. 1) a binary executable of low memory footprint that can be run as a standard systemd service vs THE JVM (gasps of terror) 2) I bet you Crystal STILL beats the pants off jRuby or actually ANYTHING run on the JVM (perf. metrics) 3) I bet you the maintenance costs of the Crystal binary are lower over the course of 5 years, by a large large factor 4) I will bet you the UPTIME of the Crystal binary is higher, by a large large factor
- rvba 3y agoAs someone who isnt a programmer, why are those "guides" done so poorly? def double(val) val + val end The example does not show what happens when you try to connect text and a number. Will it glue them together? Give an error? Also, "for humans", the whole x = x + 1 is illogical.
- mrtweetyhack 3y ago[dead]