# What is standardization in computer science?

I was reading about the differences standards and specifications for C.
I understood that programming languages are usually stadardized and I learnt that there are different approches to stadardization.
Anyway I did not understand yet what this terms refer to.
If I think to C, I believe it refers to a standard API, the API of the C standard Library (libc).
This seems to make sense to me, as if someone told me "Look these are the only functions, types, Macros....etc you can use", because they're the only thing you "see" after you downloaded the library and they make your code portable.
Anyway, I don't know if my idea of standardization is in some-ways correct, if it's totally wrong or if it's a simplified version, so here I am.

• I don't see a way how this is CS. It's about how programmers refer to versions of programming languages. This should be on Stack Overflow or Software Engineering; whose perspective do you want?
– Raphael
Jan 24 '18 at 18:25
• @Raphael Seems that stackoverflow it's used only for code questions right now, and software engineering...well, it's not that easy choosing betweet that and here...I guess here it's more oriented toward computational theory , but for the rest they share a lot of tags...So I just made a random choice....It could have been the wrong one, but only now I know it :) Jan 24 '18 at 19:18
• @GabrieleScarlatti, as a rough understanding of the usage of a standardization, "they're the only thing you 'see' after you downloaded the library and they make your code portable." is pretty good. Nov 2 '18 at 15:15
• @Raphael, the cs.stackexchange.com/help/on-topic includes "programming language semantics". It looks like how to understand the standardization of programming languages is on-topic to me, even though it might be even more on-topic on other sites. Nov 2 '18 at 15:18

## 3 Answers

A standard for a programming language is a document defining the syntax and semantics for that language. Usually, for real-world languages, this document involves a (hopefully) precise description in intuitive terms, rather than a formal semantics, written in mathematical terms.

Still, this document acts as a contract between the programmer and the language implementation (usually a compiler/interpreter, plus some "standard libraries").

The programmer knows that, if they stick to what the standard mandates, they will get back the intended result from the implementation. Vice versa, the implementor of the language can assume that the programmer used no other features than those mandated. Often, the implementor will also provide non-standard features (additional APIs, additional language constructs, OS-specific libraries, etc.).

Note that the standard does not only involve describing the APIs in the standard library. In the case of the C language, as mentioned by the OP, the standard defines among others: the syntax, the type system, the memory model, the statements, the variable declarations, etc.

For instance, what happens if we write int *x; *x=0;? The ISO standard answers that: an implementation printing mooo! on screen is perfectly conforming (as any other implementation is).

So, summing up, a standard is the authoritative document which answers questions like "is running code C guaranteed to have behavior B?".

Most standards are written by a committee made of the most prominent organizations which developed / are developing the most widespread implementations. They vote on which features should be in or out, until they reach an agreement on what should be the standard definition. Some languages are revised every few years, so to include more features.

Standardization is the process of developing, promoting and possibly mandating standards-based and compatible technologies and processes within a given industry.

Standards for technologies can mandate the quality and consistency of technologies and ensure their compatibility, interoperability and safety. Standards organizations such as ANSI , IEEE and IETF exist to promote standardization and endorse official standards for given applications.

A lack of standardization often manifests in large numbers of incompatible proprietary formats for a given technology and for technologies that must interoperate. That all-too-common situation hinders the adoption and advancement of the technology and industry.

The burgeoning Internet of Things (IoT) is a current case in point. The main purpose of the IoT is enabling almost any object imaginable to be connected and to transmit data over the Internet. Although that scenario is increasingly becoming realized, incompatible formats and market fragmentation are slowing adoption.

Standards are simply a list of software guidelines that a project will need to conform to. These standards can be a mixture of requirements. There could be special format and documentation of the code needed. You many need to program the flow of routines in a certain way. How you name functions, files, and variables may need to fit into certain schemes. There could be limits on the types of features that a developer can use while working in some platform.

The reason why it is important to know about standardization in C is that many compilers have been built to default to various versions or even only support only one standard of C programming. You may be forced to work with a particular compiler or a legacy system that may not be able to support a new version of C. Luckily, C programmer did not see many changes of features between the ANSI-C and the C99 standards.