MathGroup Archive 2003

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: NETLink - CREATING a new class?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg45115] Re: [mg45085] NETLink - CREATING a new class?
  • From: "Werner Schuster" <werner.schuster at netway.at>
  • Date: Wed, 17 Dec 2003 07:54:31 -0500 (EST)
  • References: <200312161121.GAA24769@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

> Question:
> Is it possible to COMPLETELY do .NET programming from within
> Mathematica?

Well... you answered your questions yourself anyway;


> [And ultimately, to write an interactive .NET programming tool inside
> Mathematica, that would convert my mathematically-rigorous
> representation of algorithms into .NET code, that could be analyzed from
> Mathematica.]

Hmm... I am not sure what you want to do;
.Net/Link as well as J/Link basically offer a connection between the
M_-kernel
("M_" === "Mathematica")
and .Net and Java; you can either call M_ functions from .Net orJava or
script .Net or Java using M_ code;

What you want in the paragraph above sounds more like you want to
have an Mathematica -> .Net (CLR) compiler; at least it sounds like it,
as you want to convert code (algorithms) written in M_ into .Net code;
You can intermingle M_ code and .Net code pretty tightly, but when
you call M_ code, you just about always call code in the M_-Kernel;
for instance, a function like "Sin[]" is implemented in C(++) code in the
M_-Kernel
 (I suppose it is, if it is not, take some function that is);
The Problem with that is: as soon as you call a function in the M_-Kernel.
you have to use MathLink to do that; this has some overhead, as Mathlink is
basically a protocol for transporting M_-Expressions. This means, that
frequent invocation of M_-functions using Mathlink (.Net/Link and J/Link
use Mathlink)  is not a good idea and a sure way to kill your performance.


But maybe you are aware of that, and I just misunderstood your ideas;


> 1. Create new types (abstract interfaces) and new classes.
>   The hard part: these must INHERIT from fundamental classes provided
> in the .NET Common Language Runtime (CLR).

Possible with CodeDOM (as you mentioned in your other mail);
Though I think, users would basically have to define their classes
in a manner similar to CodeDOM; ie. something along the lines of
this PseudoCode:
cl = NetLinkCreateNewClass["fooClass", "Foo.Package.List"];
 (* cl is now a class derived from Foo.Package.List *)
NetLinkAddMethod["fooBar", symbolOfMathematicaMethod];
 ...
NetLinkLoadClass[cl];
... now use the class...

Hmm... I am not sure, I would like to program like that; though, some
better syntax or API to use this functionality might be found.

J/Link uses some form of what you want by using the Java Dynamic Proxy API;
this allows you to assign Handlers for Methods of a Java Interface;
example:
public interface Foo{
    public void bar();
 }

Now, say you want to create an object whose class implements type Foo,
that invokes an M_-function when the "bar()" method is invoked; this is
possible
with J/Link (see the details at
http://documents.wolfram.com/v5/Add-onsLinks/JLink/Part1.InstallableJavaCallingJavaFromMathematica/JLink1.2.17.html
 )



murphee



  • Prev by Date: Re: A Method to Simplify Matrix Entry?
  • Next by Date: Re: NETLink - CREATING a new class?
  • Previous by thread: Re: NETLink - CREATING a new class?
  • Next by thread: Re: NETLink - CREATING a new class?