Ich würde gerne Swift für Embedded-Programmierung verwenden, da ich fühle, wie es ist ein viel besserer Ersatz für C++, Der Prozessor, den ich benutze, ist ein ARM Cortex-M4F (http://www.ti.com/tool/ek-tm4c123gxl). Wenn man sich den schnellen Compiler page anschaut, sagt man, dass man LLVM IR von einer schnellen Quelle erzeugen kann und dann hoffe ich, dass ich mit LLVM kompilieren kann. Wäre das möglich?Verwenden Swift-Compiler für Bare-Metal?
Antwort
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.
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.
- 1. Strato BareMetal Server: SoftLayer_Hardware/{} bmserverID /rebootSoft.json
- 2. Provisioning BareMetal schenkt ‚Hostname‘ gesetzt Fehler
- 3. SoftLayer API: Wie bekomme ich VM erstellt von Baremetal
- 4. Wie kann ich den Status eines neu bereitgestellten BareMetal-Servers mithilfe der REST-API
- 5. Softlayer-API für VLAN-Trunk
- 6. Unterschied zwischen verwenden und verwenden = für Typen?
- 7. Tipps für Aufrufe verwenden?
- 8. OnBackPressed für Fragmente verwenden
- 9. Bilddimension für Elternobjekt verwenden
- 10. Spracheingabe für Spiegelkarten verwenden?
- 11. Spracheingabe für Spiegelkarten verwenden?
- 12. Verwenden LINQ für beliebige
- 13. Kann [nicht] verwenden für
- 14. LOOP für Einsätze verwenden?
- 15. Verwenden einer Variablen für num_splits für tf.split()
- 16. Verwenden von kCTLineBreakByCharWrapping für CTTypesetter?
- 17. Wie in_array() für falllose verwenden?
- 18. Verwenden von SimpleHTTPServer für Komponententests
- 19. Welche Datenzugriffstechnologie für Monotouch verwenden?
- 20. caffe.io.Transformer für LeNet-Klassifizierung verwenden
- 21. Verwenden von shared_ptr für refcounting
- 22. Verwenden Sie System.IO.Packaging für FlatOPC
- 23. Verwenden eines Anmeldeformulars für FOSOAuthServerBundle
- 24. Verwenden von android.net.rtp für VoIP
- 25. Verwenden Sie Kernbild für Objekterkennung
- 26. Verwenden von mod_rewrite für Subdomains
- 27. Einen Proxy für NSURLConnection verwenden
- 28. So verwenden Renderer für Tableheader
- 29. Docker-Umgebungsvariablen für Anmeldeinformationen verwenden
- 30. Wie Regex für Währung verwenden
die meisten der Abhängigkeit mit Apple-Frameworks sind weg, Foundation wurde in schnell implementiert und ist auch Open Source. –
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. –
@TonyK www.swift.org, swift hängt nicht mehr vom Ziel ab c. Es wurde Open Source –