Curly bracket programming language
From Wikipedia, the free encyclopedia
Curly brace or bracket programming languages are those which use balanced brackets ({ and }, also known as "brace brackets" or simply "braces") to make blocks in their syntax or formal grammar, mainly due to being C-influenced.
Contents |
[edit] History
Curly-bracket syntax pre-dates C. BCPL was the first language to use curly brackets to outline multi-statement function bodies. Ken Thompson used the feature in his B programming language. Because C was initially designed after B, it has retained the bracket syntax of B, as have many subsequent languages (C++, Java, JavaScript and its generalized standard ECMAScript, C#, D, etc.). Pico is a non-C descendant that also uses this style.
One common part of curly bracket style is the common style of terminating a statement with a semicolon (;), which is one way for languages to ignore whitespace. BCPL and Pico do not have this rule; a newline is used as a statement terminator in such languages. The Pico indent style is then used, as below (BCPL):
LET FUNC foo(a) = VALOF { b := a + 1 RESULTIS b }
[edit] Statements and blocks
The name derives from the common syntax of the languages, where blocks of statements are enclosed in curly brackets. For example (using BSD/Allman indent style, one of many stylistic ways to format a program):
for (int i = 0; i < 10; i++) { printf("%d", i); doTask(i); }
Languages in this family are sometimes referred to as C-style, because they tend to have syntax that is strongly influenced by C syntax. Beside the curly brackets, they often inherit other syntactic features, such as using the semicolon as a statement terminator (not as a separator), and the three-part "for" statement syntax as shown above.
Generally, these languages are also considered "free-form languages", meaning that the compiler considers all whitespace to be the same as one blank space, much like HTML. Considering that, the above code could be written:
for(int i=0;i<10;i++){printf("%d",i);doTask(i);}
but this is not recommended, as it becomes nearly impossible for a person to read after the program grows beyond a few statements.
A popular way to work with curly braces is with the K&R style:
int i; for(i = 0; i < 10; i++) { printf("%d", i); doTask(i); }
There are many other ways to identify statement blocks, such as ending keywords that may match beginning keywords (in Ada, Pascal, REXX, and Visual Basic), the Off-side rule of indentation (in Python), or other symbols such as parentheses (in Lisp). These ways are not necessarily exclusive: whereas indentation is the default in Haskell, curly brackets can be used when desired.
[edit] Loops
In C, C++, C#, and Java:
while (boolean expression) { statement(s) }
do { statement(s) } while (boolean expression);
for (initialisation; termination condition; incrementing expr) { statement(s) }
[edit] Conditional statements
In C, C++, C#, and Java:
if (boolean expression) { statement(s) }
if (boolean expression) { statement(s) } else { statement(s) }
if (boolean expression) { statement(s) } else if (boolean expression) { statement (s) } ... else { statement(s) }
switch (integer expression) { case constant integer expr: statement(s) break; ... default: statement(s) break; }
[edit] Exception handling
In C# and Java:
try { statement(s) } catch (exception type) { statement(s) } catch (exception type) { statement(s) } finally { statement(s) }
Objective-C has the same syntax starting with gcc 3.3 and Apple Mac OS X 10.3 , but with an at sign in front of the keywords (@try
, @catch
, @finally
).
C++ does not have finally, but otherwise looks similar. C has nothing like this, though some vendors have added the keywords __try and __finally to their compilers.
[edit] Problems
Some 7 bit national ISO646 sets redefine curly brackets to characters that make programs hardly readable on such designed terminals. To address this problem, ANSI C introduced trigraphs that can be used instead of such problematic characters. All trigraphs consist of two question marks (“??”) followed by a character that is not redefined in the national 7 bit ASCII character sets. The trigraphs for ‘{’ and ‘}’, respectively, are “??<” and “??>”.
[edit] Languages
- ABCL/c+
- Alef
- AutoHotkey
- AWK
- BCPL
- C - developed circa 1970 at Bell Labs
- C shell (csh)
- C++
- C#
- Ch - embeddable C/C++ interpreter
- ChucK - for audio programming
- Cilk - concurrent C for multithreaded parallel programming
- Coyote - C variant intended to lower the likelihood of some common errors, for example, buffer overflows
- Cyclone - C variant
- D - C/C++ inspired
- DINO
- E
- ECMAScript
- ActionScript
- DMDScript
- E4X
- JavaScript
- JScript
- MDMscript
- Ferite
- Frink
- ICI
- Java
- Objective-C
- Perl
- PHP
- Pico
- Pike
- rc
- TSL
- UnrealScript
- Windows PowerShell
- Yorick