| .NET WhitepaperContentsIntroduction.NET is a Microsoft initiative that focuses on distributed computing and
software development productivity. The infrastructure technology supporting that
initiative is the .NET Framework. Within this Framework, an application written
in multiple languages can share data across multiple platforms with other
applications. Technologies such as .NET Web Services and ASP.NET, and .NET
programming languages, such as Microsoft C#, Visual Basic.NET, and Visual
C++.NET, make all this possible. A vast set of new tools and libraries are
unified to make developers, regardless of programming language, more productive
than ever before. Given the enormous amount of Fortran code that exists today
and customers' increased desire to connect the world, Lahey Computer Systems,
Inc. and Fujitsu Limited have teamed up to integrate Lahey/Fujitsu Fortran with
the Microsoft .NET Framework and the Visual Studio.NET development environment.
This effort has brought to market a new Fortran compiler, Fortran for .NET,
that targets this .NET platform.
 A
New Fortran . . . Not your Father's Fortran.A Fortran application developed for the Microsoft .NET Framework can take
advantage of the many benefits of the .NET infrastructure, including:
 
  Unprecedented interoperability with other .NET languages
  Code reuse by any .NET language
  Easier access to system services
  Built-in error handling
  Automatic memory management (garbage collection)
  Multiple side-by-side application versions
  Easier application deployment
  Interoperability with COM
  Fortran source embedded in ASP.NET pages for server-side compilation and
    execution
  Exposing procedures as XML Web Services
  Use of the enormous .NET Framework class library
  Use of many tools developed for the Common Language Runtime (CLR)
  Easier Internet and database access
  Ability to run on non-Windows platforms that support the CLR The key to Fortran users getting access to these benefits is to use a
compiler that generates Microsoft Intermediate Language (MSIL), rather than
native machine code. A just-in-time (JIT) compiler provided by the .NET
Framework compiles and links the MSIL for execution at the moment an object is
needed. The Fortran for .NET compiler generates MSIL and has language
extensions for object-oriented features and for interoperability with other .NET
languages. The specifications of the compiler adhere to the Fortran 2003 Draft
Standard whenever possible. Fortran for .NET supports object-oriented programming features that
were not present in Fortran 95. The Fortran 2003 Draft Standard specifies the
implementation of many of these features, including:
 
  Class definition
  Method declaration
  Overloaded method declaration
  Class extensibility
  Inheritance
  Polymorphism
  Enumerator definition and operations
  Procedure pointers
  Type aliasing
  Dynamic type allocation For full interoperability with other .NET languages, and to be compliant with
the Common Language Specification (CLS), Fortran for .NET contains new
language extensions including support for the following features:
 
  Static/instance/overloaded/override methods
  Static/instance fields
  Static/instance/override properties
  Static/instance constructors
  Interface use
  Base class access
  'This' object access
  Public/private/protected/internal accessibility
  Delegate definition and instantiation
  Namespace definition and use
  Throw/try/catch exception handling
  Custom attributes
  Invoke unmanaged code (native DLL)
  Common Type Specification (CTS) string and unsigned integer data types
  Unicode characters Fortran
for Visual Studio .NET.Lahey/Fujitsu Fortran integrates with Microsoft Visual Studio .NET, a
world-class integrated development environment (IDE). This gives Lahey Fortran
programmers easy access to .NET Framework development tools, massive online help
content, and allows seamless debugging of multi-language programs. Developers
can have everything they might expect for making the development task easier,
such as:
 
  Windows Forms Designer
  Web Forms Designer
  Solution management (groups of projects)
  Project management
  Project/Code templates
  Syntax recognition
  Debugging
  Integrated help
  Deployment Tools Of special significance is the Lahey/Fujitsu Fortran for .NET
