Inconsistency in Documentation

Connor Gette's icon

How exactly does Max differentiate an "atom" from a list item? What does an "atom_long" imply? I can't find anything explaining these. Is a "string" the same thing as a "symbol"? Why do some references seem to use the two to mean the same thing? If they are the same, why do objects like Fromsymbol and Tosymbol exist?

👽'tW∆s ∆lienz👽's icon

not sure where you read about 'atom', but this is not needed for general Max/MSP knowledge, it's used more when developing Max externals from the SDK to extend Max with C/C++.
you can read about 'atom' fully here: https://cycling74.com/sdk/max-sdk-7.3.3/html/chapter_atoms.html
(it's like the smallest possible element/character, but the term 'atom' refers more to a tag that references the data structure associated with that element under-the-hood, more can be read about the etymology of the term here: https://stackoverflow.com/questions/10525511/what-is-the-atom-data-type)

"atom_long" is just an 'atom' which stores a 'long' type integer (https://iq.opengenus.org/integer-datatype-in-c/)

a "string" is a 'string' of characters, while a "symbol" is a string of characters combined/concatenated into one data-type used to represent something in that specific form/order of characters(basically, if you don't turn a string into a symbol, the individual characters within the string are still available to be treated as individual characters and something expecting a specific symbol might not recognize that string).

in reference to your other questions(and the general subject surrounding these questions), these terms/types/formats/structures all exist because computers can't delineate things like these without some quantifiable value to help them understand how much space in memory to reserve for them(the etymology description above describes "atom" as being an acronym for "access to memory")... structures like these not only help store things in the proper amount of memory space, but they also carry, under-the-hood, properties that allow the computer to know where to retrieve and how to calculate/process them most efficiently.

others might have more details(i'm not the best when it comes to explaining semantics 😅), but that's the basics according to what i've understood from reading the Max SDK for extending Max with C(not so much the regular docs for Max itself... to use regular Max, you really only need to know the difference between integers and floating-point numbers, plus the difference between a string made up of individual characters and a symbol... but a 'string' and 'symbol' can get confusing because a single character can be a string, which can also be turned into a symbol).

hope it helps 🍻

Roman Thilenius's icon


we call arrays "list" and strings "symbol" and values/numbers are always of a defined type, too.

together they are our "messages"

oh, and of course we call streams "signal".

lists can be as long as you want, but most objects either have a strict limit or you have to set a max list size.

well, and when it comes to numbers there is only "float" and "int" and no fixed point - and you can not mix different bit depths.

everything else is like in C++.

for example 77 remains 77, wich is quite useful.

unless it is 77.0 float, then i wouldnt bet a single dollar that the floating point is implemented correctly.

but somehow things always work. in the workaround progamming language.