People with your background weren't the ones complaining. It was mostly the AS1 and AS2 users. In fact, a lot of the changes made from AS1 to AS3 were to make it easier for people like you to transition.Originally Posted by SlimyTadpole
Part of the difference is that "general purpose" languages don't have a clear concept of what a root object would be, whereas scripting languages, by many common definitions, are controlling a specific application (and are essentially tied to it). In the case of Flash Player, there was traditionally only one rectangle that you could control the display of at any given time. And, as you said, AS3 was a move to make AS closer to something that could be considered general purpose. At some point it seems silly to be too clean and compartmentalized if you're limiting access to the only thing your language can control anyway.Originally Posted by SlimyTadpole
APIs only restrict values, not variables. You can use a variable without a type annotation to reference a value that you pass to an API that has type annotated parameters, as long as the value is of the correct type at runtime or you don't mind getting a runtime error.Originally Posted by SlimyTadpole
People do omit type annotations sometimes, but you're right that you don't see it too often. Personally, I think that's not an ideal situation. I kind find the actual reference that I'm looking for, but the designers of Google's Dart and ECMAScript Harmony (different people) have said on a number of occasions that it's not productive to over-annotate values. It can be a waste of time, especially when projects are young and decisions are still changing about the way that the whole system will fit together.Originally Posted by SlimyTadpole
Type inference makes a lot of function-local variable annotations pointless. If the compiler and IDE can prove the types of local variables without your annotations, then it's truly a waste of time to add them... unless you think someone's going to come along later with an under-featured text editor and poor understanding of your project and try to make changes. At that point, though, type annotations aren't enough to be sure of the impact that code changes will have anyway.