Michael B. Trausch wrote: > On Thu, 2009-09-17 at 11:11 -0400, "Andrés G. Aragoneses" wrote: >> Michael B. Trausch wrote: >>> On Thu, 2009-09-17 at 11:20 +0200, Orlando José Luque Moraira wrote: >>>> Will Vala be in the future able to compile common c# projects with the >>>> original MS library references? (using other libraries) >>> Welcome to the list. >>> >>> It would be possible to write a similar framework library in Vala style, >>> but there would be little point. Any C# code would still need to be >>> ported to use it. Vala style is a bit different from C# style, and the >> Hey, so I understand that a vala file may not be compilable by a C# >> compiler, but how about the other way around? (So my question is "is >> vala a superset of C#"?) > > Nope. Again, there are not only syntax issues, but there is much more > than the syntax that differs between what you'd see in a C# program and > a Vala program. > > For example, method names are written like_this. This is incompatible > with java (likeThis) and C# (LikeThis) conventions. Also, data types
But this is just a convention. I'm talking about *real* compiler issues. > are different and have different rules; the underlying data types are C > data types, with some extensions that are provided for by the glib and > glib-gobject libraries. In this case, some fake class types could be created for the C# compiler to be understood by it. > In short, the differences are enough that you'd not be able to use a > single unified source tree, at least not without a great deal of effort. > Of course, _anything_ is possible given enough time. One potential > solution would be to code in neither, and instead generate the code for > both. > > For example, you could write a set of GNU m4 macros that would be > processed against text input to generate the same (functionally > speaking) code for Vala and for C#. I don't believe that such a job I think this effort is not worth it, because you don't end up with a language which looks like Vala or C#... What I'm talking about is if it would be possible to write, on purpose, some piece of code that uses the common set between Vala and C#, and thus, may be compilable by both. [*] > would be terribly easy, mind you, but it would be possible. The macros > would have to be able to effectively abstract away all of the > differences between the two worlds, though; for example, C# has the > concept of "unsafe" operations, while in Vala, everything just _is_. > (After all, Vala compiles to C.) > > Among the reasons that it would be very difficult to do is that there is > a massive difference between what's provided by the libraries that can > be assumed to be available when writing Vala code, and the libraries But let's assume we want to create just a very simple HelloWorld executable, both compilable by C# and Vala, with no usage of libraries. If this is possible, we could for example convert a simple C# library (such as the class System.Console, with just the method "WriteLine") into this "ValaSharp" language, and then create another executable on top of it that still runs on both environments. I am not sure if I'm explaining correctly. > that can be assumed to be available when writing code that targets the > CLI. But, if something like this _were_ to be done, to do it correctly > and do it well, it would have to support generation of code for more > languages than just C# or Vala: C++ and Java, and maybe a language that > runs on the Parrot VM, would be good ideas. However, that's a _lot_ of > knowledge to have to be encoded into such a system, and unless you have > lots of time, it's likely not worth it. > >>> other major difference is that Vala is not garbage collected. It uses >>> "assisted memory management" as opposed to garbage collection. This >>> changes the way you have to think about objects in subtle ways. >> Let's say we have a piece of code that can be compiled by both Vala and >> C# compilers, but it leaks in Vala but not in Mono (because of the GC). >> Could that piece of code be 'tweaked' in order to make it not leak in >> the Vala case? If yes, we could develop a Gendarme rule that analyzes >> the assembly to search for possible leaks that may occur if the source >> code is compiled with the vala compiler, right? > No, Why not? > but with Vala, you would use standard tools that are readily > available. You can use gdb for debugging, gprof for function profiling, I know, but what I'm trying to avoid is the use of runtime tools in favor of statical analysis tools (Gendarme). > and valgrind for memory use profiling. Since the output of Vala is > (IIRC) standard C89 code, these things all will work. Granted, you'll > have to read through listings that have the names of the variables and > objects in your software transformed to a normalized C form (e.g., the > static method AllTray.Program.main becomes all_tray_program_main). But > you can use tools that are very mature and have been used for years in > everyday native application and system programming. > > Just an aside, don't fall into the trap of thinking that just because > you write code for a managed environment that you cannot have memory > leaks. Sure, you won't have memory leaks if you're careful and free > references, but garbage collectors are all about reference counting. If > you still hold a reachable reference to an object, but you're still > finished with it, you're going to leak memory (in that the garbage > collector won't release that memory back to the heap on your behalf). > So, code running in the CLI *can* leak, just as Vala (or C) code can > leak. I know, I'm not assuming that. Let me elaborate. We could divide types of leaks here: a) Those that may occur even in a managed environment (as you mentioned). For example subscribing to an event and forgetting to unsubscribe it when we stop using the object. b) Those that wouldn't occur in a managed environment, but could occur in Vala because of the absense of a GC. c) Those that would occur in C, but not in Vala. So, as Gendarme is a static-analysis tool that has some rules to detect leaks of type (a), I was assuming that it may be possible to detect those of kind (b). I know that, for the sake of running the assembly in Mono, the information that a Gendarme rule like this could give would be useless, but it could be fine if someone wants to keep his source code free of leaks in *any* environment, provided that his source code is compilable by both environments (I mean, if what I ask above ^, marked as "[*]", is answered with a "yes"). Thanks, Andrés -- _______________________________________________ Vala-list mailing list Vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list