In Python, and most likely many other programming languages, common data structures can be found as an integrated part of the core language with their own dedicated syntax. If we put LISP's integrated list syntax aside, I can't think of any other languages that I know which provides some kind of data structure above the array as an integrated part of their syntax, though all of them (but C, I guess) seem to provide them in the standard library.From a language design perspective, what are your opinions on having a specific syntax for data structures in the core language? Is it a good idea, and does the purpose of the language (etc.) change how good this could be of a choice?Edit: I'm sorry for (apparently) causing some confusion about which data structures I mean. I talk about the basic and commonly used ones, but still not the most basic ones. This excludes trees (too complex, uncommon), stacks (too seldom used), arrays (too simple) but includes e.g. sets, lists and hashmaps.
Should data structures be integrated into the language (as in Python) or be provided in the standard library (as in Java)?
programming languages;language design
It depends what the language is for.Some examples (somewhat stolen from other answers):Perl has special syntax for hashtables, arrays, strings.  Perl is often used for scripting, these are useful for scripting.Matlab has special syntax for lists, matrices, structures.  Matlab is for doing matrix and vectorial mathematics for engineering.Java/.NET support string and arrays.  These are general purpose languages where arrays and strings are often used (less and less with use of new collection classes)C/C++ support arrays.  These are languages that do not hide hardware from you.  Strings are partially supported (no concatenation, use strcpy, etc.)I think it depends what the purpose/spirit/audience of your language is; how abstract and how far away from hardware you want it to be.  Generally the languages that support lists as primitives allow you to create infinitely long lists.  While low level such as C/C++ would never have these, because that is not the goal, the spirit of those languages.To me, garbage collection follows the same logic: does the audience of your language care about knowing exactly when and if memory is being allocated or freed?  If yes, malloc/free; if no, then garbage collection.