News for hackers. Stuff that matters.
Re:Flutter 2 by bilal4hmed on Wednesday March 03, 2021 @02:39PM (#26333291)
Not like electron at all. It compiles down to a native binary for the OS.
Re:Flutter 2 by axaxs on Wednesday March 03, 2021 @03:15PM (#26333789)
Eh, it's a little murky. I was playing with dart a little. It can in fact create a single binary, but it looks like it's just putting the interpreter with the code.

I say that because if you strip or pack the binary, instead of working it shows the output of running dart with no arguments.

Re:Flutter 2 by vsmenon on Wednesday March 03, 2021 @04:16PM (#26334675)
[ disclaimer: I work on the Dart team ]

It depends on how you run. Dart can either run in JIT mode or AOT mode. In general, when you ship a production app (e.g., for Flutter), you are using AOT - i.e., it's compiling to native machine code. In this case, there is no interpretation or compilation at runtime. We still bundle a runtime for garbage collection.

Re:Flutter 2 by axaxs on Wednesday March 03, 2021 @04:35PM (#26334931)
Which does 'compile exe' use? Essentially here is what I see -

  $ cat a.dart
  void main() {
  print("hello world");
  }

  $ dart compile exe a.dart
  Info: Compiling with sound null safety
  Generated: /home/x/a.exe
  ~ $ strip a.exe
  ~ $ ./a.exe --version
  Dart SDK version: 2.12.0 (stable) (Thu Feb 25 19:50:53 
  2021 +0100) on "linux_x64"

If I run without --version, it prints the same thing the 'dart' command does.
Re:Flutter 2 by vsmenon on Thursday March 04, 2021 @09:26AM (#26342846)
Thanks - not what I'd expect, but I can repro. Bug filed here:

https://github.com/dart-lang/sdk/issues/45197

It is AOT though. If you time `dart a.dart` vs `./a.exe` (pre strip :-), the latter should be considerably faster.

Re:Flutter 2 by mraleph on Thursday March 04, 2021 @10:00AM (#26343220)
[I work on Dart VM team]

`dart2native` just concatenates two binaries together: AOT runtime binary and AOT snapshot binary. AOT snapshot is an ELF binary which contains native code generated from your original Dart code.

The approach is not pretty but was chosen as an implementation shortcut.

That's why `strip` does not actually do good things to the binary.

There is no reason to run `strip` on such binaries - because they don't contain anything strippable.

Re:Flutter 2 by axaxs on Thursday March 04, 2021 @11:34AM (#26344525)
Thanks. Also noting that upx has the same behavior.

I didn't inspect the binaries, just try to see how/if they compress.

Re:Flutter 2 by mraleph on Friday March 05, 2021 @05:39AM (#26355300)
We are planning to fix it some time in the future, we really only expected moderate usage of `dart2native` and only on Linux. Turns out that there is demand for using it all over the place, which includes Mac and Windows and requires things like signing support... And to make executable signable we need to make them real Mach-O / PE executables and not weird concatenations of bytes.