The CorbaScript Language

CorbaScript is an interpreted object-oriented scripting language dedicated to CORBA environments. Scripts (i.e. CorbaScript programs) can invoke any operation, get and set any attribute of any CORBA object. Moreover, any OMG IDL interface can be implemented by scripts. CorbaScript provides a dynamic binding to OMG IDL descriptions: no OMG IDL stub or skeleton need to be generated. OMG IDL descriptions are extracted from the Interface Repository and are made directly available to scripts. Invocations of CORBA objects are achieved by the CORBA DII mechanism. The CORBA DSI is used to implement CORBA objects with CorbaScript. Moreover scripts can invoke any world-wide CORBA object through IIOP.

CorbaScript fully hides these complex CORBA mechanisms via a simple, attractive and powerful scripting language. Finally CorbaScript is the first implementation of the OMG's IDL Script specification.

Some other documents:

Commercial CorbaScript distributor sites:


Availability

The CorbaScript interpreter is written in C++ and is available on most common Unix-based operating systems and Windows. Moreover, it is built to be easily ported on any ORB environment, operating system and C++ compiler.

Current tested ORBs

CorbaScript can be compiled on the following ORBs:

Current tested C++ compilers

CorbaScript can be compiled on the following C++ compilers:

Current tested configurations

Currently, CorbaScript has been successfully tested on the following configurations:

  ORB             OS              C++ Compiler                    NAME
------------------------------------------------------------------------------
MICO		  any		any				MICO_GENERIC
								MICO_GENERIC_shared_libs

MICO		  AIX	  	GNU C++ Compiler 2.7.2		MICO_AIX_GCC

MICO		  AIX		egcs 1.0.1			MICO_GENERIC

MICO		  HP-UX		egcs 1.0.1			MICO_GENERIC

MICO		  Linux		egcs 1.0.2			MICO_GENERIC

MICO		  Linux	  	GNU C++ Compiler 2.7.2		MICO_LINUX_GCC

MICO		  Solaris	egcs 1.0.1			MICO_GENERIC

MICO		  Solaris  	GNU C++ Compiler 2.7.2		MICO_SUN_GCC

MICO		  Solaris  	GNU C++ Compiler 2.95.1		MICO_GENERIC

MICO		  Solaris	SUN C++ Compiler 4.1 and 4.2	MICO_GENERIC

MICO		  Windows 95/NT Cygnus egcs 1.1			MICO_GENERIC

MICO		  Windows 95/NT	MS Visual C++ 5.0/6.0		MICO_WIN_MSVC


OAK		  Linux		egcs				OAK_LINUX_EGCS

OAK		  Solaris	GNU C++ Compiler 2.8.1		OAK_SUN_GCC

OAK		  Solaris	SUN C++ Compiler 4.1 and 4.2	OAK_SUN_CC

OAK		  Windows NT	MS Visual C++ 5.0/6.0		OAK_WIN_MSVC


OmniBroker	  AIX 4.2	AIX C Set ++ (xlC 3.1.4.6)	OB_AIX_xlC

OmniBroker	  HP-UX		aC++ A.01.00 and A.01.03	OB_HP_aCC

OmniBroker	  Linux		GNU C++ Compiler 2.7.2		OB_LINUX_GCC

OmniBroker	  Solaris	GNU C++ Compiler 2.7.2		OB_SUN_GCC272

OmniBroker	  Solaris	GNU C++ Compiler 2.8.1		OB_SUN_GCC281

OmniBroker	  Solaris	SUN C++ Compiler 4.1 and 4.2	OB_SUN_CC

OmniBroker	  IRIX SGI	SGI C++ Compiler 7.0.1 and 7.1	OB_SGI_CC

OmniBroker	  Windows 95/NT	MS Visual C++ 5.0/6.0		OB_WIN_MSVC


omniORB 2.8.0	  Linux		egcs 1.0.2/1.1			omniORB2_LINUX_EGCS

omniORB 2.8.0	  Solaris	SUN C++ Compiler 4.1 and 4.2	omniORB2_SUN_CC

