Why is Material Editor so different than Blueprint?

Given that HLSL and C++ share most of the syntax, why do Material Editor and BP look like completely two different language?

For example, why can’t I have local variables in Material?

I’m interested in the logic behind the tool creation. Thank you in advance for sharing any insight.

The purpose of each is totally different.

Blueprint has a lot of ‘procedural’ structures, such as loops.

A material is much more like one big function. And because it’s a sort of ‘definition’, not procedural, there is no room for things like variables and loops.

( Although variable do exist to some extent ).

Honestly not sure why this is the case, but may be due to the fact that the material editor is much older than Blueprint. Aside from being updated so that the execution flow goes from left to right, it seems like it really hasn’t changed much since it was first introduced publicly in UDK, and probably UE3 before that.