I can only guess, but to me the following seems to be the rational behind it:
Description on std_msgs
:
Contains minimal messages of primitive data types and multiarrays. Intended for quick prototyping, not production use.
The full explanation/discussion can be found on discourse.
EDIT
With semantics is meant that you can derive from the message name and the names of it fields what it transports. To give an example (stolen more or less from discourse ;-) ):
If you would like to send a temperature, you could just use a std_msgs/Float
message. However, if you would inspect the message, it is not clear what this should be. Is it a temperature, and if yes in Celsius, Fahrenheit, ..., or rather air pressure or the distance to an object? All the messages says is it is a float and contains a field data
.
If you however use a dedicated sensor_msgs/Temperature
message, you are fairly certain that this should actually be a temperature and that this temperature should be in degree celsius (check the source for the full description).