On Ethereum, Solidity has access to the global state of the blockchain and it's very hard do create secure program with it. Cardano's language Plutus has only access to UTXOs ( bitcoin way to manage account) and store a local state in it. It's really functional programming applied to the blockchain space. The language is functional ( Haskell subset ) and the ledger too. One advantage of this design is that fees are deterministic. For a given transaction input you will have exactly the same fees.