Scripting languages provide unique challenges and opportunities compared to other, more researched languages. Few interpreter activities are safe from races when dynamic typing, late binding, and dynamic compilation occur in the presence of multiple threads. But introducing the necessary synchronization will result in poor performance, even though actual races may be quite rare. However, with careful choices of synchronization mechanisms, we should be able to take advantage of these read-mostly critical sections and reduce the performance penalty.
Additionally, these very high-level languages include extensive, tightly integrated standard libraries, which provide many opportunities to introduce concurrency ``under the hood'', without involving the application programmer. The functional language features can also make explicit parallelism easier to express in scripts. However, if introducing concurrency makes the language much more difficult to use, users will be tempted to move towards other languages. Finally, interpreters can be very slow; while this provides room to hide some overheads, it also means that our concurrent extensions must be more effective.