Announcement

Collapse
No announcement yet.

Mono Developers Renew Their Love For Microsoft

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #41
    ciplogic,

    You clearly know your material. Your points are backed with evidence. But:

    - You are passionate about Mono/Xamarin/.NET/C#, which is great, but many of your statements seem highly slanted as a result. I'm biased as well, but I'm trying to be reasonable about it, acknowledge some C#/Mono advantages etc.
    - Mono's strength is runtime flexibility and integration with non-Windows OSs. The core VM isn't quite as optimized as the official Microsoft one, it runs a little slower. You don't use it to win benchmarks, you use it because you want to use C# on a non-Windows OS. That's not necessarily a "poor man's" tool, but it is what it is. RoboVM occupies a similar spot in the JVM space: people don't use it because it runs server apps faster, they use it to target OSs like iOS that the official Oracle runtime doesn't support.
    - You may have some points on Java memory. The Java VM, and probably the Microsoft VM, have undergone too many iterations by different super serious team to just waste large amounts of memory for no reason. I can believe JVM made a different set of trade offs. For example, memory alignment generally trades memory efficiency for runtime efficiency and different VM teams optimize for different targets. But when you claim that Java wastes 10x as much memory as .NET, that just is too far outside of reason. Even when you cite Guava memory wastefulness, I have never directly used that particular Guava API, but I suspect that the Guava guys just made different trade offs and optimizations rather than just wrote a horrible product.
    - You quote Xamarin benchmarks. Those guys are known for making completely deceptive skewed benchmark tests. They aren't a neutral party at all. Almost anyone can cook up some benchmarks and cherry pick results. They are notorious for that.
    - I believe you are downplaying the major defficiencies of C# as a language. You are too gung ho about the related technologies to see its flaws. I think even many Microsoft people are completely aware that C# is quite dated, which is why they are priming F# for prime time when the mass audience is ready.
    - Some of the reverse is probably true, I'm not familiar with PInvoke, but I suspect you are right that .NET has advantages in that area. Even I will give the Mono team credit for integrating their toolset into other ecosystems like PlayStation Vita much better than most other toolsets.

    Comment


    • #42
      Originally posted by DanLamb View Post
      ciplogic,

      You clearly know your material. Your points are backed with evidence. But:

      - You are passionate about Mono/Xamarin/.NET/C#, which is great, but many of your statements seem highly slanted as a result. I'm biased as well, but I'm trying to be reasonable about it, acknowledge some C#/Mono advantages etc.
      - Mono's strength is runtime flexibility and integration with non-Windows OSs. The core VM isn't quite as optimized as the official Microsoft one, it runs a little slower. You don't use it to win benchmarks, you use it because you want to use C# on a non-Windows OS. That's not necessarily a "poor man's" tool, but it is what it is. RoboVM occupies a similar spot in the JVM space: people don't use it because it runs server apps faster, they use it to target OSs like iOS that the official Oracle runtime doesn't support.
      - You may have some points on Java memory. The Java VM, and probably the Microsoft VM, have undergone too many iterations by different super serious team to just waste large amounts of memory for no reason. I can believe JVM made a different set of trade offs. For example, memory alignment generally trades memory efficiency for runtime efficiency and different VM teams optimize for different targets. But when you claim that Java wastes 10x as much memory as .NET, that just is too far outside of reason. Even when you cite Guava memory wastefulness, I have never directly used that particular Guava API, but I suspect that the Guava guys just made different trade offs and optimizations rather than just wrote a horrible product.
      - You quote Xamarin benchmarks. Those guys are known for making completely deceptive skewed benchmark tests. They aren't a neutral party at all. Almost anyone can cook up some benchmarks and cherry pick results. They are notorious for that.
      - I believe you are downplaying the major defficiencies of C# as a language. You are too gung ho about the related technologies to see its flaws. I think even many Microsoft people are completely aware that C# is quite dated, which is why they are priming F# for prime time when the mass audience is ready.
      - Some of the reverse is probably true, I'm not familiar with PInvoke, but I suspect you are right that .NET has advantages in that area. Even I will give the Mono team credit for integrating their toolset into other ecosystems like PlayStation Vita much better than most other toolsets.
      I have to start with an apology: certainly Java doesn't use 10x memory, and it was an exageration from my side. Though, I can still say that it uses more memory than a typical other VM implementations. Given this, this quote were intentionally exagerated based on the claims were provided (maybe with no intent to misinform) by you. If they were slanderous, it was not by far any intent but to give just "tit for tat".

      Also, I want to disclaim some things about myself and the "Xamarin benchmarks". I did contribute to Xamarin products, and in fact just to only one (Xamarin Studio) some patches in code quality (and once I had also reported a bug that MonoDevelop did not open my project, but I didn't contribute anything to fix it), but all benchmarks are written by myself and they are also documented how I did the testing, etc. as my intent of writing CR is an academic endevour and my interst into compilers (too long and too personal to expand it here). The project is simply the tentative (for now successful) to translate CIL (the MSIL / .Net bytecodes) to C++. This is the reason why I know .Net internals (and Java too) as when I did convert for first time I've got more than 8x slowdown in any C++ application and I had to look in various ways to improve it.

      At last, Java does offer tangible performance speedup in most cases, and in my view: .Net CLR is lightweight (as it maps C/C++ fairly well as semantics, just with a GC in the back) but with GCC -O1 optimizations, Java is an alien runtime (alien != slanderous, simply, it is like Self or SmallTalk or Objective Pascal on that manner, where the wrapping is not done naturally to C/C++) but with optimizations comparing with GCC -O2 (as it uses HotSpot, CHA and partially interpretrs the code). I agree for this reason with you 100%: 8 bytes alignment is for performance and less misaligned cache lines (which is really important to some extend into modern CPUs).

      C# is not that modern? Probably, I never did a detailed testing. I tried Kotlin (which I heard that is like Scala) and I use JetBrain tools (R#), and I liked more than C#. I would love that Kotlin to work in .Net (it doesn't... )

      But also to all fairness, the JVM bytecodes are not so well defined as CIL ones: generics are defined at the IL level in CLR world (I think if you said that Scala has "full" reified generics, they have either to make copies in implementation of bytecodes), structs too, and is not just that you make them "generic" but you can define them as parameters, Java is limited as types (and will not be able to add unsigned int in my understanding) because there are no enough bytecode numbers, and even the instructions that do math are for me a bit silly: you push two integers, and after that you have to call instruction "iadd", because you cannot add them anyway with "fadd" (addition of two floats). Java has also limitations that CLR extends them: like a function in Java can have no more than 256 parameters, but in .Net the limit is of 64K (if I recall right), so even you use code generators, you have to look sometimes of the Java generated limits.

      So maybe the pretiest language is Scala, the fastest (in the runtime performace) is Java, but as for me are not by much. InvokeDynamic and Jigsaw are the single things I've heard in a while that are fascinating in Java world, but these two things are features made in the last 5 years of development. Maybe I wasn't impressed with the "WPF clone" (Java FX) or with their public record (with Oracle suing Google and things of this sort)

      Comment


      • #43
        Originally posted by DanLamb View Post
        Sure, Java lets you write inefficient code. No language is idiot proof. If you use a totally inappropriate data structure you can get terrible results.
        I'm not convinced that using objects to store data in an 'object-oriented' language is 'a totally inappropriate data structure'.

        C++, for example, would likely use no more RAM to store the values as Byte objects that just wrapped a byte value than it would for a byte array (assuming you didn't run into any stupid packing restrictions). Java can't, because of the silly 'every object is a reference' design that requires you to store pointers everywhere.

        Comment


        • #44
          Originally posted by movieman View Post
          I'm not convinced that using objects to store data in an 'object-oriented' language is 'a totally inappropriate data structure'.

          C++, for example, would likely use no more RAM to store the values as Byte objects that just wrapped a byte value than it would for a byte array (assuming you didn't run into any stupid packing restrictions). Java can't, because of the silly 'every object is a reference' design that requires you to store pointers everywhere.
          Pleas learn a language before bashing on it.
          Java does have primitive types and you do use the a lot.
          C# however doesn't, they are just keywords to the Classes.

          Comment


          • #45
            I completely believe you or agree with every point in your last post with some minor exceptions.

            - "[Java] will not be able to add unsigned int": Why? Even if this would require major JVM bytecode changes, that's completely feasible. A new Java VM must continue to support older legacy byte code, but newer byte code does not need to run on older VMs. Java changes byte code standards with every version of Java. They could do a ground-up rewrite if there was justification.
            - Scala runs as fast as Java. It actually benchmarks slightly faster, which I didn't expect, but that's not generally a reason to use it over Java.
            - Scala isn't just "pretty" in terms of aesthetics: it's elegant, concise, and easier to express and maintain logic. Many argue that Haskell is better in this regard (my experience with Haskell is far too shallow).
            - Kotlin: It seems like a half way step between Java and Scala. I don't see a justification for the existence of this. There is no novel paradigm or use case or feature or audience for this.
            - I'm curious, if you are fond of Mono and .NET, why not use F#?
            - WPF + JavaFX: The demand for classic desktop GUI toolkits has mostly vanished as almost everything has gone web or mobile. One big advantage of JavaFX is that it runs natively on Win/Linux/Mac and has alpha support for iOS. I know the Mono guys were big advocates of using native GUI toolkits rather than foreign platform agnostic toolkits, but often, for IDE-like tools, a platform agnostic GUI toolkit is what you want. Even if you love WPF from a developer perspective, it really is a strictly Windows only toolkit.

            Here is my one contentious point:

            Technologies like Clojure/Scala are focused on language level enhancements regarding elegance/conciseness/logic. They want to bring their innovations to the widest audience possible and be politically neutral, so Clojure supports both JVM and CLR (and JavaScript). Scala used to support both, but deprecated it's CLR runtime, presumably due to a combination of complexity and lack of interest.

            You've made many points about the technical benefits of the CLR bytecode and the VM technology of Mono. If these are legitimate, politically neutral technology enhancements, why don't they bring their VM innovations to other compatible language/library technologies like Java, the Java system library, Clojure, and Scala, and reach a larger number of developers and focus less on restricting their choices at other points in their development stacks?

            My hypothesis is that Xamarin isn't focused on improving VMs in a politically neutral fashion. Their primary charter is spreading the adoption of Microsoft technologies, eliminating competing technologies, and the technical innovations that they deliver are just a means to an end.

            Comment


            • #46
              Originally posted by DanLamb View Post
              I completely believe you or agree with every point in your last post with some minor exceptions.

              - "[Java] will not be able to add unsigned int": Why? Even if this would require major JVM bytecode changes, that's completely feasible. A new Java VM must continue to support older legacy byte code, but newer byte code does not need to run on older VMs. Java changes byte code standards with every version of Java. They could do a ground-up rewrite if there was justification.
              In fact is not feasible. JVM bytecodes are limited in count, by a wide margin: they are limited to 256 opcodes, and most of them are taken. In comparison CIL (CLR bytecode) is 2bytes long (meaning more options to play with, some of the most common instructions are 1 byte though). Excluding this, as I've told you earlier, the JVM bytecodes are type encoded, when from CIL standpoint they depend on type inference. So adding support for the basic 4 operations in JVM for an UInt32 you have to add at least the following opcodes: convert_to_uint32, add_ui32, sub_ui32, mul_ui32, rem_ui32. In comparison, in .Net you have to add two instructions: convert_to_uin32 and convert_overflow_uint32. So at least without changing the semantics drastically, you will not see too soon, or ever this support.

              Originally posted by DanLamb View Post
              - Scala runs as fast as Java. It actually benchmarks slightly faster, which I didn't expect, but that's not generally a reason to use it over Java.
              - Scala isn't just "pretty" in terms of aesthetics: it's elegant, concise, and easier to express and maintain logic. Many argue that Haskell is better in this regard (my experience with Haskell is far too shallow).
              - Kotlin: It seems like a half way step between Java and Scala. I don't see a justification for the existence of this. There is no novel paradigm or use case or feature or audience for this.
              - I'm curious, if you are fond of Mono and .NET, why not use F#?
              (...)
              I use at home F#, for very tutorial like coding, but... when I need functional, Linq fulfills my needs for now. At work, I cannot use F# at all, I asked this and there is no support (from my colleagues). How do we check for code safety? We use R# (static analysis components) and Code Contracts.

              As for Kotlin which I can comment (but not for Scala, as I never used it), I can say that are some specific features (mostly in static code analysis) which are guaranteed by the language. Maybe this feature alone makes the language useful for Jetbrains folks.
              Originally posted by DanLamb View Post
              Here is my one contentious point:

              Technologies like Clojure/Scala are focused on language level enhancements regarding elegance/conciseness/logic. They want to bring their innovations to the widest audience possible and be politically neutral, so Clojure supports both JVM and CLR (and JavaScript). Scala used to support both, but deprecated it's CLR runtime, presumably due to a combination of complexity and lack of interest.

              You've made many points about the technical benefits of the CLR bytecode and the VM technology of Mono. If these are legitimate, politically neutral technology enhancements, why don't they bring their VM innovations to other compatible language/library technologies like Java, the Java system library, Clojure, and Scala, and reach a larger number of developers and focus less on restricting their choices at other points in their development stacks?

              My hypothesis is that Xamarin isn't focused on improving VMs in a politically neutral fashion. Their primary charter is spreading the adoption of Microsoft technologies, eliminating competing technologies, and the technical innovations that they deliver are just a means to an end.
              Let's start with Xamarin, and my understanding of Xamarin: Xamarin is a company, and by default no company is moral. Replace Xamarin with Google, RedHat, Microsoft, Oracle, IBM, ... anything and you will see that no company is interested of contributing to other project excluding there is a case of money, politics or brand involved to support other products. "Do not evil" was the Google motto, and I don't see you bashing Google. What can be defined are: opensource (they don't talk with 'free' anymore) friendly companies and opensouce not so friendly companies.

              Sun was opensource friendly, when MS was not, but as of today Xamarin is opensource friendly, MS is also in the .Net C# world (F#, Iron* languages, MVC3 and 4, Entity Framework, etc.) were opensourced and paid (at least in part by MS full time developers). Did they have an interest to do it? Yes, as people start to be interested in another platforms (like iOS and ObjC or Java and Android), MS prefers that people to look for C# tools instead of looking in other places. With this perspective, Oracle is more of a bully (and Google is following close in my view) in the free software. They used to own some major opensource projects and some of them departed (MariaDB and LibreOffice). OpenJDK is great, given it was made by Sun public, and MS I can agree it doesn't have a similar "openess" whatever it means.

              Going back to Xamarin or MS and why they are not contributing into Java... in my view Java has two issues: is a dinosaur project (as of OpenJDK, the Hotspot are overly complex, maybe Jigsaw will simplify things a little) driven tight by Oracle, so there is little benefit for other companies to add contributions; even on the surface they look alike, internally are fairly different: bytecodes have different semantics (albeit similar as both are stack VMs), the places where there is a gap between Java and .Net can be solved fairly easy with this opensource project, or using Google's protocol buffers (which has a .Net implementation too).

              Comment


              • #47
                Originally posted by ciplogic View Post
                In fact is not feasible. JVM bytecodes are limited in count, by a wide margin:
                The current bytecodes are limited in count, but there is no reason they can't completely redesign that. That wouldn't even be that big a deal. The new VMs need to support old byte code of course, but that wouldn't conflict.

                Originally posted by ciplogic View Post
                As for Kotlin which I can comment (but not for Scala, as I never used it), I can say that are some specific features (mostly in static code analysis) which are guaranteed by the language. Maybe this feature alone makes the language useful for Jetbrains folks.
                I used to prefer the Kotlin approach. It's simpler for most mainstream programmers who are used to null to understand. However, after using it more, I believe that the Maybe/Option solution to avoid null entirely is better, even if it involves a small learning adoption curve.

                Originally posted by ciplogic View Post
                Sun was opensource friendly, when MS was not, but as of today Xamarin is opensource friendly, MS is also in the .Net C# world
                They are "open source" in the literal sense that they release source code to their products and allow project forks in many situations. That's a real benefit.

                However, JVM has more a culture of decentralized independence where there is maximum choice and the best technologies rise to the top regardless of vendor, where .NET is more of a curated walled garden ecosystem.

                If you look at independent technologies like Clojure that operate on both the JVM and .NET, it is far more adopted and embraced in the JVM community. Microsoft and Xamarin ignore it in their evangelism efforts and keynote speaches, and the .NET community follows suit.

                There is a huge ecosystem around .NET, and there is amazing, super high quality independent technologies, like Clojure. But the community is much more heavily vendor centric around Microsoft/Xamarin, and technologies that don't receive official endorsement from Microsoft/Xamarin are second class outsiders.

                Originally posted by ciplogic View Post
                by default no company is moral.
                You can say the same about people. No one is truely moral and almost everyone could be corrupted by unchecked power.

                There are still tangible differences between people, and groups of people, and organizations. Some companies make better products than others, and some ecosystems have a more open nature than others.

                Originally posted by ciplogic View Post
                Going back to Xamarin or MS and why they are not contributing into Java... in my view Java has two issues: is a dinosaur project
                You have some completely legitimate points where Java has technical deficiencies. Almost every technology does.

                It is silly to suggest that Xamarin are these neutral technology people who contentious decisions on a primarily technical basis that just coincidentally happen to unversally align perfectly with their big sponsor. This is all transparently political. Xamarin's history is evangelizing all Microsoft technologies and only Microsoft technologies. They've been heavy evangelists/supporters of .NET, C#, Silverlight, ASP.NET, LINQ, and F# and Microsoft's TypeScript. They ignore technologies like Clojure and extensively bash competing technologies like Java which is consistent with Microsoft evangelism. Xamarin has even been extensively involved with advocating for Microsoft's Office Open XML office document standards which doesn't even seem to have any technical significance to their products.

                Comment


                • #48
                  Originally posted by DanLamb View Post
                  The current bytecodes are limited in count, but there is no reason they can't completely redesign that. That wouldn't even be that big a deal. The new VMs need to support old byte code of course, but that wouldn't conflict.
                  Let me clarify: when Java faced the option to have reified generics and change the VM, they decided to not change the VM because it was a big deal. You imply that is possible just because at the end, they can make a separate VM (like Dalvik) and pack it with the main VM and anything that is old runs the "classic JVM" and everything new runs the "Java3x" or whatever will be named with a different bytecode and meta-capable. Excluding we talk SF, in reality it will not be the case

                  Originally posted by DanLamb View Post
                  They are "open source" in the literal sense that they release source code to their products and allow project forks in many situations. That's a real benefit.

                  However, JVM has more a culture of decentralized independence where there is maximum choice and the best technologies rise to the top regardless of vendor, where .NET is more of a curated walled garden ecosystem.
                  JVM may have a descentralized culture, but can you name something that come from a non descentralized source? Like a non de-facto implementation. If you make your own Java, can you name it Java? Or do you need to pass JCK suite and to pay Oracle for this certification!?

                  If you looked in the CLR world, the CIL/MSIL part was developed "in the open", it was developed by MS with feedback from HP and IBM. CIL (MSIL) and C# are ECMA specified (so are similar with JavaScript in this regard). Is the same with Xaml.

                  Originally posted by DanLamb View Post
                  If you look at independent technologies like Clojure that operate on both the JVM and .NET, it is far more adopted and embraced in the JVM community. Microsoft and Xamarin ignore it in their evangelism efforts and keynote speaches, and the .NET community follows suit.

                  There is a huge ecosystem around .NET, and there is amazing, super high quality independent technologies, like Clojure. But the community is much more heavily vendor centric around Microsoft/Xamarin, and technologies that don't receive official endorsement from Microsoft/Xamarin are second class outsiders.
                  In fact there are first class citizens in the .Net world: Boo is one, DLR is another (which was imported into C# 4.0 dynamic features), Iron* languages (as much as there was developed by MS was a bit faster than their native Ruby and Python implementations. Many of "second class citizens" as you name them are much more with your perspective about a "iron-fist" driven projects. The fact that MS offers many infrastructure projects like NuGet, good Xml parsers, good libraries for almost anything made much useless to create libraries for various aspects where Java created them. There is no need for Maven or OSGi in .Net's world, or a very little reason to exist a project like Jigsaw or InvokeDynamic.

                  This is why most of development happened upstream, and Mono if you will look in what is it, is mostly made upstream. OpenTK (the OpenGL wrapper is higher quality than any Java OpenGL wrapper I know) was imported into Xamarin. Similarly MonoGame.

                  Also there are stand alone projects in .Net world, I recommend to check OpenRA, is really a great game.

                  Originally posted by DanLamb View Post
                  You have some completely legitimate points where Java has technical deficiencies. Almost every technology does.
                  You miss the point of all the cases I've told you. Is not to say that Java has deficiencies, was to say that your point that an "open flow of ideas" is not trivially possible as even the principles are the same the languages in fact are fairly different. Given this, you cannot make a reference parameter to Java (to make a swapReference function) for example. Is not to bash Java or the JVM, but simply to see that .Net has a different semantics so it cannot (trivially) make the flow of ideas flowing. Also, Java had a head-start of 5 years in many places, and right now is still important in some fields. .Net/Mono though got it to be significant in places

                  Originally posted by DanLamb View Post
                  It is silly to suggest that Xamarin are these neutral technology people who contentious decisions on a primarily technical basis that just coincidentally happen to unversally align perfectly with their big sponsor. This is all transparently political. Xamarin's history is evangelizing all Microsoft technologies and only Microsoft technologies. They've been heavy evangelists/supporters of .NET, C#, Silverlight, ASP.NET, LINQ, and F# and Microsoft's TypeScript. They ignore technologies like Clojure and extensively bash competing technologies like Java which is consistent with Microsoft evangelism. Xamarin has even been extensively involved with advocating for Microsoft's Office Open XML office document standards which doesn't even seem to have any technical significance to their products.
                  First of all I never suggested that Xamarin is neutral, but I didn't see any point where Oracle is technology neutral. Does it support Android as of today? Is it Dalvik developped in the open?

                  Another mistake is that you seem to have a bias against Xamarin as a MS supporter, but Xamarin is different from Miguel de Icaza. On his blog he writes that he doesn't present the position of his employer. So he supported Silverlight, Linq, Typescript and MS's Office Xml format, but Xamarin did not support all (some were supported like: C#, .Net, F#) but Xamarin is neutral on MS Office, Silverlight, TypeScript. Is it good to make this distinction for many reasons.

                  Also, I think that depends how you count it Google is a Java supporter, but also is backstabbing many opensource projects in Java world. This kind of behavior is not so often found in the .Net world. Case and point: Android Studio is based today on IntelliJ IDEA Community edition, not on Eclipse, but Google did not submit patches or report bugs for none of the projects. Dalvik was implemented behind the closed doors (and still is, as ART runtime proves), and is a non-standard Java VM.

                  Independent Java projects were not supported by big companies like Looking Glass.

                  At last, why you use Scala as the best example, why don't *you* support it for .Net? In fact I found many .Net languages supported by Xamarin, at least if you report bugs that work in .Net you should get fixes to work inside Mono. In fact I remember I reported a bug in XSP (Asp.Net implemented in C# by Xamarin) and they fixed it, even is not their main thing they sell today.

                  Comment


                  • #49
                    Originally posted by ciplogic View Post
                    Let me clarify: when Java faced the option to have reified generics and change the VM, they decided to not change the VM because it was a big deal.
                    This is just false. It was end developer source code migration compatibility, not VM or byte code issues. Directly from Neal Gafter who was a principal author on the JDK at that time

                    Thoughts about Programming Languages, Science and Philosophy.


                    Generics are implemented using erasure as a response to the design requirement that they support migration compatibility: it should be possible to add generic type parameters to existing classes without breaking source or binary compatibility with existing clients. I wrote about this two years ago. Migration compatibility is exploited widely in JDK5; all of the collection classes and interfaces use generics, yet existing code using collections continues to work. Without migration compatibility, the collection APIs could not be retrofitted use generics; we would probably have added a separate, new set of collection APIs that use generics. That was the approach used by C# when generics were introduced, but Java did not take this approach because of the huge amount of pre-existing Java code using collections.
                    I prefer the C# solution and I believe most other devs do as well.

                    Originally posted by ciplogic View Post
                    JVM may have a descentralized culture, but can you name something that come from a non descentralized source? Like a non de-facto implementation. If you make your own Java, can you name it Java? Or do you need to pass JCK suite and to pay Oracle for this certification!?
                    "name something from a non decentralized source"? Non decentralized is centralized, so Oracle? I don't think that's what you meant. Obviously, almost everything in the Java world comes from outside of Oracle: the popular languages (Scala, Clojure, Groovy), the two major IDEs (Eclipse and IntelliJ), the popular build tools (Ant, Maven, Groovy, SBT), plus the popular web frameworks, logging frameworks, testing frameworks, mocking frameworks, etc.

                    A non de-facto implementation? Like RoboVM or IcedTea or JRockit (was acquired and merged into mainline JDK) or the ones from here: http://en.wikipedia.org/wiki/List_of...rtual_machines

                    Java is a trademark protected word. You can't name your own tech Java, just like you can't name your own tech company Microsoft or Google either. That's not an unreasonable restriction.

                    You can also freely fork Java, as long as you keep it under GPL terms, which Google didn't want to do with Android.

                    I completely acknowledge there is uglier legal or political issues invovling the JCP and the disputes with Apache Harmony and even Android.

                    Originally posted by ciplogic View Post
                    The fact that MS offers many infrastructure projects like NuGet, good Xml parsers, good libraries for almost anything made much useless to create libraries for various aspects where Java created them. There is no need for Maven or OSGi in .Net's world, or a very little reason to exist a project like Jigsaw or InvokeDynamic.
                    This is where we agree to disagree. You point out all these open source .NET projects and activity which I'm generally aware of and point out that C# has official ECMA standardization which I already know, but then you say that MS technologies are so good, that .NET doesn't need the same type of open source choices. That last part is where we can agree do disagree. I've worked in C# companies for years, and often there's various Microsoft standards, which to others are fine, but to me are awful, and there's just a widespread hostility to non-Microsoft alternatives. I find that stifling. Clearly, you are happy with .NET as a more heavily curated ecosystem, and so are a lot of other perfectly intelligent developers.

                    Originally posted by ciplogic View Post
                    First of all I never suggested that Xamarin is neutral, but I didn't see any point where Oracle is technology neutral.
                    The one big difference is that when Oracle does something arguably wrong, the community is more willing to adopt non-Oracle solutions.

                    Originally posted by ciplogic View Post
                    Another mistake is that you seem to have a bias against Xamarin as a MS supporter, but Xamarin is different from Miguel de Icaza. On his blog he writes that he doesn't present the position of his employer. So he supported Silverlight, Linq, Typescript and MS's Office Xml format, but Xamarin did not support all (some were supported like: C#, .Net, F#) but Xamarin is neutral on MS Office, Silverlight, TypeScript. Is it good to make this distinction for many reasons.
                    Miguel is the founder and CTO and spokesperson for Xamarin. That is silly to claim that he doesn't represent the team when he's talking about work relevant issues. Did Steve Jobs not represent Apple? Sure, there is some difference between the leaders and the official company.

                    Before Xamarin split from Novell and chose its current name, that team did support and promote Silverlight for many years before eventually cancelling it.

                    Originally posted by ciplogic View Post
                    At last, why you use Scala as the best example, why don't *you* support it for .Net?
                    It's not my job to promote Scala and I don't want to put more effort into promoting it than making casual recommendations. Scala tried to support both JVM/CLR in the past, but I presume the cost of supporting different ecosystems, and a lack of interest from the .NET side didn't justify it. The typesafe guys make lots of effort to cater to both Java and C# developers.

                    Comment


                    • #50
                      Originally posted by DanLamb View Post
                      This is just false. It was end developer source code migration compatibility, not VM or byte code issues. Directly from Neal Gafter who was a principal author on the JDK at that time

                      Thoughts about Programming Languages, Science and Philosophy.
                      Did I read the same text as well? Yes, maybe I misread but the Java did care (maybe too much) on backward compatibility so it wasn't able to make a (fairly trivial from bytecode standpoint) change to support "full" generics. If you look from CIL instruction set, there is no (visible) bytecode change (there are some extra parameters the class Type has to have to make things working) to support generics explicitly. This is in stark contrast with the idea of adding support for unsigned int, in which JVM (if it follows the previous bytecode philosophy) doesn't have bytecodes to spare (and imagine the previous code will be 100% compatible, so is out of the talk of Generics that can break code).
                      Originally posted by DanLamb View Post
                      "name something from a non decentralized source"? Non decentralized is centralized, so Oracle? I don't think that's what you meant. Obviously, almost everything in the Java world comes from outside of Oracle: the popular languages (Scala, Clojure, Groovy), the two major IDEs (Eclipse and IntelliJ), the popular build tools (Ant, Maven, Groovy, SBT), plus the popular web frameworks, logging frameworks, testing frameworks, mocking frameworks, etc.

                      A non de-facto implementation? Like RoboVM or IcedTea or JRockit (was acquired and merged into mainline JDK) or the ones from here: http://en.wikipedia.org/wiki/List_of...rtual_machines
                      Yes, this is in fact what exists also in the .Net world, some parts were replaced by upstream implementations (like Nant was and is still popular, but people use today MSBuild because is well integrated with both VS or Xamarin or SharpDevelop). Some items are not yet replaced by far like: NUnit is far more popular than MSTest, and in my work for years I have not seen any MSTest "shop" to say so. NUGet makes so hard to make another replacement usable (they were, like Mono.Addins), because it is integrated vertically (from the command line to IDEs) and also horizontally: it supports C#, VB.Net, C++, etc. NHibernate was really very popular before Entity come about, and the success of Entity was based on many folds of reasons again: it was opensource, well packaged, well documented, supported by MS, as it was MVC3 or MVC4, the "new" MS way to implement web frontends. There are in fact a lot of opensource/free packages in the C# world, maybe a half of what you have in Java (with Maven), but is a non-trivial number (Stable packages: "There are 16768 packages" ).

                      But what I meant by Java contributions in a descentalized source (you're right, I've mistyped) is that major contributions from outside that went back to Oracle. Like let's say an Hibernate to become the reference JPA implementation, or OSGi to be a standard way accepted by Oracle to modularize (at leas the high level components). What about MS/Xamarin. As was told earlier DLR started as an opensource project and is still opensource (even it "runs" the dynamic C# part), Ikvm.Reflect is the reflection API of the Mono's C# compiler.

                      Originally posted by DanLamb View Post
                      Java is a trademark protected word. You can't name your own tech Java, just like you can't name your own tech company Microsoft or Google either. That's not an unreasonable restriction.

                      You can also freely fork Java, as long as you keep it under GPL terms, which Google didn't want to do with Android.

                      I completely acknowledge there is uglier legal or political issues invovling the JCP and the disputes with Apache Harmony and even Android.

                      This is where we agree to disagree. You point out all these open source .NET projects and activity which I'm generally aware of and point out that C# has official ECMA standardization which I already know, but then you say that MS technologies are so good, that .NET doesn't need the same type of open source choices. That last part is where we can agree do disagree. I've worked in C# companies for years, and often there's various Microsoft standards, which to others are fine, but to me are awful, and there's just a widespread hostility to non-Microsoft alternatives. I find that stifling. Clearly, you are happy with .NET as a more heavily curated ecosystem, and so are a lot of other perfectly intelligent developers.
                      The one big difference is that when Oracle does something arguably wrong, the community is more willing to adopt non-Oracle solutions.
                      As I've told you, NUnit is far more popular, even MSTest is integrated with Visual Studio. NAnt was more popular than .bat files, and I've seen it working in big C++ companies before MSBuild was in place. I used NRefactory and I see no replacement for controls like AvalonDock or AvalonEdit.

                      [QUOTE=DanLamb;373771]
                      Miguel is the founder and CTO and spokesperson for Xamarin. That is silly to claim that he doesn't represent the team when he's talking about work relevant issues. Did Steve Jobs not represent Apple? Sure, there is some difference between the leaders and the official company.

                      Before Xamarin split from Novell and chose its current name, that team did support and promote Silverlight for many years before eventually cancelling it.
                      It is not silly to claim that he doesn't represent the team. Because for example Miguel has political views, and clearly not everyone share his views. Steve Jobs did refrain to state politics on Twitter for example. Similarly, Novell had a politics (albeit criticized from Linux folks) of interoperability, so it was normal that if Miguel (or Novell) believed that they want to interoperate with MS, they have to make Mono compatible and to promote their stuff.

                      Why I say that Miguel is different from let's say Xamarin or Novell, is at another level: certainly he was bashing C++ or Java on his blogs, but also people from other communities do it also. Rob Pike (Go creator) does it, Herb Shutter (is from Microsoft btw) the C++ committee head in his presentations is a collection of logical fallacies, and I think for Miguel to answer to him was at least appropriate. Is it also true from other members (I don't know all the outspoken Java folks, but Cliff Chick did comment that Java can beat C++ handily and he retracted some claims).

                      Taking of the face value, Miguel was (and I think he still is) an enthusiast, a dreamer (at least technology wise, as politics he looks down to earth to me) and he made many claims promoting MS technologies (which he obviously like). Anyway, he did it many times with fairly good reasons. For example his promotion of MS OpenXml, and the support in Gnumeric is common sense for me: he stated that Gnumeric internals were matching really well the MS format, so it was much easier to support than ODF and for small projects is overkill; his promotion of Silverlight was that he didn't want that Linux to be the "second or third class citizen" in the case that Silverlight is successful. I think that these are good views in themselves (even are made from a partisan standpoint).

                      Originally posted by DanLamb View Post
                      It's not my job to promote Scala and I don't want to put more effort into promoting it than making casual recommendations. Scala tried to support both JVM/CLR in the past, but I presume the cost of supporting different ecosystems, and a lack of interest from the .NET side didn't justify it. The typesafe guys make lots of effort to cater to both Java and C# developers.
                      Yes, I fully know what you mean, and I see that most of the differences between Mono (which is an open environment, as Java is) and Java is mostly about the perceived culture. As for me I'm not so interested in Scala(the same about Closure), but not because I have something against Java, but because sometimes the combination of IDE, tools (paid ones) that are given from my company and opensource/free ones do successfully fill my needs. If I need a fancy toolkit, there is XWT, which is developed in the open and is the base of a major IDE in the Mono world (so is "half supported"), it is a vibrant and kicking. Is it anything than Swing (which is to be deprecated) and JavaFX around in the Java world?

                      Comment

                      Working...
                      X