[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)