Ly / ><>, 20 19 bytes
"abc"&&ov
; oo<
Try it with ><>!
Try it with Ly!
These languages are very similar, as Ly is based off ><>. However, Ly does not have 2D execution and interprets &
differently, which I took advantage of here.
Both languages will start by pushing abc
to the stack.
For ><>, the &
instruction moves values to and fro the register. Two in a row will push a value to the register and then take it straight back, essentially a NOP.
For Ly, &
is a modifier that makes an instruction perform its function on the entire stack.
o
means the same thing for both languages, but since it is modified by &
in Ly, it will print the whole stack, outputting abc
. In ><>, it will only output c
(as it is printed from the top down)
v
is a NOP in Ly, which skips it and goes straight to ;
, ending execution. ><> will instead treat it as a pointer, sending the IP downwards.
It then hits another arrow, sending the IP left. Here, it meets two o
signs, outputting b
and a
.
EDIT: Saved a byte (and fixed ><> crashing)