It looks like there are two kinds of scopes for variables: Global and local.
If a variable is global, it can be accessed from anywhere, all objects, functions, etc. share the same instance of this variable.
If a variable is local only the function/procedure in which it was declared can access it.

I sometimes wish there was a way to declare variables with a smaller scope. For example: A variable inside an IF-block or a loop body.
Pros:
- I can use the same variable names in different blocks without having to worry whether they were already used, etc. (I get an error if I redefine an already defined variable)
- I learned to keep the variable scope "as small as possible" in other languages. As a result I tend to declare variables inside IF-blocks or loop bodies, which is sort of counter productive in DataFlex.
- It's easier to manage variables for a programmer if the scope is limited. (Harder for the compiler to manage the scopes though.)
- You (DAW) can do more loop optimizations in the compiler if you want to.
Cons:
- Might cause some weird/funny side effects if people already declared variables inside blocks

Another somewhat related point:
Would it make sense to have an object/class wide scope for variables? Or to treat variables which are defined inside an object/class (but not within a function) as properties instead of global variables?

I'm not sure how complicated it would be for you to change this. And I'm not sure how big the impact on existing programs would be. But I'm sure DataFlex code would benefit (style, readability, maintainability and maybe even performance).