There's lots of choices for embedding other languages in Max: LISP, Groovy, Python, and Ruby, to name some of the recent ones.
This is such a powerful capability, but after using Ruby in Max for a while now I am frustrated. Max messages have special characters: double quotes, commas, semicolons, $, #. Unfortunately these characters are very common in other languages, so you end up with scripts like aFunction(1,2,3,4,5);anotherFunc() when you just want to type aFunction(1,2,3,4,5);anotherFunc() and be done with it.
For bigger scripts, using an external editor is the way to go. No question. But sometimes you really just want to drop a script into a clickable message box.
The best compromise I found so far is to use a textedit in "output as one symbol" mode (set via the inspector). But even that has a major annoyance. Try this patch:
Enter text with some commas and newlines, something like this:
Save the patch, close it, reopen it. Now the text edit looks like this:
This might not seem like a big deal, but for more complicated scripts it can kill the readability. I want it to look like what I originally typed in. It's not cool that Max changes it! I believe these two textedit values are identical when the textedit is in "output as one symbol" mode. So in this situation, can the textedit automatically unescape those special characters?
For message boxes, can anything be done to prevent Max from interpreting its special characters, or otherwise automatically escape things? I asked about this before and regexp was suggested. That doesn't work because as soon as you click on the message box and the message goes out, the damage has been done (for example a comma will split it into separate messages). I suppose we need a message box-like external that doesn't interpret any special characters.
One of Max's greatest strengths is it's extensibility. But Max could be doing more to ease extensibility in the embedded language arena. I remember jkc saying they wanted to make it easier for people to add more languages to Max (somewhere in the js vs. lua thread). He was probably talking about low level API hooks. I humbly ask some thought be put into making it easier on the frontend side too.