There's no language suitable for all tasks, and there probably won't ever be one. When choosing a programming language, you have to balance programmer productivity, maintainability, efficiency, portability, tool support, and software and hardware interfaces. Often, one of these factors will shape your decision. In other cases, the choice depends on the productivity you gain from certain language features, such as modularity and type checking, or external factors, such as integrated development environment support. Finally, for some tasks, adopting an existing domain-specific language, building a new one, or using a general-purpose declarative language can be the right choice.