Jeśli chodzi o dwukierunkowość to zapewne:
- Delphi/Pascal
- Fortran (dziwne, że nikt jeszcze nie wymienił)
- Rust
- D
- Zig
- Nim
- Crystal
Z takich "popularniejszych" technologii, które w miarę bezproblemowo działają w obie strony chyba nic więcej. Jeśli jednak trochę "więcej zachodu" jest dozwolone, to w Erlangu jeśli napiszesz sobie C-node to można w miarę łatwo się komunikować w obie strony, ale to trochę oszustwo, bo w ten sposób można uzasadnić wszystkie języki "gadające" poprzez stdio/jakiś bus.
Byłbym zapomniał, jeszcze są języki skryptowe przeznaczone do takiego działania, więc masz:
Może coś takiego by Cię interesowało, zależy co chcesz osiągnąć i co potrzebujesz.