Hacker News new | past | comments | ask | show | jobs | submit login
Haxe 4.3 (haxe.org)
143 points by MokaAkashiya on April 9, 2023 | hide | past | favorite | 48 comments



I really love Haxe. A truly multi-paradigm language with good support for GADTs, OOP, structural and nominal types, lambdas, and a lot of practical sugar on top. The macro system and abstract types add enormous flexibility that I miss when going back to C# or Java.

The language is a bit verbose, but I prefer it and generally add type annotations instead of using type inference (unless I’m dealing with a super gnarly generic type).

The language shines in the graphics space since some of the Flash community gravitated to Haxe. I’ve found that it works great as a client/server language similar to a typescript frontend/backend stack. The benefit with Haxe is that the backend isn’t limited to Node, it can run on JVM, bare metal with C++, Openresty with Lua, and anywhere Python runs. It’s pretty easy to implement F# style type providers with the macro system as well.

There is also a C# target, however, there are talks of deprecating. Hopefully we will see a revival with Reflaxe, another way to make new targets, or maybe even a CLR target. https://github.com/RobertBorghese/reflaxe

Lastly, I’m very excited about Ammer the universal FFI for Haxe by Aurel. https://aurel300.github.io/ammer/ My hope is that the community will rally around Ammer and bring in a lot of native libraries to all targets.


There is also review of new features https://www.elitemastereric.com/Haxe-430/


Last time I checked on master - 2-3 months ago - ?. was implemented, but ?? was still missing. Good to see the implementation finalized. I also saw `overload` for inlines, that's really nice, having to expose functions taking Any and dispatching on dynamic type was one of the pain points in Haxe for me. A shame it's only for inline functions for now. Local static vars is something I didn't see, it looks like static variables in functions in C, right? I'm not quite sure how useful that would be. I guess the scopes are not shared, so `static var instance` in one method is different than `instance` declared the same way in another function. Still, the properties with getters also work. Better errors are always welcome, custom defines... I know I wanted these at some point, but can't recall right now what for. Stdlib got a bit more of concurrency support with Condition and Semaphore - good, my target doesn't do threading, but has coroutines, so having more options to control concurrency is nice.

All in all, very nice release with null-related operators being the feature I missed the most. I'm not sure about default type parameters, and numerical suffixes don't matter on my platform (everything is a double on runtime), but numerical separators are nice. Steadily, Haxe gets easier to use and safer. Macros are becoming more ergonomic, too, which is great, as they're essential to effective Haxe programming.


Also, here is an official repo where you can look at proposed and accepted changes: https://github.com/HaxeFoundation/haxe-evolution


Good post. That safe navigation operator is very cool and something I wish you could do in JS.


Not sure if I'm missing some sarcasm but JavaScript has had the equivalent Optional chaining operator for years now

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...


No, I honestly didn’t know about it! I should have googled it before making my comment… Thanks for letting me know.


Everyone likes to bag on JS without being willing to learn.



Does anyone have a good non-gaming use case for Haxe? It feels very nice to have multiple compilation targets and the language is great, but I never found an excuse to use it.


The creator of http://haxeui.org/ makes a lot of (closed) projects for the health sector. I personally like to use to make some wxwidgets utilities apps with it. (And being able the html5 js target and android/ios (with openfl) target.


Are any of your tools open source/something we can look at? Just curious about examples…


Internal frameworks seem to be a popular scenario for Haxe. Something where you are the vendor for the platform abstraction, not the consumer. Or you have a codebase that needs some incremental migration between targets.

This is stuff that is incredibly hard to justify as a hobby project but definitely in the realm of what Haxe does well.


A statically typed javascript with pattern matching can be nice.


Maybe some library for codebases in multiple languages at a company? I wonder what the performance story is...


I’d say it’s pretty good for touch screen kiosks, digital signage, and certain interactive creative works.


same here, it's a forever top of mind but never to be practically used. The thought of having one language but can dish out frontend in JS, backend in python, jobs in C has been a dream of mine.


That sounds a lot like Nim. I haven’t used it myself, but I’m intrigued at the idea of having one language I can use in a lot of places.


https://github.com/c-blake/cron might interest you. This uses "job" from GP in the sense of "cron jobs", although GP meant something much more broad by "jobs in C". ;-)

The key idea is portable to any prog.lang. you might like, although many will not be as run-time efficient as Nim, C, etc. and many may not be as safe as Nim.


It was used for Smart TVs quite a bit.


For those unfamiliar with Haxe, imagine Actionscript, but without tying it to Flash Player.


if you were familiar with actionscript, you'd prob. have heard of haxe! And if you weren't...well, it's not a useful simile...

I guess to describe haxe to someone, i'd say it's closer to typescript, but compiles down to many different languages.


