We can serialize any Wolfram Language expression as ASCII, if necessary (and functions like Save do exactly that -- traversing the symbol graph to find all definitions that a piece of code depends on) and dumping it out.
But you wouldn't want to do that in the case of packed arrays, timeseries, or images -- the result would be incomprehensible (and incomprehensibly large).
Ultimately, Wolfram Language code consists of expression trees, these trees are "conceptually" the equivalent of their FullForm (http://reference.wolfram.com/language/ref/FullForm.html). What makes a WL expression "code" instead of "data" is that evaluating it will change the state of the kernel so that it has new rules attached to various symbols (functions + variables).
Plaintext files are just one vehicle for WL expressions. And in many cases there are cool things you can do that require the code to live in an IDE that can render WL expressions natively, such as
Blur[<<picture of dog>>]
or
GeoLocation[<<NLP interpretation of "berlin">>]
For machines, the thing now known as the Wolfram Symbolic Protocol is used to talk WL expressions over the wire. And there are two efficient binary serialization formats: "MX" and "WDX".
We can serialize any Wolfram Language expression as ASCII, if necessary (and functions like Save do exactly that -- traversing the symbol graph to find all definitions that a piece of code depends on) and dumping it out.
But you wouldn't want to do that in the case of packed arrays, timeseries, or images -- the result would be incomprehensible (and incomprehensibly large).
Ultimately, Wolfram Language code consists of expression trees, these trees are "conceptually" the equivalent of their FullForm (http://reference.wolfram.com/language/ref/FullForm.html). What makes a WL expression "code" instead of "data" is that evaluating it will change the state of the kernel so that it has new rules attached to various symbols (functions + variables).
Plaintext files are just one vehicle for WL expressions. And in many cases there are cool things you can do that require the code to live in an IDE that can render WL expressions natively, such as
or For machines, the thing now known as the Wolfram Symbolic Protocol is used to talk WL expressions over the wire. And there are two efficient binary serialization formats: "MX" and "WDX".