First, this is the English language, and therefore pretty much any lexical word can be used as pretty much any open-category part of speech (in English, that's noun, adjective, adverb, and verb; occasional closed-category POS like subordinate conjunction or preposition are also possible).
Consequently, what part of speech a word is used as in English (though not in many other languages, where inflection is important) is NOT determined by dictionaries, which are authoritative only on written meanings and occasionally on standard pronunciation. The grammatical information they provide is rarely useful, because they deal with individual words and not constructions, except for the more popular idioms.
Second, that means the conclusion drawn, viz
- Compile is just a verb, which means it cannot be used as an adjective or a noun.
is false.
Third, the conclusion then drawn, viz
- Grammatically speaking, at compile time is not a correct phrase.
is also false, because this is not "grammatically speaking". This is a dictionary, not a grammar. A grammar of English does not tell you what's "correct", anyway; official correctness is merely trying to talk like the upper classes so nobody can tell you're not upperclass yourself.
Fourth, the observation
- However, in computing/programming, at compile time is the de facto standard.
is correct. There is no however, however. This observation is all that is needed. The previous parts were all false, coming from the entirely too common, and totally false, presuppositions that:
- Grammar is a set of "rules", which somebody knows and will tell you
- Parts of speech are set by rule, and cannot change
- If you break one of the rules, the result is "an incorrect phrase"
In fact, idioms like this happen all the time and become fixed phrases, coming together until they're glued together like today or become or always. Compile time, encode time, decode time, most verbs that can refer to an activity that takes time and occurs in sequence can become fixed phrases in this construction.