[HN Gopher] Clojure Dart
___________________________________________________________________
Clojure Dart
Author : coltnz
Score : 109 points
Date : 2022-04-16 08:30 UTC (1 days ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| winkelwagen wrote:
| Nice work! I'm actually pretty excited to give this a shot. I
| like Flutter and Clojure. But writing Dart isn't the most fun
| thing I can imagine doing. Fun is something I find important in
| personal projects, but not so much my day to day work. I don't
| care about the language that pays the bills, the type of projects
| is way more important there.
| macspoofing wrote:
| >But writing Dart isn't the most fun thing I can imagine doing
|
| I really really do not understand this. Dart 2 is one of the
| most beautiful languages out there. Dart is a composition of
| the best parts of python (or maybe ruby?), javascript, c# and
| java.
| moonchrome wrote:
| Have you actually used Dart on a non-trivial project ? It's
| boilerplate hell and spaghetti code generator nightmare that
| works around the nonexistent reflection system and closed
| object model.
|
| If you look at libraries like built_value and
| built_collection and think that's beautiful when comparing it
| with Clojure than I'm sorry but you just don't know what
| you're talking about. Even the authors of these libraries
| (AFAIK from the Dart team) acknowledge the design decisions
| they had to make are a result of language limitations.
|
| IMO it's literally the worst of Java and JavaScript - off the
| top of my head I've had several cases where I would get
| runtime exceptions about a type mismatch in a ternary
| expression that wasn't caught by type-checker, JS style. Type
| system was very weak in general. And the ammount of
| boilerplate and code generators I had to work with brought me
| back to Java 6 days.
|
| TypeScript is miles ahead of Dart in terms of expressiveness
| and productivity, even when built on a pile of shit that is
| JS.
|
| Flutter is an interesting project (the asynchronous IPC
| rendering architecture has some major drawbacks when
| interoperating with native components), but Dart is hands
| down the reason I wouldn't touch it in the future unless the
| team spends some serious effort on language ergonomics.
|
| A decent implementation of Clojure + Flutter would change
| that equation for me considerably and Clojure would be a
| really good fit for Flutter.
| sysOpOpPERAND wrote:
| what dart should add a way to automatically understand json
| and turn it into an object. that would be nice for those of
| us who don't like creating models
| mhoad wrote:
| Not only have used in non trivial situations but 1000%
| would use again and now consider it my default go to
| language of choice.
|
| As mentioned elsewhere in this thread it clearly DOES do
| well at exceptional scale given that the majority of
| Google's revenue is all run through Dart. It's also a
| really critical part of the new operating system they are
| currently spending stupid amounts of money building.
|
| It's funny that you mention TypeScript because for me every
| time I touch it I wish it was Dart for a million different
| reasons.
|
| Not sure when the last time you used Dart but some of the
| things you mentioned gave me the impression it was either a
| while ago or you were doing some very specific stuff with
| it. I absolutely do not associate Dart with large amounts
| of boilerplate and especially not compared to a language
| like Java.
|
| The package you mentioned built_value was just a clone of
| auto value in Java and similar to how the language made
| auto value no longer needed the same is happening in Dart
| this year as they are bringing in the concept of static
| metaprogramming to remove the limitations that lead to its
| initial existence.
|
| I actually think of it as having the best language
| ergonomics of any C style language I've ever seen.
|
| Guess we value different things...
| capableweb wrote:
| "Beautifulness" of programming languages is so subjective
| it's hard to have a productive conversation around it.
|
| But I'll bite. Most of the languages you've listed are C-like
| and all of them have mostly similar syntax and function
| although the ecosystems are very different. Have you ever
| experienced larger applications written in completely
| different class of languages? Languages like various lisps,
| Prolog, ML and so on.
| macspoofing wrote:
| >Most of the languages you've listed are C-like and all of
| them have mostly similar syntax and function although the
| ecosystems are very differen
|
| Fair-enough ... Within the category of C-like language,
| Dart is quite nice.
|
| >Have you ever experienced larger applications written in
| completely different class of languages?
|
| I have not. I have played around with lisp (scheme),
| prolog, Haskell, ML ... But for various reasons never used
| them professionally.
| [deleted]
| kylecazar wrote:
| Interesting... I was under the assumption that most Dart code
| that pays the bills is actually within a Flutter context these
| days.
| avdlinde wrote:
| I'd think so to, but hope angular dart takes off as I kind of
| love it!
| mhoad wrote:
| AngularDart is sadly basically dead these days at least
| publicly. It still runs all of Google Ads so it's very well
| maintained internally I imagine but it's officially
| unsupported publicly at this point which I agree is a
| shame.
|
| Flutter for web is at a weird stage right now. I think once
| AOM, WASM-GC and WebGPU are in place and well supported
| across browsers it will be a very different story but thats
| probably a year or two away at this point.
| macspoofing wrote:
| The public version of AngularDart (i.e. not the one that
| Google maintains for its internal teams) is in maintenance
| mode, which is a shame because it was awesome.
| amackera wrote:
| Super excited to see this! Clojure is an absolutely delightful
| language to use professionally (not to mention insanely
| productive). I've heard great things about Flutter and Dart also
| from people I trust and admire.
| andriosr wrote:
| So cool!! Will try it
| truth_seeker wrote:
| Nah !
|
| I love LISP but this is too much to digest. Just because you can,
| you shouldn't do it. Flutter with Dart and component based
| architecture is still awesome.
| capableweb wrote:
| > I love LISP but this is too much to digest
|
| What? Is Clojure too much to digest as well? Or ClojureScript?
| They are basically the same thing as this project, except they
| compile to JVM/JS code instead of Dart.
|
| > Just because you can, you shouldn't do it.
|
| Fuck that. If you can, have the time and have the resources, go
| for it! The world will be a better place if you do it and
| publish whatever comes out of it, success or failure.
| kjksf wrote:
| It's important to provide context for why this project was
| created.
|
| It's sponsored by Roam Research.
|
| Roam Research has a complex web app (a note taking tool) written
| in Clojure.
|
| They also wanted to build a mobile app for iOS and Android.
|
| So instead of re-implementing everything from scratch in a new
| language they sponsored this project to compile Clojure to Dart.
|
| That way they can re-use lots of code they've already written for
| web app and only write mobile front-end once in Flutter (but
| still in Clojure syntax) and create a mobile app.
|
| This plan worked i.e. they do now have mobile apps for iOS and
| Android written this way.
|
| I have no inside info so I don't know how much code they could
| reuse, how easy or not easy it was etc.
|
| It's all based on publicly available information.
|
| The point being: if you don't already have a large Clojure code
| base you want to reuse, then maybe doing just Dart + Flutter will
| be easier and faster.
| brokencode wrote:
| I wonder why they didn't simply opt to use ClojureScript with
| React Native. That seems like a much more pragmatic move than
| creating and supporting your own compiler to Dart just so you
| can use Flutter.
| melony wrote:
| React Native apps are slow if not engineered well. Naive
| implementations of RN apps tend to scale really badly. FB is
| fixing this with their new architecture (Fabric Render and
| TurboModule) but the rollout and adoption is even slower than
| their apps. Flutter on the other hand performs reasonably
| well (generally speaking) even if you outsource the
| engineering to the lowest bidder in Eastern Europe or South
| Asia. Flutter also has better defaults for subtle details
| like transitions and animations with their material design
| stack. RN essentially gives you a blank canvas like a web
| page and YMMV depending on how much design talent your
| engineering team has. The third party RN design toolkits are
| rarely up to the standard of Google's massive design team
| where each pixel and transition is carefully scrutinized
| across all major platforms. RN is a great tech when you have
| entire teams of mobile staff engineers and designers. But if
| you just want to build something quickly that works
| reasonably well cross-platform, Flutter has the edge here.
| lenkite wrote:
| > Flutter on the other hand performs reasonably well
| (generally speaking) even if you outsource the engineering
| to the lowest bidder in Eastern Europe or South Asia.
|
| Discussion on Flutter Performance at r/cpp is enlightening:
| https://www.reddit.com/r/cpp/comments/u0ut2a/comment/i4b0lq
| t...
|
| > "Unfortunately, Flutter is currently a pile of hot
| garbage from the performance PoV.
|
| > Their own Hello World example, which has one animated
| button on screen, which updates the label when you press it
| (see their screenshot) in Release manages to stutter on
| Moto G7 Power, a phone from 2019. Which smoothly runs quite
| demanding 3D games.
|
| > According to Android Studio's profiler, about 20% of the
| frames do not fit into the time slot when the button is
| pressed. I don't know how did they manage to achieve this
| with such a trivial example on a Snapdragon 632, but they
| did it. So, to run smoothly on not-latest phones, your app
| should somehow be even simpler than their Hello World
| example, which seems hard to do.
| mhoad wrote:
| I consider it telling that Facebook doesn't dog food React
| Native when it comes to their primary source of income
| (their application or their ads manager depending how you
| want to look at the problem) but Google Ads is totally done
| in AngularDart on web and Flutter on mobile.
| brokencode wrote:
| I don't understand all the marketing hype about Flutter's
| good performance. I can often tell an app is written with
| Flutter just based on how slow it feels on my iPhone 13
| Pro. I think the 120 Hz screen doesn't help, but there are
| obvious stutters in even simple apps.
|
| If a current generation flagship phone struggles, then I
| just can't imagine how a more affordable phone that is a
| couple years old would fare.
|
| See Google's own Google Pay app as an example. Its
| performance is unforgivably bad. Perhaps it runs better on
| Android, but on iOS it feels bad.
| agilob wrote:
| Flutter and Clojure, there's going to be a lot of brackets in
| that code
| [deleted]
| capableweb wrote:
| This is very interesting to see, lots of fun use cases with
| Clojure + Flutter.
|
| > no REPL yet
|
| Seems the most vital part is missing so far, but impressive
| enough with this first version released. Something I personally I
| do when hacking on my own lisps (happens too often maybe), is
| implementing support for the nrepl protocol so I can use neovim +
| conjure with it as soon as possible, to help further the
| development of course :)
|
| From
| "https://github.com/Tensegritics/ClojureDart/blob/main/doc/fl..."
|
| > When you edit your cljd file, the watcher recompiles cljd files
| and, on success, hot reloads the application. Sometimes the
| application may not pick up your change so hit the return key to
| get the watcher to restart the application.
|
| Is this something specific to ClojureDart, is it because of Dart
| or because of Flutter? If it's because ClojureDart, it's alright
| as the project seems to be in early stages, but if it's because
| of Dart/Flutter it doesn't bode well. I have almost zero
| experience with either Dart/Flutter so interested to hear where
| the problem lies.
| karma_fountain wrote:
| I haven't looked at ClojureDart, but Flutter/Dart certainly had
| excellent hot reload, usually maintaining state and so on.
| Perhaps it's just the immaturity of this project. I do remember
| the hot reload might not have worked like a file watcher? I
| vaguely remember I had to integrate a server call into vim or
| something on save, but it was a while ago.
| cgrand-net wrote:
| ClojureDart co-author here. It happens in Dart too. Some
| changes are not compatible with the current application state.
| It may occur a bit more frequently because of Clojure being
| less stringent than dart about giving names to everything
| (which is tedious but definitely helps with hotreloading).
| edem wrote:
| I still don't understand why would anybody use a dead language.
___________________________________________________________________
(page generated 2022-04-17 23:00 UTC)