omniORB 2.8.0	  Windows 95/NT	MS Visual C++ 5.0/6.0		omniORB2_WIN_MSVC


omniORB 3.0.3	  Linux		GNU C++ Compiler 2.95.x		omniORB3_LINUX_GCC295
								omniORB3_LINUX_GCC295_shared_libs

omniORB 3.0.3	  Solaris	GNU C++ Compiler 2.95.x		omniORB3_SUN55_GCC295
								omniORB3_SUN55_GCC295_shared_libs
								omniORB3_SUN57_GCC295
								omniORB3_SUN57_GCC295_shared_libs

omniORB 3.0.3	  Solaris	SUN C++ Compiler 4.2		omniORB3_SUN_CC

omniORB 3.0.3	  Windows 95/NT	MS Visual C++ 5.0/6.0		omniORB3_WIN_MSVC


ORBacus 3.x	  HP-UX		aC++ A.01.xx			OB3_HP_aCC

ORBacus	3.x	  Linux		egcs 1.0.2/1.1			OB3_LINUX_EGCS
								OB3_LINUX_EGCS_shared_libs

ORBacus	3.x	  Linux		GNU C++ Compiler 2.95.x		OB3_LINUX_GCC295
								OB3_LINUX_GCC295_shared_libs

ORBacus	3.x	  OSF1 V4.0	GNU C++ Compiler 2.7.2		OB3_OSF_GCC

ORBacus	3.x 	  Solaris	GNU C++ Compiler 2.7.2		OB3_SUN_GCC

ORBacus	3.x 	  Solaris	GNU C++ Compiler 2.8.1		OB3_SUN_GCC281

ORBacus	3.x 	  Solaris	GNU C++ Compiler 2.95.1		OB3_SUN_GCC295
								OB3_SUN_GCC295_shared_libs

ORBacus	3.x	  Solaris	SUN C++ Compiler 4.1 and 4.2	OB3_SUN_CC

ORBacus	3.x	  Windows 95/NT	MS Visual C++ 5.0/6.0		OB3_WIN_MSVC


ORBacus 4.x	  HP-UX		aC++ A.01.xx			OB4_HP_aCC

ORBacus	4.x	  Linux		GNU C++ Compiler 2.95.x		OB4_LINUX_GCC295
								OB4_LINUX_GCC295_shared_libs

ORBacus	4.x	  OSF1 V4.0	DEC C++ 6.2-024			OB4_OSF_cxx

ORBacus	4.x 	  Solaris	GNU C++ Compiler 2.95.1		OB4_SUN_GCC295
								OB4_SUN_GCC295_shared_libs

ORBacus	4.x	  Solaris	SUN C++ Compiler 5.x		OB4_SUN_CC

ORBacus	4.x	  Windows 95/NT	MS Visual C++ 5.0/6.0		OB4_WIN_MSVC


Orbix2000	  Linux		GNU C++ Compiler 2.95.x		Orbix2000_LINUX_GCC295

Orbix2000	  Solaris	SUN C++ Compiler 4.1 and 4.2	Orbix2000_SUN_CC

Orbix2000	  Solaris	GNU C++ Compiler 2.95.x		Orbix2000_SUN_GCC295

Orbix2000	  Windows 95/NT	MS Visual C++ 5.0/6.0		Orbix2000_WIN_MSVC


TAO 1.1		  Solaris	GNU C++ Compiler 2.95.1		TAO_1_1_SUN_GCC295

TAO 1.1		  Solaris	SUN C++ Compiler 4.1 and 4.2	TAO_1_1_SUN_CC

TAO 1.1		  Windows 95/NT	MS Visual C++ 5.0/6.0		TAO_1_1_WIN_MSVC

TAO 1.2		  Linux		GNU C++ Compiler 2.95.x		TAO_1_2_LINUX_GCC295
								TAO_1_2_LINUX_GCC295_shared_libs

TAO 1.2		  Solaris	GNU C++ Compiler 2.95.1		TAO_1_2_SUN_GCC295
								TAO_1_2_SUN_GCC295_shared_libs

