11 ms·
Clojure Dart
- winkelwagen 4y agoNice 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.
- kylecazar 4y agoInteresting... I was under the assumption that most Dart code that pays the bills is actually within a Flutter context these days.
- avdlinde 4y agoI'd think so to, but hope angular dart takes off as I kind of love it!
- mhoad 4y agoAngularDart 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 4y agoThe 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.
- macspoofing 4y ago>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.
- capableweb 4y ago"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 4y ago>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 4y ago[deleted]
- moonchrome 4y agoHave 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.
- andriosr 4y agoSo cool!! Will try it
- capableweb 4y agoThis 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/flutter-quick-start.md 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 4y agoI 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 4y agoClojureDart 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).
- truth_seeker 4y agoNah ! 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 4y ago> 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.
- truth_seeker 4y agoObviously, you have no experience with flutter SDK and development tools ? Do you ?
- capableweb 4y agoInstead of answering with a question regarding my experience, why don't you answer my questions? It's still unclear to me what actually is hard to digest here. Clojure? Dart? Flutter? ClojureDart?
- kjksf 4y agoIt'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 4y agoI 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 4y agoReact Native apps are slow if not engineered well. Naïve 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.
- edem 4y agoI still don't understand why would anybody use a dead language.
- agilob 4y agoFlutter and Clojure, there's going to be a lot of brackets in that code
- deleted 4y ago[deleted]
- amackera 4y agoSuper 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.
- coltnz 4y agoFor those wondering how this is done, it involves: a new Clojure dialect and it's reader, core libs and a compiler. The reader reads the specific tokens that define the Clojure Dart dialect via the data readers extension mechanism of the standard Clojure reader. Note, this dialect is not strictly compatible with other Clojure dialects, only with Clojure code that is host platform neutral 'pure Clojure', or code that uses dialect 'reader conditionals' to have specialised functionality. This is as it is with Clojurescript, and libraries made cljs friendly will not doubt be trivially made cljd friendly. The core libs is where the bulk of the work lies, by lines of code at least. core.cljd is 7135 lines, with all the Java-isms (mainly IO, String and Math fns) replaced by Dart wrapper libs. A lot of it, however, is pure Clojure lifted straight from the original. Furthermore, there's a ready-made test suite. Finally, the compiler. 4000 lines to produce Dart source from AST generated by the standard Clojure reader (but with Dart extensions support via tagged data).
- the-alchemist 4y agoExciting! Clojure is one of the few modern languages (someone please point out the others!) that you can use on top of any major platform: * web, via Clojurescript * mobile, via React Native * JVM server-side, via reg' ol' Clojure * .NET, via Clojure CLR * microcontrollers, via https://ferret-lang.org/ https://ferret-lang.org/ (seems dead, tho) and now Dart. Of course, being a hosted language has its own pros/cons, but it's truly impressive that a language has such comprehensive breadth. You can literally share code between your Arduino project, REST backend, and HTML/CSS/JS frotend.
- tosh 4y agoThanks to babashka also for command line tools and other use-cases (serverless?) where startup time matters: https://babashka.org https://babashka.org
- dekelpilli 4y agoThere's also NBB (Node Babashka) also by borkdude, which could also be a good option for serverless. https://github.com/babashka/nbb https://github.com/babashka/nbb
- gavinray 4y agoKotlin can do this as well, with Jetpack Compose as the multiplatform UI SDK https://kotlinlang.org/docs/multiplatform-dsl-reference.html#targets https://kotlinlang.org/docs/multiplatform-dsl-reference.html...