[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)