TAO 1.2		  Solaris	SUN C++ Compiler 4.2		TAO_1_2_SUN_CC

TAO 1.2		  Windows 95/NT	MS Visual C++ 5.0/6.0		TAO_1_2_WIN_MSVC


VisiBroker 3.3.x  HP-UX		aC++ A.01.15			VB3_HP_aCC

VisiBroker 3.3	  Solaris	GNU C++ Compiler 2.95.1		VB3_SUN_GCC295

VisiBroker 3.3	  Solaris	SUN C++ Compiler 4.1 and 4.2	VB3_SUN_CC

VisiBroker 3.3	  Windows 95/NT	MS Visual C++ 5.0/6.0		VB3_WIN_MSVC


VisiBroker 4.5	  Linux		GNU C++ Compiler 2.95.x		VB4_LINUX_GCC295

VisiBroker 4.5	  Solaris	SUN C++ Compiler 5.2		VB4_SUN_CC

VisiBroker 4.5	  Windows 2000	MS Visual C++ 5.0/6.0		VB4_WIN_MSVC
------------------------------------------------------------------------------

Experimental ports

CorbaScript is ported on the following configurations but it does not work correctly.

  ORB		  OS		  C++ Compiler			  NAME
------------------------------------------------------------------------------
ORBacus		  AIX 4.2	AIX C Set ++ (xlC 3.1.4.6)	OB3_AIX_xlC

ORBacus		  OSF1 V4.0	DIGITAL C++ V6.0-010		OB3_OSF_cxx

VisiBroker 3.2	  Solaris	SUN C++ Compiler 4.1 and 4.2	VB3_SUN_CC

VisiBroker 3.x	  IRIX SGI	SGI C++ Compiler 7.0.1 and 7.1	VB3_SGI_CC

VisiBroker 3.x    HP-UX	aC++ 	A.01.xx				VB3_HP_aCC

VisiBroker 3.2	  Windows 95/NT	MS Visual C++ 5.0		VB3_WIN_MSVC
------------------------------------------------------------------------------

The following ports can be compiled but don't work correctly (perhaps due to the broken exception handling in GNU C++ 2.7.2).

  ORB		  OS		  C++ Compiler			  NAME
------------------------------------------------------------------------------
OmniBroker 2.0.3  HP-UX		GNU C++ Compiler 2.7.2		OB_HP_GCC

OmniBroker 2.0.3  IRIX SGI	GNU C++ Compiler 2.7.2		OB_SGI_GCC

MICO 2.0.4	  IRIX SGI	GNU C++ Compiler 2.7.2		MICO_SGI_GCC
------------------------------------------------------------------------------

Future ports

If you try to compile CorbaScript on other configurations (ORB/OS/C++ compiler), please report us any problem and/or success. In future releases, we plan to port CorbaScript on:

Please contact us for other ports on another ORB, another OS or another C++ compiler.

Note that there is no direct plan to support the Orbix 3.0 product because currently, it does not provide the DynAny API. However, Orbix servers can be invoked by a CorbaScript interpreter if they were compiled to support the Internet Inter-Orb Protocol.
However CorbaScript supports the better Orbix 2000 product;-)


Downloading CorbaScript

CorbaScript is an academic project available in full source form and free of charge for any use.
Try it and give us feedback to improve it.

Click here to download CorbaScript 1.3.5 now!


The Hello Example

Imagine the following well-known OMG IDL interface:
  interface Hello {
    void hello ();
    void display (in string message);
  };
