logoalt Hacker News

palisade10/01/20245 repliesview on HN

Note: I'm getting some hate from others who think I would pick or prefer COBOL over a modern language. I wouldn't. I was making an outside-the-box "devil's advocate" objective observation. I just wanted to preface that here. Okay, the rest of my original comment remains below:

The irony is that we already had a memory safe and stable language in Cobol that was easier to read and understand than Rust. But, no one wants to use it so it is "dead" but it runs everything that made the modern age possible.

RUST:

println!("Enter number: ");

let mut input_string = String::new();

io::stdin().read_line(&mut input_string).unwrap();

let number: i32 = input_string.trim().parse().expect("Please enter a valid number.");

let result = if number % 2 == 0 {

    "EVEN"
} else {

    "ODD"
};

println!("The number: {}", result);

COBOL:

display 'Enter number: '

accept number

if function mod(number,2) = 0

    move 'even' to result
else

    move 'odd' to result
end-if

display 'The number: ',result


Replies

sestep10/01/2024

This is a weird take. Sure, plenty of cool/nice things from old languages (e.g. variable-sized stack frames in Ada) get lost, and some then get rediscovered by future languages, potentially wasting effort. And I don't know COBOL, so maybe you're actually making a good point.

But I find that hard to believe. Does COBOL really solve all the same problems Rust is intended to solve? Is it as performant? Can it interface with native code from other languages in the same way? Does it have a usable and sane package manager built on top of a module system that facilitates composability and backward compatibility? Does it have a way to describe the shape of data and errors as ergonomically as Rust's algebraic data types?

Genuinely curious: as I said, I don't know COBOL. I'd find it extremely surprising if the answers to all these questions are "yes," though. Just as there are reasons COBOL is still used, there are also (good) reasons new languages have been created.

show 2 replies
kibwen10/01/2024

It's a bit odd to say these programs are comparable when the Cobol version isn't handling errors whereas the Rust program is (by panicking, but that's better than the silently wrong behavior of the Cobol one). Here's a runnable version of the above Cobol program (adding the necessary boilerplate); note that it prints "even" for an input of `abc` and "odd" for an input of `12`:

    identification division.
        program-id.
            even-or-odd.
    data division.
        working-storage section.
            01 num pic 9.
            01 result pic x(4).
    procedure division.
        display 'Enter number: '
    
        accept num
    
        if function mod(num, 2) = 0
            move 'even' to result
        else
            move 'odd' to result
        end-if
    
        display 'The number: ', result
    stop run.
It's peculiar to call out Rust's syntax specifically when, like most other languages these days, is mostly C-like (though with a sprinkling of OCaml). And syntax aside, Rust and Cobol have wildly different goals, so "just use Cobol" doesn't suffice to obviate Rust's purpose for existing.
show 1 reply
erik_seaberg10/01/2024

Sorry, https://www.ibm.com/docs/en/cobol-zos/6.2?topic=statement-ex... seems to be demonstrating a language that is not memory-safe (maybe it used to be, but how?)

  COMPUTE SIZE-NEEDED = LENGTH OF OBJ + LENGTH OF VARTAB * NUM-ELEMENTS
  ALLOCATE SIZE-NEEDED CHARACTERS INITIALIZED RETURNING VPTR
  SET ADDRESS OF VARGRP TO VPTR
  MOVE NUM-ELEMENTS TO OBJ
  MOVE BUFFER(1:SIZE-NEEDED) TO VARGRP
  SET VPTR TO ADDRESS OF BUFFER
  FREE VPTR
show 1 reply
Muromec10/01/2024

Shell script is memory safe too, but you don't write anything longer than 100 lines in it for a reason.

show 2 replies
hollerith10/01/2024

Bizarre comment. No developer who should be allowed anywhere near a computer would ever consider choosing COBOL where Rust is appropriate or vice versa.

show 3 replies