Сделали на раст просто потому что проще и хорошо подходит.
Отсутствие рантайма и сборщика мусора дадут равномерное время обработки запросов, в отличии от Go, C#, или Java.Так же у nginx был блокирующий ввод-вывод и Multiprocess + Multithreading. Nginx генерирует worker processes у каждого из которых свои worker connections. Используя этот подход хуже утилизируются процессорные кеши, но по словам nginx - лучше утилизируется сетевое подключение, потому что каждый процесс имеет свой личный порт.
Для Cloudflare это огромный минус, т.к. им очень важен TTFB (Time to first byte - время до первого байта) - сколько времени проходит до получения первого байта полезной информации. Низкий TTFB = ваш процесс висел в ожидании байта, не делая ничего полезного, но потребляя ресурсы. TTFB можно уменьшить разными подходами (например переиспользовать соединение), но многие из них рушатся из-за multiprocess модели - т.к. у каждого процесса свой порт, пошарить коннекшн не получится.
Поэтому в Cloudflare решили заменить Multiprocess и Multithreading на Workstealing Multithreading + убрать блокирующий ввод-вывод. Они это сделали используя tokio.rs
Можно ли было сделать это всё на любом другом языке и добиться таких же результатов? Конечно! Даже на Lua или python проведя достаточно большую работу и изменив их рантайм.
Но rust - самое простое решение. В отличии от некоторых других языков, тут нет рантайма и есть контроль над тем когда и как освобождается память, а так же менеджер пакетов(cargo) который позволит вставить и поддерживать библиотеку которая хорошо подходит под текущие задачи, и легко обновить её в случае каких-либо проблем (в отличии от C/C++).
tl;dr: rust был самым простым вариантом