{"id":872,"date":"2012-05-29T10:22:35","date_gmt":"2012-05-28T22:22:35","guid":{"rendered":"https:\/\/www.deltics.co.nz\/blog\/?p=872"},"modified":"2012-05-29T10:22:35","modified_gmt":"2012-05-28T22:22:35","slug":"the-emperors-new-native-pt-2","status":"publish","type":"post","link":"https:\/\/www.deltics.co.nz\/blog\/posts\/872\/","title":{"rendered":"The Emperors New Native &#8211; pt. 2"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\"> 3<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span><p>Marc Hoffman kindly took the time to respond to my previous post and prompted me to re-formulate and expand my observations on <a href=\"http:\/\/blogs.remobjects.com\/blogs\/jim\/2012\/05\/15\/p4268#comment-10186\">Jim McKeeths post<\/a> (which never made it to the comments thread on the RO blog for reasons best known to The Cloud).<br \/>\n<!--more--><br \/>\nThe biggest issue I had with Jim&#8217;s post in particular was that he conflated JIT technology with managed runtimes.<\/p>\n<p>Whilst it may be true that JIT is something that is currently only found together with managed runtimes, there is no technical reason why JIT should and could not be incorporated into un-managed frameworks if there were genuine benefits to be gained.  It would however complicate the distribution of applications produced by with unmanaged code.<\/p>\n<p>Managed frameworks simplify the distribution of code that incorporates JIT in the bootstrap because the requirement to have the managed runtime environment pre-installed (or distributed with the app) comes as a necessary and unavoidable overhead (some might say &#8220;complication&#8221; &#8211; a significant, recurring support issue for a .NET application that I am familiar with comes from variations in the .NET framework environment on which it relies at the various sites on which it is used).<\/p>\n<p>With an unmanaged application it would be an additional runtime\/distribution complication, regarded by and large as a negative quality.<\/p>\n<p>I&#8217;ve said it before, and I&#8217;ll say it again now:  .NET is basically the 21st Century VBRUNx00.DLL (on steroids and huge amounts of growth hormone).  \ud83d\ude09<\/p>\n<p>But if a managed runtime is not a pre-requisite for JIT, an obvious question is why is it that only managed runtimes incorporate it (apart from the runtime\/distribution wrinkle mentioned above) ?<\/p>\n<p>It&#8217;s almost as if managed runtimes are trying to compensate for something&#8230;  \ud83d\ude09  <\/p>\n<p>Also, the benefits of JIT are largely &#8211; afaik &#8211; theoretical.  Yes, Microsoft (to take .NET as an example) could invest the time and effort to create the JIT compilers necessary to target every new evolution of the latest and greatest Intel and AMD silicon, but in practice I don&#8217;t believe they do.<\/p>\n<p>And why should they ?<\/p>\n<p>As Jim himself points out in his response to some comments, if you need performance, managed frameworks would not be your first choice (an observation somewhat at odds with the position taken in his post itself).  He (or perhaps the comment he responded to &#8211; I don&#8217;t recall) isolates games as an example of where managed frameworks are not the best fit, but &#8220;game&#8221; is simple a very specific example of &#8220;demanding application&#8221;, not the ONLY example.<\/p>\n<p>The real point is that not all applications <strong>need<\/strong> that best performance and that there is therefore a trade-off to be struck with productivity and <strong>that<\/strong> is the true advantage of frameworks in general, but again, not an exclusive advantage of <strong>managed<\/strong> frameworks.<\/p>\n<p>Delphi&#8217;s biggest selling point is the VCL and the way that it makes developing native code Windows applications massively productive <strong>compared to other native code development tools<\/strong>.<\/p>\n<p>With FireMonkey you still get the native code but you lose the competitive edge against the other native code tool set for the platform(s) it targets because you are no longer comparing like with like.  Those other native code tools produce truly native applications.<\/p>\n<p>Delphi with FireMonkey delivers native <strong>code<\/strong>, but not native <strong>applications<\/strong>.<\/p>\n<p>I should also stress that this distinction is not confined to the UI toolkits but the wider native capabilities of the platforms, much of which &#8211; in the case of OS X \/ iOS are difficult if not impossible to access.<\/p>\n<p>Which is why I am currently teaching myself Xcode, Objective-C and Cocoa, for it is increasingly obvious to me that <strong>that<\/strong> is easiest and most reliable path to creating native applications for OS X and iOS.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\"> 3<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span>Marc Hoffman kindly took the time to respond to my previous post and prompted me to re-formulate and expand my observations on Jim McKeeths post (which never made it to the comments thread on the RO blog for reasons best known to The Cloud).<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[4],"tags":[148,135],"class_list":["post-872","post","type-post","status-publish","format-standard","hentry","category-delphi","tag-fail","tag-firemonkey"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1TKYv-e4","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/872","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/comments?post=872"}],"version-history":[{"count":3,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/872\/revisions"}],"predecessor-version":[{"id":875,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/872\/revisions\/875"}],"wp:attachment":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/media?parent=872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/categories?post=872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/tags?post=872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}