"Это печально."
Перегрузки не нужны, а вот именованные аргументы и аргументы по-умолчанию нужны. Странно, что эта простая и незатейливая мысль не дошла до Андерса Хейлсберга (или если дошла, то он от неё отмахнулся зачем-то).
Да, в джаве тоже перегрузка методов, но если передирать дизайн, зачем передирать и неудачные решения?
А именованные аргументы - это в сущности анонимные записи.
Соответственно обычные, позиционные аргументы - это передача анонимного тупла (да я знаю, они все такие).
Сразу захотелось сделать такой язык, в котором есть анонимные записи и туплы, и они могут прозрачно создаваться/деконструироваться когда мы передаём что-то куда-то:
f(1, "2", 3.0) // неявно передаётся тупл типа (Int, String, Double)
f(first = 1, second = "2", third = 3.0) // неявно передаётся анонимный рекорд типа {first: Int, second: String, third: Double}