[Mono-list] C# & AIX Compatibility!!

Jonathan Pryor jonpryor@vt.edu
22 Jul 2003 08:35:30 -0400

I am not aware of any efforts to port Mono to AIX.  It's also unlikely
to happen very soon, as (IIRC) AIX runs on a PowerPC-compatible
platform, and PowerPC support is rather lacking right now.  That should
change in the future, but the time-frame is unknown.

Which leaves (*gasp*) the option of rewriting the code in C++.  Or,
trying to convince your client to use Linux on Intel hardware, instead
of AIX.

As far as the "rewrite in C++" route goes, I'm not aware of any articles
or websites that suggest how to go about this.  I wouldn't think it
particularly difficult, however, unless heavy use of System.Reflection
or the runtime infrastructure is used (e.g. AppDomains, loading
Assemblies at runtime, use of System.Object.GetType(), etc.).  I am not
aware of any C++ equivalent for the runtime infrastructure.

However, if the runtime is used minimally (hopefully true in your case),
language conversion shouldn't be too difficult.  Indexers would map do a
operator[] on the appropriate class.  However, since C# makes it so easy
to distinguish between get and set access on the returned value,
operator[] will need to return a new class (a proxy), which uses an
implicit conversion operator for the get operation, and operator= for
the set operation.  For example:

	/* implements get/set functionality */
	struct IntProxy {
		operator int () const {/* ... */}
		IntProxy& operator=(const int& n) {/* ... */}

	struct Segment {
		/* for the indexer */
		IntProxy operator[](const std::string& idx);

Properties can be simulated (using the same proxy technique shown
above), but is likely overkill.  Just using set/get methods is likely
the simpler approach:

	struct HasProperties {
		/* Name property */
		std::string Name() const;
		void Name(const std::string& name);

 - Jon

On Tue, 2003-07-22 at 00:25, Anand Ramani wrote:
> Hi,
> I have a query regd C# wrt non-Windows platorm(AIX to
> be specific).
> Our client has an existing C# class library(part of
> server component) and his client webapp invokes it. 
> Now he wants the server component to run on Windows
> and AIX. Is there any way i can make use of exisiting
> C# code in AIX?
> If not, can you give me some info/tips/URLs in
> rewriting
> the C# code onto C++?
> 1. especially indexers
> for eg: public RouteSegment RouteSegment
> {
> get { return (RouteSegment)this[ROUTE_SEGMENT]; }
> set { this[ROUTE_SEGMENT] = value; }
> }
> where this[] is implemented in a different .cs file
> and RouteSegment is a class (different .cs file) and
> ROUTE_SEGMENT is a public string const declared in a
> differnt .cs file
> 2. Properties
> Let me know whether there are any reference
> material/urls pertaining to C#->C++
> migration/compatibility
> thanks
> Anand
> __________________________________
> Do you Yahoo!?
> Yahoo! SiteBuilder - Free, easy-to-use web site design software
> http://sitebuilder.yahoo.com
> _______________________________________________
> Mono-list maillist  -  Mono-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list