comp.lang.ada
 help / color / mirror / Atom feed
* Embeddinator-4000 begetting an Ada-cross-platform future?
@ 2018-02-26 17:06 Dan'l Miller
  2018-02-26 17:46 ` Dan'l Miller
                   ` (3 more replies)
  0 siblings, 4 replies; 34+ messages in thread
From: Dan'l Miller @ 2018-02-26 17:06 UTC (permalink / raw)


Although none of this supports Ada at this time, let's walk along a path of the present (0) and emerging (1 through 3) and a potential future (4 through 8) together.

0) Xamarin has accomplished a minor miracle of providing Xamarin.iOS, Xamarin.Mac, Xamarin.Android, and the forthcoming Xamarin.Tizen for developing software in the iOS, MacOS, Android, and Tizen OSes, using substantially the same C# culture of presenting the Objective-C iOS runtime, the Objective-C MacOS runtime, the Java-JVM Android runtime, and the Tizen C++ development SDK to C# on top of the Mono stack.

https://github.com/Microsoft/cppwinrt
https://moderncpp.com/2017/11/15/cppwinrt-exe-in-the-windows-sdk

1) Microsoft (actually the genius Kenny Kerr prior to being hired at Microsoft) has accomplished a minor miracle of generating ISO 14882:2017 C++ source code to invoke any WinRT component that has a .DLL and its accompanying .winMD (Windows metadata, which provides symbolic names among other rich information).  WinRT components are not limited to only WinRT (a.k.a. UWP).  Nowadays nearly all of Windows SDK and nearly all of .NET world (other than Mono) is presented as WinRT components, which are effectively a modernized version of ATL & COM from the older era of Microsoft.  This code generator is called cppwinrt.exe and the body of work that it generates is called C++/WinRT.  The generated code has some annoying C++ish peculiarities, such as all would-be(-in-C++/CX-or-C#) “types” are actually value-semantics object instances.  Of course, such peculiarities would be anathema to Ada culture, but still:  consider a world where (all) processor-native languages need not be extended with C++/CLI-esque or C++/CX-esque grafted-on C#-esque languages in order to invoke (or be invoked by) UWP and .NET runtimes.

https://github.com/mono/embeddinator-4000

2) Mono's Embeddinator-4000 has been also accomplishing another minor miracle of generating Java and Objective-C façades to any Mono DLL, especially the Xamarin.iOS, Xamarin.MacOS, Xamarin.Android, and so forth language projections of the iOS, MacOS, Android, and so forth SDKs.

3) Mono's Embedinnator-4000 could have a C++ language projection relatively soon for Clang to invoke the Objective-C runtime of iOS, the Objective-C runtime of MacOS, and (analogous to the way Xamarin.Android works) the JVM-based Java runtime of Android (externally, forcibly) via the JNI, and even perhaps a competitor to C++/WinRT for UWP.  Imagine Xamarin.iOS's, Xamarin.Mac's, Xamarin.Android's SDKs' APIs language-projected to ISO-14489-compliant C++.  Embeddinator-4000 generating a non-C++/WinRT C++ language projection of nonMono .NET SDKs for UWP or Windows 10 are conceivable.  Embeddinator-4000 generating a C++ language projection of Xamarin.Tizen SDK's APIs is also conceivable, as Xamarin.Tizen becomes a 1st-class citizen in the Xamarin/Mono world.  Btw, in case some reader is failing to grasp the import of this:  the miracle of Embeddinator-4000 (and of C++/WinRT for that matter) is not to generate the language projection of the API itself (although it does that).  Rather the key is that Embeddinator-4000 generates the glue code from that language projection of the SDK to the runtime of the SDK.  Some thin roll-your-own veneer code-generator is not what this is.  This is the real full invokable language projection of the SDK into other languages, really reading the Objective-C-runtime binaries and the JVM binaries to invoke those binaries from other languages.

4) Imagine an LLVM-backend for GNAT, so that GNAT can be debugged symbolically on iOS devices, instead of the current lack thereof.  (I am not talking about some old musty crusty Dragon Egg either, based on GCC 4.2.)  Is there any news on the current state of this?

5) Imagine a future release of Mono's Embeddinator-4000 that also would generate an Ada language projection of Xamarin's C# SDKs' APIs for all those OSes, somewhat mimicking the more-Ada-esque portions of Embeddinator-4000's language projections to the current Java, the current Objective-C, and/or the forthcoming C++.