With CorbaScript, we can interactively invoke a CORBA object that implements this OMG IDL interface:
  unix_prompt> cssh
  CorbaScript 1.3.5 (Jul 20 2001) for ORBacus 4.0.5 for C++
  Copyright 1996-2001 LIFL, France
  >>> # the `hello' variable refers to a CORBA `Hello' object.
  >>> hello = Hello("IOR:....")
  >>> # the 'hello' operation is invoked on this CORBA object.
  >>> hello.hello()
  >>> # the 'display' operation is invoked on this CORBA object.
  >>> hello.display("Hello World!")

  >>> # we obtain the CORBA Naming Service.
  >>> NS = CORBA.ORB.resolve_initial_references ("NameService")
  >>> # we resolve a name into the CORBA Naming Service.
  >>> object = NS.resolve(CosNaming.Name(CosNaming.NameComponent("anHelloObject","")))
  >>> # we can use an easier syntax because CorbaScript can automatically
  >>> # convert array values into OMG IDL sequences and structures.
  >>> object = NS.resolve ([["anHelloObject",""]])

  >>> # Now we can invoke OMG IDL Hello operations on this object.
  >>> object.display("Hello World!")
Then invoking CORBA objects becomes very simple and user-friendly with CorbaScript.

But, how could we implement the `Hello' interface with CorbaScript?

  unix_prompt> cssh
  CorbaScript 1.3.5 (Jul 20 2001) for ORBacus 4.0.5 for C++
  Copyright 1996-2001 LIFL, France
  >>> # a script class is defined.
  >>> class HelloImpl
      {
        # This is the constructor.
        proc __HelloImpl__(self)
        {
        }
        # This is the implementation of the OMG IDL `hello' operation.
        proc hello (self)
        {
          println ("The OMG IDL `hello' operation is invoked.")
        }
        # This is the implementation of the OMG IDL `display' operation.
        proc display (self,message)
        {
          println (message)
        }
      }
  >>> # we create an HelloImpl instance.
  >>> hello = HelloImpl()
  >>> # We can locally invoke this instance.
  >>> hello.hello()
  The OMG IDL `hello' operation is invoked.
  >>> hello.display("Hello World!")
  Hello World!

  >>> # Now we connect it to the CORBA bus and fix what
  >>> # OMG IDL interface this instance implements.
  >>> CORBA.ORB.connect(hello,Hello)
  >>> # we register it into the CORBA Naming Service.
  >>> NS = CORBA.ORB.resolve_initial_references ("NameService")
  >>> NS.bind ([["anHelloObject",""]],hello._this)

  >>> # Now, this instance is an available CORBA object.
What do you think about this small example?
Could you invoke and implement CORBA objects more easily than with CorbaScript?

More complex examples are provided in the CorbaScript distribution like a CORBA Naming Service shell and a CORBA CosNaming implementation.


CorbaScript Features

The syntax of this new language looks like the C++ and Java languages but type checking is done at runtime. It reuses some interesting features of the Python and SmallTalk languages: everything is an object, source code is translated into a pseudo code executed by a Virtual Object Oriented Machine that includes a simple garbage collector. Current CorbaScript features are:

Basic Scripting Features

CORBA Scripting Features

Advanced Scripting Features


CorbaScript Demontrations

This distribution provides the following CorbaScript demonstrations:


CorbaScript Modules

In CorbaScript, any script files is potentially a module, i.e. a script which can be imported by other scripts. This distribution offers the following main useful modules: This distribution contains various other modules not presented here.


CorbaWeb Environment

What is CorbaWeb?

CorbaWeb is a powerful environment providing a generic gateway to integrate the CORBA and World Wide Web worlds. More precisily, CorbaWeb allows Web users to browse and invoke CORBA objects via their Web browsers. Then Web users interact with their CORBA objects via Web documents (MIME, HTML, forms, etc) dynamically generated on the fly. Then CorbaWeb can be seen as a generic and dynamic CORBA objects browser.

Technically, CorbaWeb is composed of two parts:

Browsing CORBA objects via CorbaWeb just needs to load OMG IDL specifications into the Interface Repository and start the HTTP server of the CorbaWeb environment.

Then users access via their browsers to the CorbaWeb servlet running into the HttpServer. Automatically, CorbaWeb generates HTML forms representing OMG IDL operations and attributes of CORBA objects accessed by users. These forms allow users to invoke operations, get and set attributes.

Moreover, the CorbaWeb administrator can provide scripts to specialize the Web representation for each CORBA object type. Some specialization scripts are already provided for the CorbaScript demonstrations. Interesting and reusable scripts allow one to browse:

Current tested configurations

As the CorbaWeb environment is fully written in CorbaScript, it could potentially work with any ORB products supported by CorbaScript.

Currently, we have only tested CorbaWeb on the following configurations:

Future releases will be tested on other configurations!


Statement Of Compliance for Year 2000

As the C++ code implementing CorbaScript never manipulates times and dates then CorbaScript is fully Year 2000 compliant.

But as CorbaScript uses an ORB product which uses an operating system then CorbaScript will perfectly work after Year 2000 as long as the used ORB and OS is compliant with the Year 2000 :-)

As CorbaWeb is fully written in CorbaScript then it is also Year 2000 compliant.


Users' Contributions

Here are listed some CorbaScript users' contributions:

Contact us at goode-support@lifl.fr if you have some CorbaScript contributions which can be added into this list.

We would also like to thank all the following people who have also contributed to CorbaScript over the years:

  1. Serge Du <du@lal.in2p3.fr>
  2. Raphael Marvie <Raphael.Marvie@lifl.fr>
  3. Jean-Michel Paris <Jean-Michel.Paris@pt.nce.sita.int>
  4. Michael Rumpf <michael.rumpf@aabcse.lu>
  5. Olivier Causse <Olivier.Causse@sxb.bsf.alcatel.fr>
  6. Eric Viara <viara@infobiogen.fr>
  7. Laurent Gaillard <laurent.gaillard@lemel.fr>
  8. Dr. Volker Zell <Dr.Volker.Zell@oracle.com>
  9. Oleg Lodygens <lodygens@lal.in2p3.fr>
  10. Robert Stephens <Robert.Stephens@magnetbanking.com>
  11. Bertrand Godet <Bertrand.Godet@alcatel.fr>
  12. Bob Gustafson <bobgus@mcs.com>
  13. Brian Bray <brianbr@ibm.net>
  14. Herve Le Pierres <Herve.Le-Pierres@alcatel.fr>
  15. Alexander Taranov <tay@jet.msk.su>
  16. Albert Zhou <zhou@qtera.com>
  17. Rich Edwards <edwardr@codonics.com>
  18. Suresh Kannan <kannan@uav.ae.gatech.edu>
  19. Christer Olsson <christer.e.olsson@era.ericsson.se>
  20. Martin Skold <Martin.Skold@uab.ericsson.se>
  21. Hampel Markus <Markus.Hampel@erl9.siemens.de>
  22. Pierrick Louapre <Pierrick.Louapre@nmu.alcatel.fr>
  23. Armin Stranjak <armin.stranjak@fer.hr>
  24. Thomas Graefenhain <tgraefenhain@wosys.de>
  25. Michael Eisele <Michael.Eisele@orthogon.de>
  26. Estelle Cappelle <estelle.cappelle@vx.cit.alcatel.fr>
  27. Rudolf Weber <rfweber@tesionmail.de>
  28. Jean-Francois Roos <Jean-Francois.Roos@lifl.fr>
  29. Lubomír Markovič <markovic@informatics.muni.cz>
  30. Sergio Novelli <s.novelli@sol-tec.it>
  31. Rodolphe Reau <Rodolphe.Reau@alcatel.fr>
  32. Aubert Guillaume <AUBERTG@thmulti.com>
  33. Stephane Haulbert <Stephane.Haulbert@alcatel.fr>
  34. Thierry Beigbeder <thierry.beigbeder@alcatel.fr>
  35. Bert Thomas <bert@brothom.nl>
  36. Sachin Mudholkar <sachinm@lucent.com>
  37. Erik Johannes <ejohannes@oresis.com>
  38. Johnson Chan <Johnson.Chan@savillemail.com>
  39. Mike Zurer <mike@coactive.com>
  40. David Roche <david@watchmark.com>
  41. Hesse Helge <HHesse@PSI.de>
  42. Phil May <PM@datcon.co.uk>
  43. Damien Toledo <dtoledo@jetstream.com>
  44. Sachidanand Singh <ssingh@jetstream.com>
  45. Leonid Kuzmin <leonid.kuzmin@ausys.se>
  46. David Lancaster <djl@ecs.soton.ac.uk>
  47. Bruno Robin <Bruno.Robin@alcatel.fr>
  48. Davide Mora <d_mora@yahoo.com>
  49. Gaetan Scotto di Apollonia <Gaetan.Scotto-Di-Apollonia@lifl.fr>
  50. Christopher Oliver <coliver@mminternet.com>
  51. Staffan Falk <Staffan.Falk@emw.ericsson.se>
  52. Marvin Allen Wolfthal <maw@ziplink.net>
  53. Eric Oursel <eric.oursel@serfrance.fr>
  54. Winnie Lam <wlam@netpcs.com>
  55. Christopher Yuen <christopher.yuen@alcatel.com>
  56. Roger Barnett <roger.barnett@globalgraphics.com>
  57. Andreadis Dimitris <Dimitris_Andreadis-dandre01@email.mot.com>
  58. Eckehard Schaefer <eckehard.schaefer@alcatel.de>
  59. Paul Labrogere <Paul.Labrogere@alcatel.fr>
  60. Franck Lantres <franck.lantres@isr.thomson-csf.com>
  61. Peter Wahl <Peter.Wahl@alcatel.de>
  62. Kevin McNamee <qkename@era.ericsson.se>
  63. Sebastien Brugalieres <sebastien.brugalieres@nmu.alcatel.fr>
  64. Janusz Szpilewski <janusz.szpilewski@vz.cit.alcatel.fr>
  65. Simon Kennedy <skennedy@authentic8.com>
  66. Krishnamoorthy Shanmugam <Krishnamoorthy_s@inf.com>
  67. Thierry Bezecourt <Thierry.Bezecourt@globeid.com>
  68. Ingomar Otter <Ingomar.Otter@PASSO.DE>
  69. Frederik Hansen <fhansen@bellesystems.com>
  70. Serge Shumilov <shumilov@cs.uni-bonn.de>
  71. Mike Zurer <mike@coactive.com>
  72. Sebastien Blanc <Sebastien.Blanc@usa.alcatel.com>
  73. Rudolf Koeniger <r.koeniger@alcatel.de>
  74. Scott Davis <scott.davis@dsto.defence.gov.au>
  75. Regis Jarde <regis.jarde@bcv01y01.vz.cit.alcatel.fr>
  76. Emmanuel Leguy <Emmanuel.Leguy@lifl.fr>
  77. Jeff Parsons <parsons@cs.wustl.edu>
  78. Maxim Voronoy <M.Voronoy@telesenskscl.com.ua>
  79. Patrick Decat <pdecat@lfvie.generali.fr>
  80. Jerome Berclaz <Jerome.Berclaz@ascom.ch>
  81. Wang Junxing <junxing.wang@sbamc.alcatel.com.cn>
  82. Ferris McCormick <fmccor@inforead.com>
  83. Roland Ziegler <zi@ave-web.de>


Getting Help

You should not have any problems compiling the source, but do not hesitate to send requests for assistance.

Just send an e-mail to goode-support@lifl.fr.

There is also a CorbaScript mailing list. To subscribe, just send an e-mail to listserv@univ-lille1.fr with the command:

    SUB goode Your_Real_Name
in the body of your e-mail message.

To unsubscribe, just send an e-mail to listserv@univ-lille1.fr with the command:

    SIG goode Your_Email_Address
in the body of your e-mail message. You could also go to http://wwsympa.univ-lille1.fr/wws/signoff/goode to unsubscribe yourself.

To post a message to the mailing list, send your message as an e-mail to goode@univ-lille1.fr.

This public mailing list is also accessible at: http://wwsympa.univ-lille1.fr/wws/info/goode

And public list archives are accessible at: http://wwsympa.univ-lille1.fr/wws/arc/goode

You can find the latest information on CorbaScript on our Web-Site http://corbaweb.lifl.fr.

Some scientific information can be found in papers.


Comments at corbaweb-admin@lifl.fr