Comparison of Programming Languages

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
m (Declarations)
m (Other Types: made C# enum's “: type” optional («»'s))
Line 246: Line 246:
⇥ «item2
⇥ «item2
⇥ …»</boo>
⇥ …»</boo>
| {{wikitable-td}} <csharp>enum name : type {name;...};</csharp>
| {{wikitable-td}} <csharp>enum name «: type» {name;...};</csharp>
| {{wikitable-?}}
| {{wikitable-?}}

Revision as of 19:23, 15 December 2009

This is a comparison of the features and instructions of the three high-level programming languages offered by Unity: JavaScript, C#, and Boo.


Conventions of This Article

The bold is the literal code. The non-bold is interpreted by the reader. Statements in guillemets (« … ») are optional. “⇥ ” indicates a necessary indent.

The following tables compare code differences of the Unity programming languages. See also the Comparison of Programming Languages for general information.


The following tables compares major features of the Unity programming languages.

Language Boo C# UnityScript/JavaScript
Standardized Variation? Yes Yes, ECMA, ISO ECMA-334; ISO/IEC 23270:2006 No
Type Strength strong, duck strong strong1, duck
Type Safety safe safe safe
Expression of Types implicit with optional explicit typing explicit implicit with optional explicit typing
Compatibility Among Composite Types ? name-based ?
Type Checking static with optional dynamic typing static with optional dynamic typing static with optional dynamic typing

1 Normally Javascript in Unity uses type inference to statically type all variables when possible, in cases where the type is not explicitly stated. Dynamic typing can be forced if desired, and, in certain circumstances, dynamic typing is used unless forced otherwise. Use of the "#pragma strict" directive disables all dynamic typing.

Type Identifiers


Language Boo C# UnityScript/JavaScript
8 bit (byte) Signed ? sbyte sbyte
8 bit (byte) Unsigned byte byte byte
16 bit (short integer) Signed short short short
16 bit (short integer) Unsigned ? ushort ushort
32 bit Signed int int int
32 bit Unsigned ? uint uint
64 bit (long integer) Signed long long long
64 bit long integer) Unsigned ? ulong ulong

Floating Point

Language Boo C# UnityScript/JavaScript
Single Precision single float float
Double Precision double double double
Arbitrarily Precise (bignum) decimal decimal ?

Other Types

Language Boo C# UnityScript/JavaScript
Text Character N/A char char
Text String string string String
Boolean) bool bool boolean
Object/Universal) object object Object

Derived Types


Language Boo C# UnityScript/JavaScript
one-dimensional fixed size array <boo>(type)</boo> <csharp>type[size]</csharp> <javascript>type[size]</javascript>
multi-dimensional fixed size array ? <csharp>type[size1, size2,...]</csharp> <javascript>type[size1, size2,...]</javascript>

(note: currently these types of arrays can be created implicitly and used, but cannot be created explicitly)

one-dimensional dynamic size array <boo>List</boo> <csharp>System.Collections.ArrayList</csharp>

or <csharp>System.Collections.Generic.List<type></csharp>


or <javascript>System.Collections.ArrayList</javascript>

multi-dimensional dynamic size array ? ? ?

Other Types

Language Boo C# UnityScript/JavaScript
Record Simple Composite Types ? <csharp>struct name {type name;...}</csharp> ?
Enumeration Simple Composite Types <boo>enum condition:

⇥ item1 ⇥ «item2 ⇥ …»</boo>

<csharp>enum name «: type» {name;...};</csharp> ?

Basic Unity-Specific Types

Language Boo C# UnityScript/JavaScript
array ? ? <javascript>Array</javascript>


Language Boo C# UnityScript/JavaScript
variable <boo>name = initial_value</boo> <csharp>type name «= initial_value»;</csharp> <javascript>var name «= initial_value»;</javascript>
constant <boo>final name = initial_value</boo> <csharp>const type name = value;</csharp> <javascript>N/A</javascript>
type synonym <boo>synonym = typeof(type)</boo> <csharp>using synonym = type;</csharp> ?

Flow of Control

Conditional Statements

Language Boo C# UnityScript/JavaScript
if ? <csharp>if (condition) {instructions}

«else {instructions}»</csharp>

else if ? <csharp>if (condition) { instructions }

else if (condition) { instructions } … «else { instructions }»</csharp>

select case ? <csharp>switch (variable) {

case case1: instructions; «jump statement;» … «default: instructions; «jump statement;»» }</csharp>

conditional expression N/A <csharp>condition ? valueIfTrue : valueIfFalse</csharp> ?

Loop Statements

Language Boo C# UnityScript/JavaScript
while ? while (condition) { instructions } ?
do while ? ? ?
for i = first to last ? ? ?
foreach ? foreach (type name in collection) { instructions } ?


Language Boo C# UnityScript/JavaScript
throw ? ? ?
handler ? ? ?
assertion ? ? ?

Other Flow of Control Statements

Language Boo C# UnityScript/JavaScript
exit block(break) ? ? ?
continue ? ? ?
label ? ? ?
branch (goto) ? ? ?
return value from generator ? ? ?


Language Boo C# UnityScript/JavaScript
calling a function ? ? ?
basic/void function ? ? ?
value-returning function ? ? ?

Type Conversions

Language Boo C# UnityScript/JavaScript
basic type to basic type ? ? ?
string to basic type ? ? ?
basic type to string ? ? ?
complex type to string ? ? ?
complex type to complex type ? ? ?

Programming Index

Personal tools