6) Suddenly, shortly after the forthcoming advent of C++ as a processor-native language that can be utilized to write iOS apps instead of in Objective-C or in Swift or in Xamarin.iOS's C#, to write MacOS apps instead of in Objective-C or in Swift or in Xamarin.Mac's C#, to write Android apps instead of in Objective-C or in Swift or in Xamarin.Android's C#, and to write UWP apps on Microsoft Windows 10 editions of OSes instead of in .NET's C# or F# or C++/CX or C++/WinRT, then right on the heels of that (!) Ada could then be the 2nd processor-native language capable of writing apps for iOS, MacOS, Android, UWP, and eventually Tizen.  If C++ language projection in Embeddinator-4000 continues to fail to be released (as it has throughout 2017), then Ada could actually pull ahead in the race to be the 1st processor-native cross-platform language for all those OSes.

7) Suddenly, developers start considering C++ or Ada as a viable alternative to writing their apps as many as 6 times:
7.1) once in Swift or Objective-C for iOS;
7.2) again porting their mobile Swift or Objective-C app to desktop MacOS de-emphasizing the mobile UI/UX emphasizing window frames & menus, again;
7.3) again in Java or Kotlin for Android;
7.4) again in C# or F# or C++/CX or C++/WinRT for UWP (store app);
7.5) again porting their mobile UWP app to desktop or non-store Windows 10;
7.6) again in C++ for Tizen.

Oh, and Google is developing some sort of successor to Android and ChromeOS called Fuscia, so perhaps that might be the 7th rewriting/major-porting effort.

https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52

8) With Viper software architecture replacing MVC and MVVM software architecture in GUI and mobile apps, the nonportable OS-specific UI code in each View can be divorced from the cross-platform UX code in each Presenter (and Router for navigation segueing).
8.1) If this quarantining of nonportable UI code in the Viper Views is not enough, an Ada analogue of (the deeply flawed) Xamarin.Forms could be designed for true portability of commonplace abstractions of UI in each portable View, leaving only a few nonportable Viper Views that each take advantage of highly peculiar-to-1-OS UI features.

As perhaps the only 3 languages in the future to accomplish this degree of writing the UI/UX for all these OSes in the same language with the same (e.g., Reactive Extensions) programming-culture libraries, then C#, C++, and Ada can compete on their respective merits for dominance in the cross-platform domain, leaving Java, Kotlin, Swift, and Objective-C relegated to their relatively-walled-garden single-company narrower marketspaces, analogous to BLISS on DEC minicomputers, to PL/I on IBM and Multics versus PL/P on PrimOS versus PL/M on CP/M, and Protel on Nortel telephone equipment.  I bring up those historical examples, because the future is ripe for history repeating itself in the next half-decade or so.

This is tomorrow's carpe diem.  Seize it (or be a victim of natural selection's survival of the fittest).


^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2018-03-16 15:35 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-26 17:06 Embeddinator-4000 begetting an Ada-cross-platform future? Dan'l Miller
2018-02-26 17:46 ` Dan'l Miller
2018-02-26 19:38   ` Mehdi Saada
2018-02-26 19:51     ` Dan'l Miller
2018-02-26 20:34 ` Luke A. Guest
2018-02-26 20:35   ` Luke A. Guest
2018-02-26 22:41     ` Dan'l Miller
2018-03-02 19:55     ` Ivan Levashev
2018-02-26 21:43   ` Dan'l Miller
2018-02-26 22:12     ` Luke A. Guest
2018-02-26 22:26       ` Dan'l Miller
2018-02-26 23:32         ` Randy Brukardt
2018-02-26 23:56           ` Dan'l Miller
2018-02-28 15:55             ` Dan'l Miller
2018-02-28 17:24               ` Lucretia
2018-02-28 19:20                 ` Dan'l Miller
2018-03-01 16:03                   ` Dan'l Miller
2018-03-01 18:04                   ` Shark8
2018-03-01 19:09                     ` Dan'l Miller
2018-03-01 22:25                       ` Shark8
2018-03-01 23:08                       ` Randy Brukardt
2018-03-02  5:39                         ` Bojan Bozovic
2018-02-26 22:30       ` Dan'l Miller
2018-02-26 22:36         ` Luke A. Guest
2018-03-01 20:36 ` Robert Eachus
2018-03-09 16:45   ` Dan'l Miller
2018-03-13  9:54     ` alby.gamper
2018-03-13 15:26       ` Dan'l Miller
2018-03-14  8:53         ` alby.gamper
2018-03-14 15:24           ` Dan'l Miller
2018-03-16  9:55             ` alby.gamper
2018-03-16 15:35               ` Dan'l Miller
2018-03-02 20:18 ` Ivan Levashev
2018-03-05 16:57   ` Dan'l Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox