Terraform is good with declaring and making a new infrastructure, but not great at detecting out-of-band changes or importing existing infrastructure. For example, if you make a change in the AWS console, that might be overwritten or not detected by Terraform, so the "declarative" abstra...
You can use Rudder just to check compliance over a group of machines, and/or a specific configuration, without changing anything. Especially useful before pushing changes into production to see what is going to be modified and the impact over compliance.
Puppet is very mature and relatively old. This means that it has gathered quite a following over the years. This large community means that there are a lot of modules, guides and configuration recipes ready to use built by the community.
Chef is written in Ruby and its CLI uses a Ruby-based DSL. In order to fully use and customize it you need to use Ruby as Chef does not give users any other choice when it comes to languages to use to configure it.