Deutsch   English   Français   Italiano  
<vba46k$3te58$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Thomas Koenig <tkoenig@netcologne.de>
Newsgroups: comp.arch
Subject: Re: Fortran was NOT higher level than C.  Was: Computer architects
 leaving Intel...
Date: Wed, 4 Sep 2024 17:08:36 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 84
Message-ID: <vba46k$3te58$1@dont-email.me>
References: <2024Aug30.161204@mips.complang.tuwien.ac.at>
 <memo.20240830164247.19028y@jgd.cix.co.uk> <vasruo$id3b$1@dont-email.me>
 <2024Aug30.195831@mips.complang.tuwien.ac.at> <vat5ap$jthk$2@dont-email.me>
 <vaunhb$vckc$1@dont-email.me> <vautmu$vr5r$1@dont-email.me>
 <2024Aug31.170347@mips.complang.tuwien.ac.at>
 <vavpnh$13tj0$2@dont-email.me> <vb00c2$150ia$1@dont-email.me>
 <505954890d8461c1f4082b1beecd453c@www.novabbs.org>
 <vb0kh2$12ukk$1@dont-email.me> <vb3smg$1ta6s$1@dont-email.me>
 <vb4q5o$12ukk$3@dont-email.me> <vb6a16$38aj5$1@dont-email.me>
 <jwv8qw8o7zg.fsf-monnier+comp.arch@gnu.org> <vb7q5q$3f6cg$1@dont-email.me>
 <20240904113123.00002098@yahoo.com>
Injection-Date: Wed, 04 Sep 2024 19:08:36 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="04b9462bf8233c0522365da918e60878";
	logging-data="4110504"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18URjmkDuWCTYjFQMN22zTNxlAW/xFPeLw="
User-Agent: slrn/1.0.3 (Linux)
Cancel-Lock: sha1:KYEbt5xYcJZSGMs48fO76WqNzYg=
Bytes: 4810

Michael S <already5chosen@yahoo.com> schrieb:
> On Tue, 3 Sep 2024 20:05:14 -0000 (UTC)
> Thomas Koenig <tkoenig@netcologne.de> wrote:
>
>> Stefan Monnier <monnier@iro.umontreal.ca> schrieb:
>> >> My impression - based on hearsay for Rust as I have no experience
>> >> - is that the key point of Rust is memory "safety".  I use
>> >> scare-quotes here, since it is simply about correct use of dynamic
>> >> memory and buffers.
>> >>
>> >> It is entirely possible to have correct use of memory in C,  
>> >
>> > If you look at the evolution of programming languages,
>> > "higher-level" doesn't mean "you can do more stuff".  On the
>> > contrary, making a language "higher-level" means deciding what it
>> > is we want to make harder or even impossible.  
>> 
>> Really?
>> 
>> I thought Fortran was higher level than C, and you can do a lot
>> more things in Fortran than in C.
>> 
>> Or rather, Fortran allows you to do things which are possible,
>> but very cumbersome, in C.  Both are Turing complete, after all.
>
> I'd say that C in the form that stabilized around 1975-1976 is
> significantly higher level language than contemporary Fortran dialects
> or even the next Fortran dialect (F77).

I did write Fortran, not FORTRAN :-)

I agree that C had many very useful things that pre-FORTRAN 90
did not have.  This is not surprising, since the authors of
C knew FORTRAN well.

[...]

> Overall, the differences in favor of C looks rather huge. 

You are arguing from the point of view of more than 30 years ago.

> On the other hand, I recollect only two higher level feature present in
> old Fortran that were absent in pre-99 C - VLA and Complex. 

You forget arrays as first-class citizens, and a reasonable way
to pass multi-dimensional arrays.  Sure, you could roll them
on your own with pointer arithmetic, but...

> The first feature can be emulated in almost satisfactory manner by
> dynamic allocation. Also, I am not sure that VLA were already part of
> standard Fortran language in 1976.

It didn't.

> The second feature is very specialized and rather minor.

Let's take a look at Fortran 95 vs. C99 (similar timeframe), and
thrown in the allocatable TR as well, which everybody implemented.

Fortran 95 already had (just going through
https://en.wikipedia.org/wiki/Fortran_95_language_features 
and looking at the features that C does not have)

- A sensible numeric model, where you can ask for a certain
  precision and range
- Usable multi-dimensional arrays
- Modules where you can specify accessibility
- Intent for dummy arguments
- Generics and overloaded operators
- Assumed-shape arrays, where you don't need to pass array
  bounds explicitly
- ALLOCATE and ALLOCATABLE variables, where the compiler
  cleans up after variables go out of scope
- Elemental operations and functions (so you can write
  foo + bar where foo is an array and bar is either an
  array or scalar)
- Array subobjects, you can specify a start, an end and
  a stride in any dimension
- Array intrinsics for shifting, packing, unpacking,
  sum, minmum value, ..., matrix multiplication and
  dot product

The main feature I find lacking is unsigned numbers, but at
least I'm doing something about that, a few decades later :-)