integration with Visual Studio.NET Windows Forms and Web Forms. The Windows
Forms Designer makes it easy to develop drag-and-drop Win32 GUI applications
with event-driven Fortran code behind the controls; Web Forms is a similar
designer for developing web pages. Fortran
for ASP.NET.Microsoft's ASP.NET is the next generation of ASP (Active Server Pages). It
supports an infrastructure to resolve many of the difficulties and deficiencies
of earlier web programming methods. This includes making it easier to design and
program web pages with the Web Forms designer (available in Visual Studio.NET).
It also includes built-in mechanisms for security, user authentication, and
state management. ASP.NET improves performance by server-side compilation of the
executable content of the page to native code when the page is first deployed.
 Fortran for .NET allows Fortran users the ability to embed Fortran
code within ASP.NET pages, interleaved with HTML and ASP content. Fortran code
can also be external to the page (known as code-behind) which results in better
source code reuse and readability. When instructed to use Fortran, ASP.NET
utilizes the Fortran for .NET compiler to execute the logic and generate
dynamic content output, and posts the HTML back to the browser. When developing
with the Web Forms designer in Visual Studio .NET, creating controls on the page
is drag-and-drop, with easily modifiable properties and quick access to the
Fortran code template for programming the event-driven procedures. Fortran
for .NET Web Services.Today, the Internet and browsers mostly provide a glorified display function,
but fall short on programmability. .NET Web services allow applications and web
pages to easily call class methods of .NET objects that reside on a web server.
The communication can take place via the standard HTTP POST/GET or the more
richly featured Simple Object Access Protocol (SOAP), a hybrid of HTTP and XML.
XML-based standards, defined by the World Wide Web Consortium, provide a
universal data format readily adaptable to network communications, regardless of
the operating system or programming language.
 Fortran for .NET delivers the tools you need to expose your Fortran
methods (procedures) to the Internet. One directive in the source code is all
you need to make your .NET object's method web-service-enabled. ASP.NET handles
most of the Internet functionality automatically:
 
  The server receives an HTTP request with your method name and optional
    parameters encoded in the URL or XML;
  ASP.NET instantiates your .NET object and calls the specified method;
  the method's results are returned to ASP.NET;
  ASP.NET returns the results, converted to XML, back to the client. ASP.NET also provides a browser-based client for testing your web service. A key part of Web Services usability is the Web Services Description Language
(WSDL). From anywhere on the Internet, the ASP.NET server can be polled for the
names of the available web service procedures, the parameters required, and the
protocols they support. This information is returned by ASP.NET in a WSDL format
file. The .NET SDK provides tools to analyze the WSDL, and Fortran for .NET
provides a code generator to automatically create code (a proxy class) for
calling the web service. This gives your application access to web services that
may have been written in any .NET language, on a server anywhere on the web.
Furthermore, the .NET SOAP class library has functions available to call the web
service asynchronously so your application does not have to wait for the web
server to respond. Will my
older source compile without changes?Our goal is to provide a compiler that will compile most customers' source
without changes. However, Fortran for .NET has some language restrictions
at this time. Code that cannot be compiled by the Fortran for .NET
compiler and that does not require .NET interoperability can be accessed as an
unmanaged (native Win32) DLL. These unmanaged DLLs can be developed and built
with the traditional Lahey/Fujitsu Fortran 95 compiler that is also integrated
into Visual Studio .NET.
 Legacy Fortran programs are automatically and transparently converted to
classes by the Fortran for .NET compiler without any need for source
changes: main programs and external procedures are automatically implemented as
a class definition; internal procedures are made static private methods; module
names will be treated as a namespace name; derived types and their components
become classes and class fields (referenced by the exact same syntax as in
Fortran 95), or structures if the sequence statement is present. To take advantage of creating public classes with methods that can be called
from other .NET programs, source code changes will be necessary. What
about execution speed?The advantages of JIT compilation, and the security, garbage collection, type
safety, and other features of .NET, cannot all be gained without some costs in
overhead. If execution speed performance becomes an issue with a .NET
application, there are some ways to increase performance. One way is to pre-JIT
the .NET assembly (the self-describing collection of IL, metadata, and
resources), so that it is already compiled into native code (restrictions
apply). Another way is use the Lahey/Fujitsu Fortran 95 compiler to create a
native DLL, and call it from the Fortran for .NET application.
 The early releases of Fortran for .NET have limited optimizations for
