Jump to content

Source-code compatibility

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by 2601:581:302:fb9b:f8e2:9695:751a:678e (talk) at 14:06, 17 July 2017. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Source-code compatibility (source-compatible) means that a program can run on computers (or operating systems), independently of binary-code compatibility and that the source code is needed for portability.

The source code must be compiled before running, unless the computer used has an interpreter for the language at hand. The term is also used for assembly language compatibility, where the source is a human-readable form of machine code that must be converted into numerical (i.e. executable) machine code by an assembler. This is different from binary-code compatibility, where no recompilation (or assembly) is needed.

Source compatibility is a major issue in the developing of computer programs. For example, most Unix systems are source-compatible, as long as one uses only standard libraries. Microsoft Windows systems are source-compatible across one major family (the Windows NT family, from NT 3.1 through Windows 8.1, or the family that includes Windows 95, Windows 98, and Windows Me), with partial source compatibility between the two families.

It can be programmatically tricky to determine whether one is executing atop a Windows or UNIX environment. A simple-minded trick can often be resorted to, however. It is exemplified by the following Perl expression:

        -d "C:" && ! -d "./C:"

This expression determines whether a directory called C: exists and--if it does--verifies that it is not a subdirectory called "C:" deliberately created by some wag for the sole purpose of defeating the check. Since, of course, one occasionally encounters a Windows system that does not feature a C: drive, the expression can be generalized thus:

        join "", map { -d $_ && ! -d "./$_" } map { chr( $_ ) . ':' } ord( 'A' ) .. ord( 'Z' )

The inner map returns the set "A" .. "Z"; the middle map converts this to the set "A:" .. "Z:"; and the outer map applies the logical conjunct to each member of the colon-embellished set, the results of those 26 logical evaluations being concatenated by the join. The resultant expression will be blank if and only if none of the 26 drives tested for was found to exist; otherwise, it will be a valid number belonging to the set { 1, 11, 111, ..., 11111111111111111111111111 }.

which actually applies the preceding logical test to the complete set A: through Z: of possible drives. Each test that succeeds returns a "1" while each that fails returns the empty string. Thus, if one or more of the drives exists, the return value will be a nonzero number, albeit possibly as large as 11111111111111111111111111.


See also