Cards no-hit through eight innings, fall to Marlins 4-2