これらの言語では、リストの先頭要素を返す処理を関数化するだけで

public static<T> T first(List<T> lst) {
return lst[0];
}

のように書かなければならない
なぜ

def first(lst) {
lst[0]
}

ではいけないのか
こんな単純な処理で、処理系の都合に合わせて余計なトークンを7~11個も書かなければいけないのは馬鹿げている
関数プログラミングなどに影響されて新しい機能を追加したところで、このように古い時代の静的型付けとオブジェクト指向の発想がついてまわる

動的型付け言語は遅いというが、これは色々な意味で間違っている
まず、ほとんどのアプリケーションはCPUバウンドではなくIOバウンドであるため、処理系の速度は多くの場合問題にならない
そして、ボトルネックになる部分はRDBMSなどのミドルウェアに処理を委譲したり、C言語やWebAssemblyなどで書かれたライブラリを呼び出すのが普通だ
わざわざアプリケーション全体を処理系の吐き出すコードを逆算して高速になるように書く必要は無い

そして最近では動的型付け言語であっても静的に型検査ができる
もはや安全性のために言語が静的型付けである必要は無い