2015-12-19 13 views

Antwort

3

Es ist definitiv möglich, Maschinencode mit Swift zu generieren. Wenn Sie ein Swift-Programm in Xcode oder mit dem Befehlszeilen-Compiler swiftc kompilieren, besteht die ausführbare Datei standardmäßig aus Maschinencode.

Der LLVM-Bytecode wird zu einem bestimmten Zeitpunkt während des Buildprozesses generiert, aber die endgültige ausführbare Datei, die erzeugt wird, ist Maschinencode. Es gibt Compiler-Optionen, mit denen Sie nur LLVM-Bytcode erzeugen können, wenn Sie möchten, aber LLVM-Bytecode wird normalerweise nicht direkt ausgeführt, wie der Java-Bytecode, der von der Java-Laufzeitumgebung ausgeführt wird.

Soweit Cross-Compiling für ARM, ich bin mir nicht sicher, wie es mit dem Tool swiftc funktioniert, aber wenn Sie ein Xcode iOS-Projekt erstellen, erzeugt es eine ausführbare ARM-Datei. Ich bin mir sicher, dass der swiftc Compiler alle Optionen hat, die Sie benötigen, um ausführbare ARM-Dateien zu erstellen.

Der einzige Haken, den ich mir vorstellen kann, ist, dass viele Swift-Funktionen von Apples Frameworks abhängen. Aber jetzt, da Swift Open Source ist, gibt es nach und nach reinere Swift-Bibliotheken für alle möglichen Dinge.

+1

die meisten der Abhängigkeit mit Apple-Frameworks sind weg, Foundation wurde in schnell implementiert und ist auch Open Source. –

+0

Swift benötigt die Objective-C-Laufzeit, die im eingebetteten Kontext ziemlich groß ist (mindestens 600 KB laut [dieser Person] (http://xmaker.mx/archives/14), die Objective-C auf einem SiLabs-Cortex arbeiten ließen -M4). Wenn Sie externen Speicher zum Brennen haben, dann ist das weniger ein Problem. –

+0

@TonyK www.swift.org, swift hängt nicht mehr vom Ziel ab c. Es wurde Open Source –

0

Ich habe diese Möglichkeit untersucht (mit Swift für eingebettete Anwendungen). Da Swift nach der statischen Kompilation von "Hello, World!" (unter Ubuntu, x86-64 mit dem neuesten Swift 3.0.2) lag die Binärausbeute über 5 Megabyte, was auf "kleinen" ARM-Controllern (wie Cortex-M0) ein Problem sein könnte.

Verwandte Themen