The kinds of data the software works with is different. The resource costs are radically different. The execution environment is necessarily very different-- how often do you write ordinary programs whos execution gets rolled back in a reorg or could "run out of gas"? The implications of failure are typical fairly different. The interactions with privacy are very different than ordinary software development.
Yes, smart contracts are different from normal software in many ways, but I'm not seeing why exactly this means they shouldn't be written in a declarative language. My premise is that a language like Script just adds to the developer's mental load without any corresponding benefit over a declarative language (which I am assuming are easier for the human mind to understand).
Note that I'm not suggesting Ethereum's language is better. This is just about declarative vs. . I'm wondering whether it is possible to create a language that has equal power to Script, which just happens to be declarative. So for instance it would obviously not have loops, no gotos. Maybe just if statements / if/else, support for variables, the existing opcodes converted to declarative functions, and a cap on the # of instructions.
So for instance a P2PKH 'script' might look like:
function( pubKeyHash, sig, pubKey){
h = OP_HASH160(pubKey)
if ( pubKeyHash != h ) return false
return OP_CHECKSIG( sig, pubkey)
}
Are there reasons why if Satoshi had done this instead of Script it would have been bad?