<div dir="ltr">I think the OP was asking not about importing C symbols into Swift but rather exporting Swift to C.</div><br><div class="gmail_quote"><div dir="ltr">On Wed, 23 Dec 2015 at 15:18 Brent Royal-Gordon via swift-users &lt;<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">&gt; What are the current facilities planned or in development for FFI? Just as Swift functions can be exposed through @objc, how would I add a similar capability for pure C? Is this what, in fact, module maps might be for?<br>
&gt;<br>
&gt; I ask since writing high performance native code for dynamic languages is currently done in C, and that’s a pretty bad idea. It would be great for Swift if people started writing native bindings in it as opposed to C, but it probably needs at the least a way to re-export global public functions for C/C++.<br>
&gt;<br>
&gt; Please let me know if I should take this to swift-dev or swift-evolution!<br>
<br>
Swift does not require a foreign function interface—it can directly call C functions. Sometimes Swift generates a trampoline to do this, but often not even that. The module map basically just tells Swift which headers and binaries make up a particular module. There&#39;s generally no need to write any bridging code—it just works.<br>
<br>
There are a few C constructs that Swift doesn&#39;t support very well, like unions and fixed-size arrays in structs. In those cases, you may need to write some C functions which perform the operations that can&#39;t be easily expressed in Swift, but these functions would just be plain old C with no special bridging involved. Similarly, you may choose to write wrappers around some of your library&#39;s C constructs to make them more convenient to use—for instance, if your library has a struct called `foo` and an operation on that struct called `frobnicate_foo()`, you might extend `foo` to add a `frobnicate()` method to it. But this is purely optional, and you would write it in plain old Swift.<br>
<br>
Though Apple&#39;s platforms are most commonly associated with Objective-C, there&#39;s a lot of C over there too. Swift works very well with it—this stuff is fast, as transparent as it can be, and frequently exercised.<br>
<br>
In short: Just try it. It&#39;s pretty easy.<br>
<br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
<br>
_______________________________________________<br>
swift-users mailing list<br>
<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br>
</blockquote></div>