|
| dom96 wrote:
| It's quite amazing how many web frameworks are built for Crystal
| (in comparison to other languages of the same size, for example
| Nim)
| wheels wrote:
| I'd love to hear stories about actual Crystal use.
|
| Of all the languages I've seen emerge in recent years, it was the
| one I was most conceptually fond of.
|
| It's basically (progressively-) statically typed Ruby, but fast
| (compiled). I enjoy writing Ruby, but I hate maintaining it.
| noaheverett wrote:
| We use it in production for our products at https://ark.fm and
| are actively working to move all of our Rails apps over to
| Crystal which ironically this framework looks great and may be
| a good choice for us. (Thank you to the author!)
|
| Our email service runs an image proxy (to hide your IP from
| email trackers) with probably about 30-50 lines of code in
| Crystal that's been in production for multiple years and it
| just works.
|
| Current project (in the cloud hosting space) that will heavily
| use Crystal for backend management and WASM which was recently
| introduced into Crystal and is a game changer for our use-case.
|
| Also wrote a command-line tool with it and it feels like I'm
| cheating at how easy it is to do so.
|
| Coming from the Ruby/Rails world where you have to cap
| deploy/bundle etc to push to a production server and hoping
| nothing breaks on dependancies makes Crystal's single binary
| deploy a breath of fresh air...not to mention the performance.
| We run our own hardware so being able to (eventually once we've
| moved over fully to Crystal) run the same workloads on LESS
| hardware with electric prices spiking is financially
| attractive.
|
| As you can tell I'm a fan boy. I'm betting heavily on Crystal
| and going all in with our stack.
|
| Did I mention it is fast?
| shafyy wrote:
| Kagi (the search engine) is built on Crystal.
| fdr wrote:
| The Crunchy Bridge CLI is written in crystal:
| https://github.com/CrunchyData/bridge-cli/. The program that
| monitors databases is likewise a crystal program. There are a
| few other crystal programs rolling around.
|
| My biggest grievance with Crystal is the lack of incremental
| compilation. I understand why it's difficult to achieve given
| the language model, and some of the conveniences of that model.
| I've been watching the Crystal Interpreter with interest, it
| would be pretty cool if it could speed up my `M-x crystal-spec-
| line` interactions, along with all the other usual benefits of
| an interpreter.
|
| On the other hand, there's a lot to like about Crystal: it has
| a convenient yet powerful type system, good error messages,
| good support for invoking C subroutines in libraries, and
| generates efficient object code in a straightforward manner.
| compumike wrote:
| My side project https://totalrealreturns.com/ is now about 5k
| lines of Crystal. There are some rough edges: in particular I
| think it could use a better templating solution (a port of HAML
| would be ideal!), and there are some failure modes with the
| Redis connection pool that have required workarounds.
|
| This includes unit tests: the built-in spec framework is great
| and much like rspec. https://crystal-
| lang.org/reference/1.6/guides/testing.html
|
| I'm now starting to use Crystal for internal backend
| infrastructure and microservices.
|
| For anyone who wants to kick the tires on Crystal, I built a
| crystal-docker-quickstart project template:
| https://github.com/compumike/crystal-docker-quickstart works
| without having to install anything locally. (Assuming you have
| docker.) You can have your own, home-built "Hello world" static
| binary in under a minute: git clone
| https://github.com/compumike/crystal-docker-quickstart.git
| my_app && cd my_app && ./d_dev # in the shell that
| appears: make && out/my_app
|
| Then just edit src/main.cr and you're off and running :)
| paulgb wrote:
| That is one fast-loading page, especially for (what looks to
| be) dynamic data!
|
| Are you doing anything special or just using a good CDN?
| compumike wrote:
| Thanks :) No CDN actually -- it's just a side project
| served straight from a single VPS at the moment.
|
| You're probably just seeing the speed of response caching
| (which I've written in Crystal too, using Redis and local
| disk as storage backends). If you request a new ticker
| symbol that isn't already cached, or specify custom date
| ranges, it will recompute or even have to fetch data from
| upstream data provider, and those requests will take a bit
| longer.
|
| Also, the whole site is currently served up as a single
| HTTP request, except for a few external JS and CSS files
| (Bootstrap, uPlot) which are served from public CDNs.
| karol wrote:
| Nice project, learned a bit from it about some Vanguard funds
| I didn't know about previously.
| nerdponx wrote:
| I enjoyed poking around at Crystal, but its library ecosystem
| seems heavily oriented towards web development (understandably,
| because its creators are a web dev consultancy), and I don't do
| much web development for my hobby programming.
|
| Also, I found that its static analysis tooling (eg LSP server)
| was really slow. Compiling small programs was also rather slow,
| and it generated large binaries.
|
| I also had some difficulty understanding the documentation
| related to importing and including modules and classes; it
| seemed written from a perspective assuming that the reader
| already knows Ruby, which I do not.
|
| At the time, I was also curious about Common Lisp and Nim, so I
| spent a bunch of time learning the former, and have lately been
| writing small personal scripts/tools using the latter.
|
| My experience using Python for backend web development has been
| mixed. If I had to do work like that professionally in the
| future, I would be happy to do it in a language like Crystal.
| It seems a lot more comfortable to me than Go, less
| intimidating than a JVM language (Kotlin?), and less "weird"
| than Common Lisp or a functional language like OCaml.
|
| It doesn't seem like a bad choice for a company willing to
| invest in engineers while they learn the language, and maybe
| invest in writing some of their own libraries while the
| ecosystem is still young. I felt like I was able to get
| productive fairly quickly.
|
| I think an interesting project would be to write a fairly
| simple web server (maybe some basic REST CRUD thing using
| idiomatic code) in several languages and frameworks, and
| compare their performance, ease of getting started, and
| complexity of the code. I had started working on this myself at
| one point, and it seems like it could be worthwhile to pick up
| again, especially now that all of the language ecosystems I had
| in mind have matured a little bit.
| mhenders wrote:
| Regarding different languages and frameworks, I found this
| informative: https://www.youtube.com/watch?v=FQPlEnKav48
| hamandcheese wrote:
| > I enjoy writing Ruby, but I hate maintaining it.
|
| Sorbet helps immensely in this regard (though it does perhaps
| make writing ruby a bit less joyful). The Sorbet language
| server works great (at least with VSCode) - I have pretty
| reliable go-to-definition and intellisense.
|
| I would imagine that if crystal had a decent language server
| the experience would be even better than Ruby+Sorbet.
| wheels wrote:
| Refactoring tools are nice (I guess; I've honestly only used
| them in Java; I'm mostly an Emacs person), but my main gripes
| with Ruby maintenance are harder to fix with type
| annotations:
|
| - In duck-typed languages you have to write a lot of tests to
| do verify things that the compiler does for you in statically
| typed languages. That neuters much of the benefit of the
| concision of such languages. Crystal shoots for the best of
| both worlds. (Static type checking, but usually without
| explicit signatures.) My main refactoring tool in statically
| typed languages is the compiler: if I break something, it'll
| tell me.
|
| - Monkey-patching, open classes, etc. I do it too. Pretty
| much every Ruby-ist does. But it makes it damn near
| impossible to track down bugs sometimes, because even finding
| out what file the relevant code is in isn't trivial. Again,
| Crystal seems to mostly side-step that pitfall.
|
| - Speed. I don't even attempt to write fast code in Ruby
| (though I have written a few C++ extensions for Ruby in a
| pinch). But if I could get near-to systems-language level
| performance out of something that was almost Ruby, that'd be
| pretty amazeballs.
| galaxyLogic wrote:
| > My main refactoring tool in statically typed languages is
| the compiler: if I break something, it'll tell me.
|
| That really helps. But what's even better in practice is if
| compiler is integrated into an IDE which can highlight
| type-errors already while you are editing the code, before
| you explicitly invoke the compiler. For instance Eclipse
| IDE does that for Java code.
|
| If you need to run the compiler by hand before you get any
| error-messages it becomes a huge delay and you lose the
| immediate feedback which is needed to keep your focus on
| the code, not on compiler error-messages.
| pmontra wrote:
| > In duck-typed languages you have to write a lot of tests
| to do verify things that the compiler does for you in
| statically typed languages
|
| Would you give some examples? I think I'm testing only
| functionality but maybe I'm not realizing that I'm testing
| the types of arguments.
| wheels wrote:
| Sure.
|
| Ruby: def foo(a) raise
| ArgumentError unless [ :bar, :baz, :quux ].include?(a)
| return 1 end def test_foo
| assert_raise(ArgumentError) { foo(1) }
| assert_raise(ArgumentError) { foo(:moo) }
| assert_instance_of(foo(:bar), Integer) end
|
| In C++ I'd write: enum class Value
| { Bar, Baz, Quux };
| int foo(Value a) { return 1; }
|
| In a strongly typed language you don't need to do any of
| the input validation. I'm not sure that I'd do that level
| of granularity of tests in an application, but I spend a
| lot of times writing libraries, where it's pretty
| important.
|
| You also _have_ to call all code paths with your tests in
| Ruby because otherwise you won 't hit errors. Just basic,
| "this thing runs, the methods it calls exist, it returns
| a value, and it's of this type" is all guaranteed in a
| strongly typed language and doesn't need to be explicitly
| tested.
| wheels wrote:
| Actually, here's another example: def
| foo(a) if a == 1 bar else
| baz end end def test_foo
| foo(1) foo(2) end
|
| In the C++ equivalent there's no need to test those
| values because the compiler will tell you that the
| methods exist. In Ruby you need to test them so that you
| catch those paths in refactoring. void
| foo(int a) { if(a == 1) bar();
| else baz(); }
| freediver wrote:
| The backend for Kagi Search is powered by Crystal.
| cutler wrote:
| Rails clone?
| joshmn wrote:
| What's your definition of Rails clone? MVC? If it is, sure,
| yeah, this and a whole bunch of other frameworks are Rails
| clones. Laravel is a Rails clone. Django is a Rails clone.
| We're all Rails clones!
|
| Does the design of some of the logic look heavily-inspired by
| Rails? Sure, and I think it's a great choice.
|
| But in reality, calling it a Rails clone is a disservice to
| Rails. Rails is much more than MVC and patterns implemented
| from Patterns of Enterprise Application Architecture. The power
| of Rails isn't in any single one of the patterns -- sure, it
| may have started that way when it was common to ship PHP copy-
| pasted from php.net and deployed using Filezilla (or
| explorer.exe!) -- but since, what, 2.3? the power of it has
| been it's ecosystem: nothing can come close to the vastness and
| maturity of Rubygems.
| Scarbutt wrote:
| I don't know, the vastness of the JS ecosystem seems bigger
| to me? I have come across many third party service providers
| that do not offer Ruby SDKs but do for JS,Java,Python etc...
| 0xblinq wrote:
| I think the Laravel ecosystem is pretty comparable, if not
| better, than the rails one.
| jbverschoor wrote:
| Yeah, I never like it when they don't simply state that's the
| case.
| gortok wrote:
| Not to be confused with the C# document database built on
| Postgres.
|
| https://martendb.io/
| mtrycz2 wrote:
| All I want form a framework is for it to be boring.
|
| Am I the only one? Am I crazy?
| jstummbillig wrote:
| I certainly don't mind if a framework is boring, if it comes
| with qualities I am interested in. Being boring is not one of
| them - but neither is being exciting.
| [deleted]
| jbverschoor wrote:
| Congrats with the release and docs. Curious about:
|
| Refresh/compile times, esp with more models and controllers
|
| Do you get a single binary for deployment which includes all
| assets, such as a .war?
|
| Is there debugger, similar to the one in rails?
| wazbug wrote:
| Not a Crystal expert, but the Marten tutorial mentions a
| `crystal play` command that will run a web-interface with an
| interactive "playground" that you can interact with your
| program's functionality in:
| https://martenframework.com/docs/getting-
| started/tutorial#in....
| chrisseaton wrote:
| > Do you get a single binary for deployment which includes all
| assets, such as a .war?
|
| I think they mean such as an .exe
|
| > Is there debugger, similar to the one in rails?
|
| What debugger are you using for Rails? In my experience Rails
| has been significantly lacking in a debugger (it's improved
| recently with the debug gem.)
|
| (Not an expert.)
| mfkp wrote:
| My company has donated thousands of dollars to the crystal
| development budget. Always excited to see new additions to the
| ecosystem!
|
| This framework is looking very nice if you're looking for a
| rails-style framework. I'll definitely give it a shot on my next
| project.
| viraptor wrote:
| I'd love to see two docs there:
|
| - What's different from Lucky https://luckyframework.org/
|
| - What's different from Amber https://amberframework.org/
|
| There's probably something exciting there, but finding out the
| differences in features for yourself... please don't make me do
| that.
| prh8 wrote:
| Love Crystal and love seeing it here more. Ruby has been day job
| for years, but Crystal is so much fun for side projects and
| random things to build. Easily approachable, especially for Ruby
| devs.
___________________________________________________________________
(page generated 2022-10-30 23:00 UTC) |