Semihosting is afaik an ARM specific term. The advantage over UART & JTAG is performance I think, printing text is usually blocking & slow, while semihosting is using a ring-buffer I think?
The advantage is ease of use, semihosting is rather slow and has a big impact on system behaviour, as it uses a breakpoint and r0 to transfer a datapoint. It is definitely slower than SWO or RTT, which transfers data over SWD.
You can find a detailed description here https://interrupt.memfault.com/blog/arm-semihosting