[HN Gopher] Fortran adds conditional expressions
       ___________________________________________________________________
        
       Fortran adds conditional expressions
        
       Author : Bostonian
       Score  : 95 points
       Date   : 2021-07-01 17:55 UTC (5 hours ago)
        
 (HTM) web link (j3-fortran.org)
 (TXT) w3m dump (j3-fortran.org)
        
       | mmastrac wrote:
       | I thought modern Fortran had C like operators?
        
       | floxy wrote:
       | "I don't know what the programming language of the year 2000 will
       | look like, but I know it will be called FORTRAN." -- C.A.R. Hoare
        
         | gnufx wrote:
         | The better one of his, which I've probably posted before, is
         | "ALGOL 60 is alive and well and living in FORTRAN [sic] 90."
        
       | Russelfuture wrote:
       | This is cool. Good to see. Thanx for posting this. If someone is
       | coding some serious math hackery, drill down into the app and
       | you'll often find someone's variant/version of the old IMSL
       | library routines, written - in Fortran - back in the 1960's. Why?
       | Because that code was extensively tested and was deemed
       | trustworthy. And even better - just went to my bookshelves and
       | found it: "Optimization Techniques With Fortran" - James L.
       | Kuester, Joe H. Mize, McGraw-Hill, 1973, ISBN 0-07-035606-8. It's
       | just an awesome book - it's 9inches by 11 inches, 500 pages chock
       | full of detailed explanations of many of the state-of-the-art
       | circa 1973 optimization techniques for search methods, linear and
       | quadratic programming tricks, least-squares (linear and non-
       | linear methods), dynamic programming (a math technique for making
       | a series of interrelated decisions), and so on. The book has
       | code, examples and detailed explanations - with numerical
       | examples - and _flowcharts_ even, to explain exactly how the code
       | works, and what the program is actually doing. And its all
       | Fortran - some of it IBM /360 Fortran - all in Courier font
       | that's easy to read and use. I had a client that just typed in
       | all the code for a Simplex LP program, and used it to construct a
       | big optimization solution for how to structure the re-investment
       | actions of a large bond portfolio in a treasury department of a
       | big organization.
       | 
       | Before there were neural networks and image-hacking, there was
       | the gritty math-hacking to optimize big gobs of interrelated
       | stuff that had to happen in the right order. It was almost always
       | done in Fortran, and I suspect a lot of it still is. (And if it
       | was not done in Fortran, it was done in APL. Ask an Actuarial
       | scientist, if you doubt this..) Please don't laugh at Fortran. It
       | can not only help you fly your spaceship to another planet (and
       | get you home again!), it can also make you (and your client)
       | rich, since you can build solid, bulletproof code from those old
       | libraries that just works, and hence create flaw-free solutions
       | to really critically important applications. This proposed
       | extension looks useful.
        
       | AlexAndScripts wrote:
       | Some things just need to die. Fortran is one of them.
        
         | jacobwilliamroy wrote:
         | How am I supposed to aim my guns without fortan?
        
         | [deleted]
        
         | dang wrote:
         | Ok, but please don't post unsubstantive comments to HN.
        
         | Bostonian wrote:
         | Often such blanket statements are made by people who know
         | little about the current state of the language they are
         | denouncing. I am happy to use modern Fortran.
        
           | tored wrote:
           | Honest question, why should you use FORTRAN?
           | 
           | Does FORTRAN have any traction outside of scientific
           | computation?
        
             | leephillips wrote:
             | I see this type of comment often when Fortran is mentioned,
             | and it puzzles me. What are computers for? Mainly for games
             | and websites, with scientific computation an obscure niche?
             | I don't think so. Computers are for modeling the climate,
             | predicting the weather, simulating the economy, calculating
             | the merger of galaxies, and designing airplanes. For any of
             | these, the high-performing languages are Fortran, Julia, C,
             | and C++. That's it. Lisp, Erlang, and Smalltalk are
             | wonderful languages, but not for this.
        
             | Jtsummers wrote:
             | Not really. But if you're doing scientific computation it's
             | still a really good language.
        
             | gnufx wrote:
             | You shouldn't -- it's decades old. Use Fortran, which is
             | how it's written now (though your conforming FORTRAN77 will
             | doubtless still compile).
        
               | tored wrote:
               | Yes, it is my phone that autocorrects to capital letters
               | and I can't bother to fix it.
        
         | bigbillheck wrote:
         | Fortran as a general-purpose language has been dead for
         | decades. If you don't do numerics, you can freely ignore it.
        
           | rendall wrote:
           | What do you mean by numerics?
        
             | bigbillheck wrote:
             | https://en.wikipedia.org/wiki/Numerical_analysis
        
             | jon_adler wrote:
             | Fortean is still very popular in the scientific community
             | for numeric processing. For example, many nuclear
             | simulations run on fortran.
        
         | neatze wrote:
         | What makes you say this ?
        
       | zh3 wrote:
       | Well, if Fortran is going to borrow from C, to repay the favour I
       | trust we'll get computed GOTOs in C31.
        
         | gnufx wrote:
         | I remember the comp.compilers moderator calling C a Fortran-
         | like language.
        
           | wumpus wrote:
           | Well, that's a joke referring to the typical Computer Science
           | jargon of calling them both Algol-like languages.
           | 
           | I don't recall him saying that while I used to read that
           | group, but I would have chuckled.
        
         | pontifk8r wrote:
         | Computed GOTOs in C are just pointer arithmetic and casts.
        
           | whatshisface wrote:
           | Can you jump to a computed GOTO in C? I guess you can if you
           | cast to a function pointer...
        
             | floxy wrote:
             | https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
        
             | wk_end wrote:
             | I'm no C language lawyer, but it's hard to imagine that
             | sort of voodoo won't trigger some kind of undefined
             | behaviour that'll cause the optimizer to erase your program
             | at best and summon nasal demons at worst.
        
               | [deleted]
        
       | bee_rider wrote:
       | I've always thought the conditional ternary operator would map
       | really well to masked vector operations. Since those were around
       | in the old Cray machines, I was always confused as about the
       | absence of ternary op in Fortran. It is a pretty well designed
       | language, so I'm sure I'm missing something, but it seemed odd.
       | Happy to see it show up now!
        
       | Bostonian wrote:
       | Sample syntax:                   y = ( i>=1 .And. i<=Size(a) ?
       | a(i) : -Huge(y) )
       | 
       | The proposal has been approved, but the final standard will be
       | voted on, and it will take time for it to appear in compilers.
        
         | xxpor wrote:
         | Sorry, not familiar with Fortran at all. Did ternaries already
         | exist, and this just adds assignment or is the ternary new too?
        
           | [deleted]
        
           | Bostonian wrote:
           | The ternary is new. Before, one could use the merge intrinsic
           | function to write                   y = merge(a(i), -Huge(y),
           | i>=1 .And. i<=Size(a))
           | 
           | but this is risky, because merge does not short-circuit, and
           | the program could crash if i < 1. The ternary syntax
           | y = (boolean ? expression_1 : expression_2)
           | 
           | only evaluates one of the expressions.
        
       | zoomablemind wrote:
       | Is the ternary conditional just for the syntactic ease or there
       | are some performance reasons for this?
       | 
       | I understand there are conditional assignment instructions,
       | though optimizer could likely choose these already. Also
       | branching prediction may take care of such assignments as well.
        
         | pklausler wrote:
         | Fortran has no means for preventing execution of subexpressions
         | in a portable way. The standard allows a compiler to short-
         | circuit .AND./.OR. and to evaluate only one of the first two
         | arguments to a MERGE with a scalar condition, but it is not
         | required and a programmer can't depend on it. Rather than
         | strengthen the guarantees of short-circuiting and non-
         | evaluation of existing constructs (neither of which would have
         | invalidated any portable code), the geniuses of J3 decided to
         | add more syntax.
        
       | FabianCarbonara wrote:
       | too little, too late! I am super happy with React+Js nowadays..
        
         | erhk wrote:
         | Im quite happy with my new apartment and also will not be
         | needing fortran
        
           | wumpus wrote:
           | I just moved to the apartment upstairs because it has a
           | familiar floor-plan, is renovated, and has a slightly better
           | view.
        
         | neatze wrote:
         | Interesting to see how much slower is JS when compared to
         | Fortran for matrix operations, no idea how to compare React to
         | Fortran.
        
           | SavantIdiot wrote:
           | React is a responsive framework, not a compute lib. It's a
           | joke.
           | 
           | Getting offtopic here from FORTRAN, but there have been
           | several attempts at numeric libraries in javascript (math.js,
           | numjs), they are either lightweight, or unmaintained and in a
           | sorry state, or require async execution that expect remote
           | hardware (Googles tensor libs) which makes them a bit
           | difficult to use in a general setting.
           | 
           | Hopefully WebASM will result in a native numpy-like library
           | for JS because numpy is a very well-thought-out library and
           | interface, it's really addictive.
        
             | walshemj wrote:
             | I have written interfaces in Fortran 77 back in the 80's
        
             | jazzyjackson wrote:
             | It's not fast but I've found "algebrite" to be a good CAS
             | for JavaScript that I can break out anytime I need dot
             | products.
        
           | FabianCarbonara wrote:
           | to be honest, this was just a very stupid joke. i guess there
           | is no good reason to compare the two.
        
             | rendall wrote:
             | Jokes are difficult to pull off well on HN. Worst downvotes
             | I ever get are when I'm joking.
        
               | gpvos wrote:
               | The trick is to lay it on so heavily that there is no
               | joke anymore.
        
               | rendall wrote:
               | Sadly, yes.
        
             | cpach wrote:
             | (^_^)
        
         | cpach wrote:
         | Ok cool but is React+Js really a competitor to Fortran...?
        
           | lkuty wrote:
           | Both are Turing complete, so it is the case
        
             | cheeze wrote:
             | I prefer Excel to both, which is also Turing complete.
        
               | henvic wrote:
               | What about CSS?
        
               | SiempreViernes wrote:
               | Better go with TeX if you're going into the Turing
               | complete typesetting language niche, a Knuth product has
               | more street cred.
        
         | [deleted]
        
       | DonaldFisk wrote:
       | Although they weren't built into the language, conditional
       | expressions were first used in Fortran in 1957 by John McCarthy:
       | "I invented conditional expressions in connection with a set of
       | chess legal move routines I wrote in FORTRAN for the IBM 704 at
       | M.I.T. during 1957-58. This program did not use list processing.
       | The IF statement provided in FORTRAN 1 and FORTRAN 2 was very
       | awkward to use, and it was natural to invent a function
       | XIF(M,N1,N2) whose value was N1 or N2 according to whether the
       | expression M was zero or not. The function shortened many
       | programs and made them easier to understand, but it had to be
       | used sparingly, because all three arguments had to be evaluated
       | before XIF was entered, since XIF was called as an ordinary
       | FORTRAN function though written in machine language. This led to
       | the invention of the true conditional expression which evaluates
       | only one of N1 and N2 according to whether M is true or false and
       | to a desire for a programming language that would allow its use."
       | From http://jmc.stanford.edu/articles/lisp/lisp.pdf
        
         | wyager wrote:
         | One nice thing about lazy languages is you get the desired
         | operator behavior for conditional operators, short-circuiting
         | logical operators, etc "for free" without having to build it
         | into the language.
        
           | sfblah wrote:
           | I'm too lazy even to click and read it, but you mean stuff
           | like:
           | 
           | const x = y || 3;
           | 
           | ?
        
             | [deleted]
        
             | jstanley wrote:
             | Probably more like:                 $y>5 || die "y should
             | be greater than 5";
        
             | thaumasiotes wrote:
             | That would be a short-circuiting logical operator.
        
           | gnufx wrote:
           | Well-disposed as I am towards laziness, you may well not want
           | short-circuiting, depending on the application. I just re-
           | wrote the C implementations of logical reductions using
           | bitwise operators instead to && and || to get them vectorized
           | -- avoiding "conditional in loop". (They're Fortran-
           | callable.)
           | 
           | Incidentally, gfortran treats the reduction like C, which
           | seems a deficiency as the standard allows it not to.
        
         | wumpus wrote:
         | And for those wondering why IF was awkward, there was no ELSE
         | until Fortran 77, and doing that with GOTOs was a little ugly.
        
           | ggm wrote:
           | Thanks. you helped confirm I must have learned some early
           | state of F77 in 76/7. Since F77 was 1978 and I left school in
           | 78, it can't have been full standard. I was sure I remembered
           | an ELSE so now I wonder if this is a mis-memory, or languages
           | intercepted this somehow. (cards on an ICL 1900 system)
        
       | 37ef_ced3 wrote:
       | The ternary operator is something I miss when using Go
        
         | bjoli wrote:
         | If as an expression is something I miss almost everywhere.
         | Trenary has always seemed like an afterthought.
        
       | steviedotboston wrote:
       | how do people currently write conditional statements?
        
         | Bostonian wrote:
         | The current equivalent to the one-liner I presented is
         | if (i>=1 .And. i<=Size(a)) then           y = a(i)         else
         | y = -Huge(y)        end if
        
           | walshemj wrote:
           | This to me looks more readable than a one liner
        
             | skywal_l wrote:
             | Depends on the language I guess. For me this is easier to
             | read (and reason with) in JS:                   const y =
             | (i <== 1 && i < a.length()) ? a[i] : -Huge(i);
             | 
             | than:                   let y; // What do I initialize this
             | too.         if (i <== 1 && i < a.length()) {           y =
             | a[i]; // a side effect         } else {           y =
             | -Huge(i); // another side effect         }
             | 
             | And you end up with a mutable variable that might change
             | later on (true only for language with mutable/non mutable
             | variable of course).
             | 
             | Besides, it blends well with functional programming where
             | side effect are better avoided.
        
               | Someone wrote:
               | Also depends on what you assign to. If you read an
               | if/else statement, you have to check whether both
               | branches assign to the same value. If that's a complex
               | expression, that isn't trivial.
        
         | renewiltord wrote:
         | The word of greatest value in the headline is "expressions".
         | There are conditionals in FORTRAN but now you can have a
         | conditional that evaluates to something.
        
       | rendall wrote:
       | This is a big step for Fortran!
        
       ___________________________________________________________________
       (page generated 2021-07-01 23:00 UTC)