Can I calculate a half-zero data's FFT from its non-zero front part's FFT? I have data whose latter half are all-zero. For example, data=[a, b, c, d, 0, 0, 0, 0], and front_half=[a, b, c, d]. Is there any way to obtain FFT(data), by some compute-efficient transform on the FFT(front_half)?

I made some work on the equations. The even items in FFT(data) are just equal with FFT(front_half). But the odd items in FFT(data) seems twisted with dot-multiply with a time-domain weight vector, which looks hard to be calculated from the FFT(front_half).
The computationally efficient way is to do an IFFT/zero-pad/FFT.  It's usually less efficient to do a circular Sinc interpolation (to create the effect of a rectangular window in the other domain) for any large number of extra points.  Any other interpolation is less accurate.