https://github.com/twitter/util/blob/master/util-core/src/main/scala/com/twitter/util/Future.scala#L58

it uses a call-by-name parameter, but that's just so that it can wait to call it until it's wrapped in a Try().  the difference between Future.value and Future.apply is that the call-by-name parameter is an extra allocation.
ConstFuture(Try(f)) vs. ConstFuture(Return(f))