To Frank H. and all Pascal re-writers:
One of the main, if not the main, point of keeping Pascal
updated is to extend its usefulness.
I want to address one area: scientific programming.
It is what I do; I have done it in Pascal for vary many
years, and continue doing so in Delphi. I even wrote a book,
"Scientific Pascal", in 2 editions.
So here is my wish list:
Add types
Complex Rational
coded in assembler.
All the standard operations and functions should apply to these types:
Complex: +, -, *, /, ^ or ** Sqr, Sqrt, Sin, Cos, ..., Exp Ln
Rational: +, -, *, /, Sqr, LowestTerms,...
Even 40-year old FORTRAN has complex types. Obviously
Complex is needed for numerical analysis, differential
equations, electrical engineering, etc.
A rational type would be very useful for number theory.
Add higher precision floats (20 bytes, 24 bytes, user-chosen
precision) again with all the standard operations and functions
implemented in assembler.
Borland introduced type Extended (10 byte floats), possibly in Turbo
Pascal 4 or 5. This was an enormous improvement over the Real type,
(4 byte), and made full use of the 80x87 mathematical coprocessor.
Extended has remained the highest precision f.p. type in Borland
Pascal and probably all other Pascals for 15-20 years, while computer
speed and memory have improved by orders of magnitude. It is surely
time for more accurate real types, coded in assembler.
The current real types (in Delphi) are
Single (4 bytes), Real48 (6 bytes), Double (8 bytes), Extended (10 bytes),
[and Comp and Currency].
Synonyms are in order,skipping the factor of 8:
Real4, Real6, Real8, Real10, etc. for the hopefully new ones.
It is also time for more accurate integers. Borland introduced Int64
10-20 years ago, and it has remained the standard highest accuracy
integer type.
Delphi wisely added the names (and unsigned types)
Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64.
(My preference again would be to drop the factor 8:
Int1, Int2, Int4, Int8, UInt1, UInt2, UInt4, UInt8.)
I would love to see Int16, Int32, Int64 and Int128, and their
unsigned counterparts.
Add exponentiation, with the symbol ^ or ** overloaded for the special
cases of the exponent: positive or negative integer [ (-0.02)^(-3) =
-1.25E5 ],
rational with odd denominator [ (-8)^(5/3) = -32 ]. FORTRAN
and even BASIC have had exponentiation forever.
Allow genuine operator overloading, such as
operator "+" (const X, Y: MyType): MyType;
operator "*" (const X: Integer; const Y: IntegerVector): IntegerVector;
Delphi has made a mess of this so far, with overloading only possible
with class functions and records. GNU Pascal and Free Pascal
do much better.
It should be possible to overload all the standard operators:
+ - * / ^ = <> <= >= > <
There should be an abstract classes TRing which can be specialized
to TField, etc.
TRing should have a Ring Element that can be specialized.
So one could define TMatrix, with elements in TRing, and define
matrix multiplication A*B and Det (determinant) without
specifying the elements in advance, and specialize them to any ring,
such as the rings of rationals, of polynomials with complex
coefficients, etc.
This is what OOP, polymorphism, abstraction, inheritance should be about.
Add Print Methods for TMemo, TStringGrid, TImage, and
maybe a few other components.
Obviously if I compute data and store it in a table or memo,
or create a graph, I want to print it. Currently this requires
searching the WWW for someone's code. One of the advantages
of unicode (see below): one can mix alphabets in tables.
For instance a table of number theoretic functions will have
Greek headings: Omega, Phi, omega, etc.
Any modern Pascal should use unicode, with all character
and string procedures modified accordingly. This is a big advance
Delphi started a year or so ago
Add some more fonts that include Greek letters and many math symbols, and
which can be easily added to code (which should be WYSIWYG). Fonts for
scientific use should be non-justified, so that "9", "1" and "." are
the same width in displays of numbers. As far as I can tell, Courier New
(OEM CharSet) is the only satisfactory font at present.
Harley Flanders
--
=============================
Prof. Harley Flanders
3533 Windemere Court
Ann Arbor, MI 48105-2867
Home: 734 668 1546
harley(a)umich.edu
=============================