Every software program is written in a programming language, and there are several languages for every major CPU series; typically an assembly language and a number of high-level languages. Assembly languages are machine specific, and the machine language they generate runs on only one CPU family. Unless the machine languages are very similar, it is difficult to translate an assembly language program from one CPU series into another. See standards - machine languages. The high-level programming language was created to eliminate machine dependency. Languages such as COBOL, FORTRAN, BASIC and C were designed to run on many different computers. However, compatibility has always been an issue. By the time a new language feature becomes a standard, a dozen new features have been already implemented. For example, in the early 1980s, dBASE became a de facto standard business programming language. Soon after, dBASE spawned Clipper, QuickSilver, Force III, dbXL, Foxbase and FoxPro, all competitive products and all incomplete versions of dBASE. None of them provided every dBASE command, and they all provided features not found in dBASE. There is no rule of thumb for translating one dialect of a programming language into another. The job may be difficult or easy. At times, software is written to translate one dialect into another, as well as one programming language into another. If the translation program cannot translate the program entirely, then manual tailoring is necessary. In these cases, it is often easier to rewrite the program from scratch. Compatibility can be achieved when a programming language conforms to the ANSI (American National Standards Institute) standard for that language. For example, if the same version of an ANSI COBOL compiler is available for two different CPUs, a program written in ANSI COBOL can usually be compiled into each of the two machine environments without requiring any changes in the code. Beyond traditional programming languages such as COBOL, C/C++, known as third-generation languages, or 3GLs, there are more than a hundred software environments used to develop applications for LANs and the Web (see client/server development system). Each of them attempts to provide less programming-like and more English-like syntax (see fourth-generation language). Visual development tools are also available for building the graphical user interface by "drawing" the screen and dragging and dropping symbols on it. Some languages allow predefined data processing actions to be dragged and dropped as well, eliminating the tedium of writing program code. All these software-building tools produce even more standards, and the programming pool has become increasingly fragmented. See programming language and standards.