I’m very curious about Haxe. From using ldtk and looking into haxeui and openfl, it looks like it could be good for multi platform gui apps. I’ve used godot for that purpose before but all the game stuff and limited libraries gets in the way of making it easy for gui development.

And seems like with hashlink I can compile to a single binary instead of the nightmare of electron or Python gui apps packaging


super interesting that a big part of the lift here is buildsystems + targeting different platforms

I've tried tauri + neutralino this year (both electron alternatives), and they depend immensely on buildsystems + platform targeting. flutter + react native play in this space too


Haxe development doesn’t seem very active: the last minor release, 4.2.5, was 13 months ago. The last major release, 4.2.0, was two years ago.

Even if Haxe was effectively feature complete, I would expect maintenance for bug fixes and keeping up to date with evolving platforms and backends, especially because Haxe supports so many targets.

https://haxe.org/download/list/


Haxe’s development is fairly active. You can see 41 PRs were merged, an additional 13 more were opened and 125 issues were closed in the last month: https://github.com/HaxeFoundation/haxe/pulse/monthly

The nightly builds should probably be promoted to patch releases more often though.


I’m glad to hear that. I had wondered whether most Haxe users used the nightly releases. That might be more common for projects that have a few main contributors: they fix issues blocking them and use their own builds without the overhead making new public releases.


I looked at Haxe but have trouble figuring out what real benefits it would have over something like Godot at this point.


Haxe + https://heaps.io/ (game engine) + https://ldtk.io/ (level editor) presumably gets you most of the features Godot has (though I don't know because I don't really do game-dev)

More importantly the language and IDE support are a lot better than GDScript.

And as others mentioned, Haxe is cross-platform. But not "cross-platform" like some languages claim to be: it's been cross-platform ever since the early days and is very battle-tested


Being able to cross-transpile (cross-compilation basically) to other languages is a huge selling point. You can, in one language, output libraries that are compatible with: JavaScript, Flash, Neko, PHP, C++, Cppia, Java, JVM, C#, Python, Lua, HashLink

For example, wanna deploy a validation library that checks something and have it available in a ton of language directly? Using Haxe, you can get this very cheap.


In practice, this is hard. The problem is that you need to either have all the functionality you use written in Haxe - which is rarely if ever possible - or you have externs to equivalent libraries on all platforms. The libraries produced will also need to be interfaced from outside somehow, and for some of the targets you'll have to write additional wrappers for your lib. It's really hard to pull off when targeting more than 2-3 targets.

Another commenter linked to Ammer[1], a universal FFI framework (apparently, it's my first time seeing it) - it might be just the thing needed to make multiplatform Haxe libraries way easier to write and distribute. I'd welcome that :)

[1] https://aurel300.github.io/ammer/


Haxe's double-edged sword that it lets you approach cross-platform in an uncompromising fashion where you're really getting as close to the target as reasonably possible, while also abstracting away as much of it as possible, but it also directly exposes you to the high level of engineering effort necessary to achieve that.

A lot of what I encountered from my time using it(which I might return to someday) was that it became more irritating as you introduced more platform dependencies, but mostly because it became harder to build the project. And this was disproportionately true for targets with complex build processes(SWF was one of them back in the day, and C++ still is).

Some of it does get mitigated by doing a double layer of abstraction: your platform code has a shell of functionality that is handled using the native paradigms, but exposes an interface that Haxe code calls. And the Haxe code accesses your own abstractions, not the native ones.

But doing all of that can get away from "just getting a result", because then you're pushing more of the development onto the native target. If you don't have a clear view of what abstraction you want, you can get stuck on designing it.


Haxe has been, and continues to be, used to ship commercially successful games.


Could you share some examples?


Friday Night Funkin' got pretty huge for a while there. Open source, too (not sure about the license) https://github.com/FunkinCrew/Funkin


All games by Shiro games (founded by Nicolas Cannasse, creator of Haxe) : https://en.wikipedia.org/wiki/Shiro_Games


Oh wow. Dune: Spice Wars is also in Haxe: https://www.youtube.com/watch?v=pZcKyqLcjzc


Dead Cells, Papers Please, Dicey Dungeons


Northgard, not an amazing game to me, but successful nonetheless.


Defender's Quest is a little famous, though not enormously famous.


Dead cells is the most recent and prominent example.


Haxe appeals to a lot of Flash game developers that would prefer to rely more heavily on code than a full blown game engine. A lot of people really like the “display list” (scene graph) API of Flash and a bunch of Haxe libraries follow similar patterns.


Haxe is a programming language and Godot a game engine?


Dead Cells was written in Haxe.


Paper Please too.


To add to this, the creator also used Haxe to port to Unity: https://dukope.com/devlogs/papers-please/mobile/


Lucas Pope's dev logs are great.


I mean it's like why does one brand of automobiles is better than another brand of automobiles? Should we just have one brand?




Consider applying for YC's Summer 2025 batch! Applications are open till May 13

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: