Announcement

Collapse
No announcement yet.

Why Mono Is Desirable For Linux

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

  • Originally posted by yogi_berra View Post
    According to Popcon there are 196 people using Sparc, one using Sparc64, 75 using arm, 1164 using armel, and 53 using armhf.

    How many of the one percent of Debian users using these architectures are going to have mono installed to test if it works properly to file bugs?
    I'm not the one who claimed they "didn't work properly". That was you. Where's your evidence?

    Comment


    • Originally posted by n3wu53r View Post
      Exactly. However I would not be surprised if Mono on Linux was slower then MS's .net runtime on windows, you know, being reversed engineered and all. Actually that is probably the case.

      Bastion does not use mono on windows, but MS's .net.
      The use a forked monogame (XNA replacement) on linux/osx.
      Mono implements mostly a specification of executing MSIL, and the virtual machine is not a a clone of .Net
      Let me elaborate why:
      - .Net from very early used SSA representation, when Mono did this just about with Mono 2.2 (named Linear-IL)
      - at least from public description of CLR Runtime blog, .Net can recognize specific patterns of IL and can optimize those preferentially. Also, it is specified that, in .Net, functions with less than 32 bytes of MSIL in length are candidates for inlining. As far as I'm aware, in Mono the inlining does not happen on MSIL, but on intermediate representation, so Mono theoretically at least can do better inlining than .Net
      - the GC in Mono is less tuned and obviously not a reverse engineered from .Net, or from Java for that matter, yet the latest incarnation is generational because of performance implications (a generational garbage collector is faster than a non-generational one)
      - both are likely using a Linear Scan Register Allocator, a quick&dirty policy to allocate registers, which is fast, but in complex routines with a lot of variables, it will mean that it will be like 15% slower than the same C++ code
      Are Mono applications slower? If you have a Gtk#/.Net compared with Gtk#/Mono/Linux, of course Mono can (and should) be faster, even more so if you have 64 bit OS:
      - Gtk# on Windows is only 32 bit, so your application will run on the 32 bit runtime on Windows, meaning: slower call convention (the 64 bit calling convention allows using registers for function calls) and fewer registers
      - Cairo on Windows is slow, so drawing of widgets can make it look sluggish (because is indirected paint to another CPU based library, GDI+)
      - Mono has a more generic optimizer, and does not try to find patterns that it will know that Visual Studio/C# will fed into it, so it may optimize better the sequences that your code really has
      - Mono is leaner than .Net (at least because it does not use COM, and not only), making it that the application to start (visibly) faster than the .Net equivalent.
      As of 2012, Mono is not this sluggish environment that some people are thinking of 5 years ago.
      Last edited by ciplogic; 09-19-2012, 05:47 AM.

      Comment


      • Here's a bug report by some guy who are using monogame on linux: http://monogame.codeplex.com/workitem/6971

        He says that can't reach more than 40fps with a gtx570.

        Comment


        • Originally posted by narciso View Post
          Here's a bug report by some guy who are using monogame on linux: http://monogame.codeplex.com/workitem/6971

          He says that can't reach more than 40fps with a gtx570.
          He also says that this is a REGRESSION of the latest git version (read: not thoroughly tested or used in production) and that it ran just peachy at 60 FPS before. So I fail to see what this has to do with anything.

          Comment


          • The report was in May and there's no fix yet, so if games use the latest version of mono they'll suffer from this performance issues.

            Comment


            • Originally posted by narciso View Post
              The report was in May and there's no fix yet, so if games use the latest version of mono they'll suffer from this performance issues.
              I think you seem to understand that is not a Mono issue, but a MonoGame issue. Are different things, right? Also, it appears if you read the bug report, that there is a resize issue that happen all time because of a change in the MonoGame framework (not in Mono!)
              Thanks goodness that the bug report gave a profile file, so we also can check how much time is asked for various operations. I tried with my best understanding to see what is slow on this bug:
              Code:
              3476  milliseconds (wrapper managed-to-native) OpenTK.Platform.X11.Functions:XGetWindowProperty (intptr,intptr,intptr,intptr,intptr,bool,intptr,intptr&,int&,intptr&,intptr&,intptr&)
              4050   milliseconds (wrapper managed-to-native) System.Threading.Thread:Sleep_internal (int)
              238     milliseconds OpenTK.Graphics.GraphicsContext:get_CurrentContext ()
              270     milliseconds OpenTK.Graphics.GraphicsContext:<GetCurrentContext>m__6 ()
              107     milliseconds OpenTK.Graphics.GraphicsContext:get_IsCurrent ()
              204     milliseconds OpenTK.Platform.X11.X11GLContext:get_IsCurrent ()
              298     milliseconds OpenTK.Platform.X11.XLock:.ctor (intptr)
              232     milliseconds: OpenTK.Platform.X11.XLock:Dispose ()
              So excluding the Sleep call (which doesn't use CPU), that is used here and there, for 4 seconds, most of calls are in OpenGL/X11 stack.
              I understand, is Mono's fault anyway, but is just for no reason!

              Comment


              • I think linux ports, using mono or other libraries should be polished, they should run equal or better than windows counterparts. That would give linux a better reputation as a gaming platform, and more dev's would invest time and money porting games.

                Comment


                • Originally posted by narciso View Post
                  I think linux ports, using mono or other libraries should be polished, they should run equal or better than windows counterparts. That would give linux a better reputation as a gaming platform, and more dev's would invest time and money porting games.
                  Yes, this seems eventually a more balanced post, but what does not make justice is that Mono should not be in any wording in the first phrase. It will make give the impression that Mono is somewhat related with OpenGL drivers, right? Or if it would be told, it had to be along other things which are known to be slower: Doom 3 has a scripting engine that is way slower than Mono, GCC has sometimes regressions, video drivers are almost always an issue with Linux. My laptop has an AMD video card, and yes, it is detected just as occupying an PCI express port.
                  Also, as you appear to be more on Qt's side, as all libraries, have their own issues, so you should extend wording to put a balance. So let's see what some people think at Nokia about abstraction penalty.
                  At the end to run equal or better than Windows counterpart is in many way the interest of the community to make it happen: if you shun Mono as your platform and you don't at least give bug reports, the Mono developers will not know about them, so they cannot fix them. Later, when supposedly the Bastion 2 game appears, and video drivers are fixed, Bastion 2 will be hit on a bug that maybe would appear earlier, but never appeared because lack of testing or interest. Who will be at fault? Bastion developers because they don't have resources to fix all bugs they encounter in production? Linux users that did not spend time before on fixing at least some of the issues by reporting bugs and profile data?
                  Last edited by ciplogic; 09-19-2012, 11:30 AM.

                  Comment


                  • Originally posted by narciso View Post
                    I think linux ports, using mono or other libraries should be polished, they should run equal or better than windows counterparts. That would give linux a better reputation as a gaming platform, and more dev's would invest time and money porting games.
                    100% agreed. But 99% of the time, the porting or performance issues are in the low quality of graphics drivers on Linux, nothing else.

                    Comment


                    • Originally posted by directhex View Post
                      I'm not the one who claimed they "didn't work properly". That was you. Where's your evidence?
                      Where's yours that they work properly? If you have ever used Debian for any length of time than you know they have a history of packages that pass their automated tests but don't work properly because no one bothers using said package.

                      Comment


                      • Originally posted by yogi_berra View Post
                        Where's yours that they work properly? If you have ever used Debian for any length of time than you know they have a history of packages that pass their automated tests but don't work properly because no one bothers using said package.
                        He doesn't have to supply evidence. He didn't make the original claim. You did. The burden of proof is on you.

                        Comment


                        • Originally posted by yogi_berra View Post
                          Where's yours that they work properly? If you have ever used Debian for any length of time than you know they have a history of packages that pass their automated tests but don't work properly because no one bothers using said package.
                          well, there's the part where we run the runtime test suite on package compilation, so the build logs include those results

                          But as has been pointed out, the burden of proof is on the one making wild claims

                          Comment


                          • .Net

                            Originally posted by kazetsukai View Post
                            Enough claims. Facts:
                            • C++ / Qt work, NOW, on all platforms
                            • C# / Mono does not fully work, has caveats and bugs
                            • C++ / Qt are both very mature technologies and are proven for general purpose application development
                            • C# / Mono is not
                            • C++ / Qt are very resource friendly
                            • C# / Mono is not
                            • C++ has had massive mindshare and support for well over 20 years now
                            • C# doesn't have even close to the level of support C++ does, to this day.

                            Therefore:
                            There is no legitimate reason, ever, to choose Mono/C# over C++ and Qt. As another poster said, it is just laziness and incompetence.
                            Look, I love Linux and everything but seriously? Have you even Read a manual on WCF and LinQ checked out Asp.net or read the speck for GDI+ and DirectX in C#. .Net is like the Idea of Java but fast and sexy. I agree that C++ is a great language but you can do sooooo much more with C#. Open your mind. You can create extention methods for already created classes, even if thy are in DLL's then access then with the dot operator obja.Dostuff() where obja is an instance of a class in an assembly. I mean seriously I could write a book on all the things you can do in C# that you cannot in unmanaged languages. and maybe fill half a hand full of things that I can only do in a low level language but not in C#. Dude GTK is just that a graphics toolkit originally created for Gimp. C# is SOOOOOOO much more. I can dynamically write a service contract that works over tcpip/http/inproc and services clients without having to worry about security XML or memory management. In many cases .Net out-performs traditional C++ code for instance C# generics beat C++ Templates any day of the week because the code is not just expanded with the new type. Only one instance exists in memory in C# whereas C++ has a separate instance per instantiation. C# is not like Java, it gives you all the low level access if you want it, the power is there, it works with the native OS instead of trying to define it's own windowing system based on an object oriented graphics API like Java did, and why Java was so slow. I can write managed code in a SQ server CLR stored procedure, using a syntax I know instead of having to learn another stored procedure language. I can insert, update, and select from any data source using the same syntax (LinQ)

                            for instance
                            var foo = from p in products
                            where p.Category.ToString() == "language"
                            select { p.name, p.id, p.catagoryID, p.countryOfOrigin }

                            I can do this because the categoryID in products is a foreign key so it auto builds that Category object for me and lets me do a comparison. The same syntax would work if it was an Array() of product objects etc. I can build SOA applications (Service Oriented Applications) where the business logic is hidden behind service contracts that accepr and return defined data, then use multiple endpoints, named pipes or shared memory for local application and tcpip or http for access via the web. The same service contract. I can use differnce contracts from diferent companies to built a franken service oriented app/web app that delivers more than I alone could have build in, for instance I could use service contracts from google maps or whatever. C# and .Net is a Monster. I can enumerate the methods in an assembly/dll and their parameters/return types. As well as load unload them dynamically. I can even create custom types on the fly, and intgrate this ability into an existing pattern like factory design pattern. There is just so much. We're talking a new way of doing things not just the best X86 optimized code, we're talking mulch-threaded apps, which C++ templates does not take advantage of at all BTW and C# generics does. You are right, Mono is not there yet, .net is. .Net also does not have a whole bunch of dependancies like GTK does, it needs .net that's it. MS has invested the whole cow on this one I'm gonna bet on .net, Learn about it, you might just get hooked as well.

                            Comment


                            • Just one recent example of how Mono benefits Linux.

                              Project Eternity, the new RPG by Obsidian (makers of Fallout: New Vegas, Planescape:Torment and other great RPG games) was aiming to support Linux only after hitting 2.2 million. After selecting the Mono powered Unity platform for their game they have found that supporting Linux will be so easy that they are committing to doing it here and now. This is instead of Linux users having to bet on twice the amount asked for originally being pledged, they get support now (the 2.2 million goal is as of this writing still +400.000$ away). In addition if the 2.2 million goal is reached instead of Linux support Obsidian have now pledged that something new and amazing will be added instead (to be revealed in their next update).

                              Thanks to Mono, Project Eternity will now be big, better and Linux supported.

                              http://www.kickstarter.com/projects/...y/posts/313192

                              For a lot of these Kickstarter gaming projects Mac and Linux support are popular requests and often ones that will only be fulfilled if the amount of money pledged is significantly higher than what is asked for. Thanks to Mono and Unity offering excellent cross platform development and deployment this is likely to improve significantly as it speeds up such development goals and lets developers commit to them without having huge costs in experience, development time or support effort. So as Linux gamers, you get more games and any additional money is spent not making code cross platform capable but to make the actual game experience better for everyone.

                              So there you go Linux users, more quality games for your desktop. Thanks to Mono.. you are welcome.

                              Comment


                              • Originally posted by maxpfc View Post
                                ...
                                I agree that C++ is a great language but you can do sooooo much more with C#.
                                ...
                                What language was the .NET runtime, and the C-octothorpe compiler written in? I'll bet a beer the language is C++ or C. When they are written in C-octothorpe or Visual Basic then you could make such a claim without being laughed at.

                                Comment

                                Working...
                                X