From: "Nasser M. Abbasi" <nma@12000.org>
Subject: Does Ada need elemental functions to make it suitable for scientific work?
Date: Mon, 09 Jul 2012 18:27:54 -0500
Date: 2012-07-09T18:27:54-05:00 [thread overview]
Message-ID: <jtfpdr$2lt$1@speranza.aioe.org> (raw)
I have been trying Ada to see how suitable it is for computational
work (I am studying finite elements, and wanted to try Ada for
basic programs).
And even though I find its type system a great asset to help
catch many errors, I find it a little awkward for programming on
arrays and matrices which ones does alot in scientific numerical
programming. The most important feature which I found missing is
that Ada functions do not automatically work on arrays and matrices.
In Fortran, we see
http://en.wikipedia.org/wiki/Fortran_95_language_features#Elemental_operations.2C_assignments_and_procedures
"Most intrinsic functions are elemental and Fortran 95
extends this feature to non-intrinsic procedures"
intrinsic functions in Fortran are those build-in (like
sin/cos, etc...)
Lets look at a very simple example to help explain what I mean.
I wanted to raise each entry in a vector to the second power.
In Fortran, I can just write V**2, where V is a vector. In Ada,
I can't do that. Since ** is not defined on this array type
and this number type.
I would have to write a loop to iterate over V and do V(I)**2 on
each element.
This for me, is a step backward. This is how Fortran77 was.
I know I am a newbie in Ada, and I could have overlooked a
simple solution to do this. But I really do not want to
write packages and define operators each time and for each type
I make to have it work as elemental function each time.
This is something that should be build into the language.
Here are two complete trivial examples of what I mean.
I was wondering if there is a chance that something like
this can be added to Ada like what was done for Fortran?
---- fortran -------------------------
!-- showing how to use Fortran for vectored operations
!-- equations work on vectors, no need for loop
program f08
implicit none
integer, parameter :: N = 7
real , parameter :: D(N) = [-0.2,1.0,1.5,3.0,-1.0,4.2,3.1]
real , parameter :: H(N) = [2.1,2.4,1.8,2.6,2.6,2.2,1.8]
real :: V(N)
V = D**2 * H ! all vectored operations
print *, v
end program f08
---------------------------------
>gfortran f08.f90
>./a.out
8.39999989E-02 2.4000001 4.0499997 23.400000 2.5999999 38.807995 17.297998
---------Ada ------------------
procedure foo2 is
N : integer :=7;
type array_t is array(1..N) OF float;
D : constant array_t :=(-0.2,1.0,1.5,3.0,-1.0,4.2,3.1);
H : constant array_t :=(2.1,2.4,1.8,2.6,2.6,2.2,1.8);
V : array_t;
begin
V := D**2 * H;
end foo2;
-------------------
>gnatmake foo2.adb
gcc -c foo2.adb
foo2.adb:11:10: invalid operand types for operator "**"
foo2.adb:11:10: left operand has type "array_t" defined at line 4
foo2.adb:11:10: right operand has type universal integer
gnatmake: "foo2.adb" compilation error
>
--Nasser
next reply other threads:[~2012-07-09 23:27 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-09 23:27 Nasser M. Abbasi [this message]
[not found] ` <d78nv7dhf88bqv7hrd9eft231a4h2scs10@invalid.netcom.com>
2012-07-10 4:22 ` Does Ada need elemental functions to make it suitable for scientific work? Nasser M. Abbasi
2012-07-10 14:26 ` Marco
2012-07-10 4:24 ` gautier_niouzes
2012-07-10 5:22 ` Ada novice
2012-07-10 7:27 ` Dmitry A. Kazakov
2012-07-10 8:06 ` gautier_niouzes
[not found] ` <637de084-0e71-4077-a1c5-fc4200cad3cf@googlegroups.com>
2012-07-10 8:39 ` Nasser M. Abbasi
2012-07-10 8:58 ` Ada novice
2012-07-10 9:07 ` Dmitry A. Kazakov
2012-07-10 9:21 ` Nasser M. Abbasi
2012-07-10 9:26 ` Nasser M. Abbasi
2012-07-10 9:50 ` Dmitry A. Kazakov
2012-07-20 1:56 ` Randy Brukardt
2012-07-20 21:49 ` Adam Beneschan
2012-07-12 0:31 ` robin.vowels
2012-07-12 7:12 ` Dmitry A. Kazakov
2012-07-29 13:39 ` Robin Vowels
2012-07-29 14:22 ` Dmitry A. Kazakov
2012-07-29 20:54 ` glen herrmannsfeldt
[not found] ` <apib1897s56dkultqmfl3emvk1os3tfdak@invalid.netcom.com>
2012-07-30 4:15 ` glen herrmannsfeldt
[not found] ` <nfhd181tv9u87mcqfb7rgd8lm48ihr9f4r@invalid.netcom.com>
2012-07-31 8:53 ` MATRIX MULTIPLICATION Robin Vowels
2012-07-31 9:05 ` Robin Vowels
2012-07-30 0:49 ` Does Ada need elemental functions to make it suitable for scientific work? Robin Vowels
2012-07-12 0:22 ` robin.vowels
2012-07-20 1:51 ` Randy Brukardt
2012-07-29 13:53 ` Robin Vowels
2012-07-29 15:51 ` J-P. Rosen
2012-07-29 16:07 ` Dmitry A. Kazakov
2012-07-29 20:30 ` Simon Wright
2012-07-29 20:59 ` glen herrmannsfeldt
2012-07-29 21:44 ` J-P. Rosen
2012-07-29 22:54 ` Simon Wright
2012-07-30 0:53 ` Robin Vowels
2012-07-30 2:20 ` Shmuel Metz
2012-07-10 12:46 ` Brian Drummond
2012-07-10 11:06 ` Simon Wright
2012-07-10 11:59 ` Georg Bauhaus
2012-07-10 12:20 ` Brian Drummond
2012-07-10 19:52 ` Ada novice
2012-07-11 8:41 ` gautier_niouzes
2012-07-11 9:42 ` Ken Thomas
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox