As long as both shields comply with CAN spec, and the software in both ends uses the same configuration (bitrate, CAN message structure, CAN IDs) there should be no problem in using different platforms and different languages to communicate between them.
Note that in many shields the power for the CAN transceiver is provided from the "vehicle" and not from the platform that you use (arduino, RPi) to provide better protection to the platform, and you might need to provide such power source (the arduino might do, (although the RPi can provide 5V from pin 2).