What's the difference between crystal run xxx.cr and crystal xxx.cr?

What’s the difference between crystal run xxx.cr and crystal xxx.cr?
they seemed the same, so why two different syntax?
probably because crystal run xxx.cr can pass some additional flags
to compiler?

crystal xxx.cr just for conveniently, it same as run when pass a file as arg

As @zw963 mentioned, it’s a shorthand. If you want to pass compiler flags, though, you need to use run.