the MSIL code generation. Future improvements in this area, coupled with
Microsoft's improvements to future releases of the CLR, will result in closing
the gap between the execution speed of managed and unmanaged code. Why
Fortran?You might remember the meaning of FORTRAN: FORmula TRANslator. Fortran enables a
programmer to put a mathematical or scientific formula expression directly into
the source code and be confident that it will calculate that expression
accurately. Fortran has semantics that facilitate array operations and
computations. Fortran has all of the intrinsic routines to make these math and
science problems and simulations easier to program. Lahey and Fujitsu will
always be focused on developing better compiler optimizations to make your code
run faster, and on having the best compile and runtime diagnostics to help you
have confidence in your application. And now, Lahey/Fujitsu Fortran will offer
the many advantages of a true object-oriented language.
 Source
Code ExampleFortran for .NETThe following is a Fortran for .NET console application that invokes C#,
Fortran, and Visual Basic .NET class methods. The Fortran and VB classes inherit
a method from the C# base class and override another method. This can be
interpreted as: the Fortran main is the dog trainer, and the Fortran and VB dogs
inherited the roll-over behavior from the C# dog, but have their own bark
behavior - a canine example of object-oriented programming.
 ! This is the main program
Program MultiDog   
   ! Make the .NET Framework's System namespace and the VirtualDog
   ! namespaces defined below accessible to this program
   use System
   use VirtualDog   
   ! Define variables of the three dog types (classes)
   type (Dog) :: d
   type (Greyhound) :: g
   type (Labrador) :: l   
   ! Call the RollOver methods (procedures) of each class
   call d%RollOver()   ! Call C#
   call g%RollOver()   ! Call Fortran
   call l%RollOver()   ! Call Visual Basic
end program MultiDog
module   
   ! Define a type (class) called Greyhound that extends
   ! the Dog class defined in C# code below, and is part of
   ! the VirtualDog namespace
   type, extends( VirtualDog%Dog ), namespace( VirtualDog ) :: Greyhound
   contains   
      ! Declare a class method (procedure); the 'pass'
      ! attribute makes it an instance (dynamic) procedure
      procedure, public, pass ::  Bark
   end type Greyhound
contains   
   ! Define the Bark method that overrides the inherited
   ! class' method; i.e., give the Greyhound its own bark
   subroutine Bark( this )   
      ! Declare the passed-object (hidden argument in the
      ! call statement) as the same type as the class
      class ( Greyhound ) :: this
      print *, "BOW WOW (Fortran Dog)"
   end subroutine Bark
end module
C#
 // Make the .NET Framework's System
// namespace accessible to this program
using System;   
// Be a part of the VirtualDog namespace
namespace VirtualDog {   
   // Define an overridable class called Dog
   public class Dog {   
      // Define overridable methods of the class
      public virtual void RollOver () {
         Console.WriteLine(" Scratch my tummy.");   
         // The Bark method is called here. It is overridden
         // sometimes in the Fortran and VB classes
         Bark();
      }
      public virtual void Bark () {
         Console.WriteLine(" WOOF WOOF (C# Dog)");
      }
   }
}
Visual Basic .NET
 ' Make the .NET Framework's System
' namespace accessible to this program
Imports System   
' Be a part of the VirtualDog namespace
Namespace VirtualDog   
   ' Define a type (class) called Labrador that extends
   ' the Dog class defined in C# code above
   Public Class Labrador : Inherits Dog   
      ' Define the Bark method that overrides the inherited
      ' class' method; i.e., give the Labrador its own bark
      Public overrides Sub Bark ()
         Console.WriteLine(" WAF WAF (VB Dog)")
      End Sub
   End Class
End Namespace
 |