Share on Facebook Share on Twitter Email
Answers.com

Comparison of programming languages

 
Wikipedia: Comparison of programming languages (basic instructions)
Programming language comparisons
General comparison
Basic syntax
Basic instructions
Arrays
Associative arrays
String operations
String functions
List comprehension
Object-oriented programming
Object-oriented constructors
Database access
Database RDBMS
Evaluation strategy
List of "hello world" programs

Comparison of ALGOL 68 and C++
Compatibility of C and C++
Comparison of Pascal and Borland Delphi
Comparison of Pascal and C
Comparison of Java and C++
Comparison of Java and C#
Comparison of C# and Visual Basic .NET

Comparison of programming languages is a common topic of discussion among software engineers. Basic instructions of several programming languages are compared here.

Contents

Conventions of this article

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

Type identifiers

Integers

8 bit (byte) 16 bit (short integer) 32 bit 64 bit (long integer) Word size Arbitrarily precise (bignum)
Signed Unsigned Signed Unsigned Signed Unsigned Signed Unsigned Signed Unsigned
C (C99 fixed-width) int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t int unsigned int N/A
C (C99 variable-width) signed char unsigned char short[a] unsigned short[a] long[a] unsigned long[a] long long[a] unsigned long long[a]
C++
Objective-C signed char unsigned char short[a] unsigned short[a] long[a] unsigned long[a] long long[a] unsigned long long[a] int
or
NSInteger
unsigned int
or
NSUInteger
C# sbyte byte short ushort int uint long ulong N/A System.Numerics.BigInteger (.NET 4.0)
Java byte N/A char[b] N/A N/A java.math.BigInteger
Common Lisp[1] bignum
Scheme
Pascal (FPC) shortint byte smallint word longint longword int64 qword integer cardinal N/A
Visual Basic N/A Byte Integer N/A Long N/A N/A N/A N/A
Visual Basic .NET SByte Short UShort Integer UInteger Long ULong System.Numerics.BigInteger (.NET 4.0)
Python 2.x N/A N/A int N/A N/A N/A long
Python 3.x N/A N/A N/A N/A N/A int
JavaScript N/A N/A N/A N/A N/A N/A
S-Lang N/A N/A N/A N/A N/A N/A
FORTRAN 77 N/A INTEGER N/A N/A N/A
PHP N/A N/A int N/A N/A N/A [d]
Perl 5 N/A[c] N/A[c] N/A[c] N/A[c] N/A[c] Math::BigInt
Ruby N/A N/A Fixnum N/A N/A N/A Bignum
Windows PowerShell N/A N/A N/A N/A N/A N/A
OCaml N/A N/A int32 N/A int64 N/A int
or
nativeint
open Big_int;;
big_int
F# sbyte byte int16 uint16 int32 or int uint32 uint64 nativeint unativeint bigint
Standard ML N/A Word8.word N/A Int32.int Word32.word Int64.int Word64.word int word LargeInt.int or
IntInf.int
Haskell (GHC) «import Int»
Int8
«import Word»
Word8
«import Int»
Int16
«import Word»
Word16
«import Int»
Int32
«import Word»
Word32
«import Int»
Int64
«import Word»
Word64
Int «import Word»
Word
Integer
Eiffel INTEGER_8 NATURAL_8 INTEGER_16 NATURAL_16 INTEGER_32 NATURAL_32 INTEGER_64 NATURAL_64 INTEGER NATURAL N/A

^a  The C and C++ languages do not specify the exact width of the integer types "short", "int", "long", and (C99, C++0x) "long long", so they are implementation-dependent. The "short", "long", and "long long" types are required to be at least 16, 32, and 64 bits wide, respectively, but can be more. The "int" type is required to be at least as wide as "short" and at most as wide as "long", and is typically the width of the word size on the processor of the machine (i.e. on a 32-bit machine it is often 32 bits wide; on 64-bit machines it is often 64 bits wide). C99 also defines the "[u]intN_t" exact-width types in the stdint.h header. See C syntax#Integral types for more information.
^b  Commonly used for characters.
^c  Perl 5 does not have distinct types. Integers, floating point numbers, strings, etc. are all considered "scalars".
^d  PHP has two arbitrary-precision libraries. The BCMath library just uses strings as datatype. The GMP library uses an internal "resource" type.

Floating point

Single precision Double precision Processor dependent
C float[a] double N/A[a]
Objective-C
C++ (STL)
C# float N/A
Java
Common Lisp
Scheme
Pascal (Free Pascal) single double real
Visual Basic Single Double N/A
Visual Basic .NET
Python N/A float
JavaScript Number[2] N/A
S-Lang
FORTRAN 77 REAL DOUBLE PRECISION
PHP float
Perl
Ruby N/A Float N/A
Windows PowerShell
OCaml N/A float
F# float32
Standard ML N/A real
Haskell (GHC) Float Double
Eiffel REAL_32 REAL_64

^a  declarations of single precision often are not honored

Complex numbers

Integer Single precision Double precision
C (C99) [3] N/A float complex double complex
C++ (STL) N/A «std::»complex<float> «std::»complex<double>
C# N/A N/A
Java N/A N/A N/A
Objective-C N/A N/A N/A
Common Lisp
Scheme
Pascal N/A N/A
Visual Basic N/A N/A
Visual Basic .NET N/A N/A
Perl Math::Complex
Python complex
JavaScript N/A N/A
S-Lang N/A N/A
FORTRAN 77 COMPLEX
Ruby Complex N/A Complex
Windows PowerShell N/A N/A
OCaml N/A N/A Complex.t
F#
Standard ML N/A N/A N/A
Haskell (GHC) N/A Complex.Complex Float Complex.Complex Double
Eiffel N/A N/A N/A

Other variable types

Text Boolean Enumeration Object/Universal
Character String[a]
C (C99) char N/A bool[b] enum «name» {item1, item2, ... }; void *
C++ (STL) «std::»string
Objective-C unichar NSString * BOOL id
C# char string bool enum name {item1, item2, ... } object
Java String boolean Object
Common Lisp
Scheme
Pascal (ISO) char N/A boolean (item1, item2, ...) N/A
Object Pascal (Delphi) string variant
Visual Basic N/A String Boolean Enum name
item1
item2
...
End Enum
Variant
Visual Basic .NET Char Object
Python N/A[d] str bool object
JavaScript N/A[d] String Boolean Object
S-Lang
FORTRAN 77 CHARACTER*1 N/A LOGICAL N/A
PHP N/A[d] string bool object
Perl N/A[d]
Ruby N/A[d] String Object[c] Object
Windows PowerShell
OCaml char string bool N/A[e] N/A
F# type name = item1 = value | item2 = value | ... obj
Standard ML N/A[e] N/A
Haskell (GHC) Char String Bool N/A[e] N/A
Eiffel CHARACTER STRING BOOLEAN N/A ANY

^a  specifically, strings of arbitrary length and automatically managed.
^b  This language represents a boolean as an integer where false is represented as a value of zero and true by a non-zero value.
^c  All values evaluate to either true or false. Everything in TrueClass evaluates to true and everything in FalseClass evaluates to false.
^d This language does not have a separate character type. Characters are represented as strings of length 1.
^e  Enumerations in this language are algebraic types with only nullary constructors

Derived types

Array

fixed size array dynamic size array
one-dimensional array multi-dimensional array one-dimensional array multi-dimensional array
C (C99) [a] [a]
C++ (STL) «std::»vector<type>
C# type[size] type[size1, size2,...] System.Collections.ArrayList
or
System.Collections.Generic.List<type>
Java type[size][b] type[size1][size2]...[b] ArrayList or ArrayList<type>
Objective-C NSMutableArray
JavaScript N/A N/A Array[d]
Common Lisp
Scheme
Pascal array[first..last] of type[c] array[first1..last1] of array[first2..last2] ... of type [c]

or
array[first1..last1, first2..last2, ...] of type [c]

N/A N/A
Object Pascal (Delphi) array of type array of array ... of type
Visual Basic
Visual Basic .NET System.Collections.ArrayList
or
System.Collections.Generic.List(Of type)
Python list
S-Lang
FORTRAN 77
PHP array
Perl
Ruby Array
Windows PowerShell type[] type[,,...]
OCaml type array type array ... array
F# type [] or type array type [,,...] System.Collections.ArrayList
or
System.Collections.Generic.List<type>
Standard ML type vector or type array
Haskell (GHC)

^a In most expressions (except the sizeof and & operators), values of array types in C are automatically converted to a pointer of its first argument. Also C's arrays can not be described in this format. See C syntax#Arrays.
^b  The C-like "type x[]" works in Java, however "type[] x" is the preferred form of array declaration.
^c  Subranges are use to define the bounds of the array.
^d  JavaScript's array are a special kind of object.

Other types

Simple composite types Algebraic data types Unions
Records Tuple expression
C (C99) struct «name» {type name;...}; N/A N/A union {type name;...};
Objective-C
C++ N/A[a][b] N/A
C# struct name {type name;...} N/A
Java N/A[a]
JavaScript N/A
Common Lisp (cons val1 val2)[c]
Scheme N/A
Pascal record
name: type;
...
end
N/A N/A record
case type of
value: (types);
...
end
Visual Basic
Visual Basic .NET Structure name
Dim name As type
...
End Structure
Python N/A[a] «(»val1, val2, val3, ... «)» N/A
S-Lang struct {name [=value], ...}
FORTRAN 77
PHP N/A[a]
Perl N/A[d] N/A
Ruby OpenStruct.new({:name => value})
Windows PowerShell
OCaml type name = {«mutable» name : type;...} «(»val1, val2, val3, ... «)» type name = Foo «of type» | Bar «of type» | ... N/A
F#
Standard ML type name = {name : type,...} (val1, val2, val3, ... ) datatype name = Foo «of type» | Bar «of type» | ...
Haskell data Name = Constr {name :: type,...} data Name = Foo «types» | Bar «types» | ...

^a  Only classes are supported.
^b  structs in C++ are actually classes, but POD objects are in fact records.
^c  pair only
^d  Although Perl doesn't have records, because Perl's type system allows different data types to be in an array, "hashes" (associative arrays) that don't have a variable index would effectively be the same as records.
^e  Enumerations in this language are algebraic types with only nullary constructors

Declarations

variable constant type synonym
C (C99) type name «= initial_value»; enum{ name = value }; typedef type synonym;
Objective-C
C++ const type name = value;
C# type name «= initial_value»;
var name = value;
using synonym = type;
Java type name «= initial_value»; final type name = value; N/A
JavaScript var name «= initial_value»; const name = value;
Common Lisp (defparameter name initial_value) (defconstant name value) (deftype synonym () 'type)
Scheme (define name initial_value)
Pascal[a] name: type «= initial_value» name = value synonym = type
Visual Basic Dim name As type Const name As type = value
Visual Basic .NET Dim name As type«= initial_value» Imports synonym = type
Python name = initial_value N/A synonym = type[b]
S-Lang name = initial_value; typedef struct {...} typename
FORTRAN 77 type name
PHP $name = initial_value; define("name", value);
const name = value (5.3+)
N/A
Perl «my» $name «= initial_value»;[c] use constant name => value;
Ruby name = initial_value synonym = type[b]
Windows PowerShell «[type]» $name = initial_value
OCaml let name «: type ref» = ref value[d] let name «: type» = value type synonym = type
F# let mutable name «: type» = value
Standard ML val name «: type ref» = ref value[d] val name «: type» = value
Haskell «name::type;» name = value type Synonym = type

^a  Pascal has declaration blocks. See Comparison of programming languages (basic instructions)#Functions.
^b Types are just regular objects, so you can just assign them.
^c  In Perl, the "my" keyword scopes the variable into the block.
^d  Technically, this does not declare name to be a mutable variable -- in ML, all names can only be bound once; rather, it declares name to point to a "reference" data structure, which is a simple mutable cell. The data structure can then be read and written to using the ! and := operators, respectively.

Control flow

Conditional statements

if else if select case conditional expression
C (C99) if (condition) {instructions}
«else {instructions}»
if (condition) {instructions}
else if (
condition) {instructions}
...
«else {instructions}»
switch (variable) {
case case1: instructions «break;»
...
«default: instructions»
}
condition ? valueIfTrue : valueIfFalse
Objective-C
C++ (STL)
Java
JavaScript
PHP
C# switch (variable) {
case case1: instructions; «jump statement;»
...
«default: instructions; «jump statement;»»
}
Windows PowerShell if (condition) { instructions }
elseif (
condition) { instructions }
...
«else { instructions }»
switch (variable) { case1 { instructions «break;» ... «default { instructions }»}
Perl if (condition) {instructions}
«else {instructions}»
or
unless (notcondition) {instructions}
«else {instructions}»
if (condition) {instructions}
elsif (
condition) {instructions}
...
«else {instructions}»
or
unless (notcondition) {instructions}
elsif (
condition) {instructions}
...
«else {instructions}»
use feature "switch";
...
given (variable) {
when (case1) { instructions }
...
«default { instructions }»
}
condition ? valueIfTrue : valueIfFalse
Ruby if condition
instructions
«else
instructions»
end
if condition
instructions
elsif condition
instructions
...
«else
instructions»
end
case variable
when case1
instructions
...
«else
instructions»
end
Common Lisp (when condition instructions) or
(if condition (progn instructions) «(progn instructions)»)
(cond (condition1 instructions) (condition2 instructions) ... «(t instructions)») (case (variable) (case1 instructions) (case2 instructions) ... «(t instructions)») (if condition valueIfTrue valueIfFalse)
Scheme (when condition instructions) or
(if condition (begin instructions) «(begin instructions)»)
(cond (condition1 instructions) (condition2 instructions) ... «(else instructions)») (case (variable) ((case1) instructions) ((case2) instructions) ... «(else instructions)»)
Pascal if condition then begin
instructions
end
«else begin
instructions
end»[c]
if condition then begin
instructions
end
else if
condition then begin
instructions
end
...
«else begin
instructions
end»[c]
case variable of
case1: instructions
...
«else: instructions»
end[c]
Oberon-2 IF condition THEN
instructions
«ELSE
instructions»
END[c]
IF condition THEN
instructions
ELSIF condition THEN
instructions
«ELSE
instructions»
END
CASE expression
OF case1a , case1b :
instructions
| case2a , case2b :
instructions
...
«ELSE
instructions»
END
Visual Basic If condition Then
instructions
«Else
instructions»
End If
If condition Then
instructions
ElseIf condition Then
instructions
...
«Else
instructions»
End If
Select Case variable
Case case1
instructions
...
«Case Else
instructions»
End Select
IIf(condition, valueIfTrue, valueIfFalse)
Visual Basic .NET If(condition, valueIfTrue, valueIfFalse)
Python [a] if condition :
Tab instructions
«else:
Tab instructions»
if condition :
Tab instructions
elif condition :
Tab instructions
...
«else:
Tab instructions»
N/A valueIfTrue if condition else valueIfFalse
(Python 2.5+)
S-Lang if (condition) { instructions } «else { instructions }» if (condition) { instructions } else if (condition) { instructions } ... «else { instructions }» switch (variable) { case case1: instructions } { case case2: instructions } ...
FORTRAN 77 IF condition THEN
instructions
«ELSE
instructions»
ENDIF
IF condition THEN
instructions
ELSEIF
condition THEN
instructions
...
«ELSE
instructions»
ENDIF
     index = f(variable)
     GOTO ( c1, c2, ... cn) index
...
c1  instructions
Forth condition IF instructions « ELSE instructions» THEN condition IF instructions ELSE condition IF instructions THEN THEN value CASE
case OF instructions ENDOF
case OF instructions ENDOF
     default instructions
ENDCASE
condition IF valueIfTrue ELSE valueIfFalse THEN
OCaml if condition then begin instructions end «else begin instructions end» if condition then begin instructions end else if condition then begin instructions end ... «else begin instructions end» match value with
pattern1 -> expression
|
pattern2 -> expression
...
«| _ -> expression»[b]
if condition then valueIfTrue else valueIfFalse
F# if condition then
Tab instructions
«else
Tab instructions»
if condition then
Tab instructions
elif condition then
Tab instructions
...
«else
Tab instructions»
Standard ML if condition then «(»instructions «)»
else «(» instructions «)»
if condition then «(»instructions «)»
else if condition then «(» instructions «)»
...
else «(» instructions «)»
case value of
pattern1 => expression
|
pattern2 => expression
...
«| _ => expression»[b]
Haskell (GHC) if condition then expression else expression or
when condition (do instructions) or
unless notcondition (do instructions)
result | condition = expression
| condition = expression
| otherwise = expression
case value of {
pattern1 -> expression;
pattern2 -> expression;
...
«_ -> expression»
}[b]
if else if select case conditional expression

^a  A single instruction can be written on the same line following the colon. Multiple instructions are grouped together in a block which starts on a newline (The indentation in required). The conditional expression syntax does not follow this rule.
^b  This is pattern matching and is similar to select case but not the same. It is usually used to deconstruct algebraic data types.
^c  In languages of the Pascal family, the semicolon is not part of the statement. It is a separator between statements, not a terminator.

Loop statements

while do while for i = first to last foreach
C (C99) while (condition) { instructions } do { instructions } while (condition) for («type» i = first; i <= last; ++i) { instructions } N/A
Objective-C for (type item in set) { instructions }
C++ (STL) «std::»for_each(start, end, function)
C# foreach (type item in set) { instructions }
Java for (type item : set) { instructions }
JavaScript for (var i = first; i <= last; i++) { instructions } for (var property in object) { instructions }
PHP foreach (range(first, last-1) as $i) { instructions } or
for ($i = first; $i <= last; $i++) { instructions }
foreach (set as item) { instructions }
or
foreach (set as key => item) { instructions }
Windows PowerShell for ($i = first; $i -le last; $i++) { instructions } foreach (item in set) { instructions using item }
Perl while (condition) { instructions } or
until (notcondition) { instructions }
do { instructions } while (condition) or
do { instructions } until (notcondition)
for«each» «$i» (0 .. N-1) { instructions } or
for ($i = first; $i <= last; $i++) { instructions }
for«each» «$item» (set) { instructions }
Ruby while condition
instructions
end
or
until notcondition
instructions
end
begin
instructions
end while condition
or
begin
instructions
end until notcondition
for i in first...last
instructions
end
or
first.upto(last-1) { |i| instructions }
for item in set
instructions
end
or
set.each { |item| instructions }
Common Lisp (loop while condition do instructions) or
(do () (notcondition) instructions)
(loop do instructions while condition) (loop for i from first to last do instructions) or
(dotimes (i N) instructions) or
(do ((i first (1+ i))) ((>= i last)) instructions)
(loop for item in set do instructions) or
(dolist (item set) instructions)
Scheme (do () (notcondition) instructions) or
(let loop () (if condition (begin instructions (loop))))
(let loop () (instructions (if condition (loop)))) (do ((i first (+ i 1))) ((>= i last)) instructions) or
(let loop ((i first)) (if (< i last) (begin instructions (loop (+ i 1)))))
(for-each (lambda (item) instructions) list)
Pascal while condition do begin
instructions
end
repeat
instructions
until notcondition;
for i := first «step 1» to last do begin
instructions
end;[a]
N/A
Visual Basic Do While condition
instructions
Loop
or
Do Until notcondition
instructions
Loop
Do
instructions
Loop While condition
or
Do
instructions
Loop Until notcondition
For i = first To last «Step 1»
instructions
Next i
For Each item In set
instructions
Next item
Visual Basic .NET For i «As type» = first To last «Step 1»
instructions
Next i[a]
For Each item As type In set
instructions
Next item
Python while condition :
Tab instructions
«else:
Tab instructions»
N/A for i in range(first, last):
Tab instructions
«else:
Tab instructions»
for item in set:
Tab instructions
«else:
Tab instructions»
S-Lang while (condition) { instructions } «then optional-block» do { instructions } while (condition) «then optional-block» for (i = first; i < last; i++) { instructions } «then optional-block» foreach item(set) «using (what)» { instructions } «then optional-block»
FORTRAN 77 N/A DO nnnn I = first,last
instructions
nnnn CONTINUE
N/A
Forth BEGIN « instructions » condition WHILE instructions REPEAT BEGIN instructions condition UNTIL limit start DO instructions LOOP N/A
OCaml while condition do instructions done N/A for i = first to last-1 do instructions done Array.iter (fun item -> instructions) array
List.iter (fun item -> instructions) list
F# while condition do
Tab instructions
N/A for i = first to last-1 do
Tab instructions
for item in set do
Tab instructions
or
Seq.iter (fun item -> instructions) set
Standard ML while condition do ( instructions ) N/A Array.app (fn item => instructions) array
app (fn item => instructions) list
Haskell (GHC) N/A Control.Monad.forM_ [0..N-1] (\i -> do instructions) Control.Monad.forM_ list (\item -> do instructions)
Eiffel from
setup
until
condition
loop
instructions
end

^a  "step n" is used to change the loop interval. If "step" is omitted, then the loop interval is 1.

Exceptions

throw handler assertion
C (C99) longjmp(state, exception); switch (setjmp(state)) { case 0: instructions break; case exception: instructions ... } assert(condition);
C++ (STL) throw exception; try { instructions } catch «(exception)» { instructions } ...
C# try { instructions } catch «(exception)» { instructions } ... «finally { instructions }» Debug.Assert(condition);
Java try { instructions } catch (exception) { instructions } ... «finally { instructions }» assert condition;
JavaScript try { instructions } catch (exception) { instructions } «finally { instructions }» ?
PHP try { instructions } catch (exception) { instructions } ... assert(condition);
S-Lang try { instructions } catch «exception» { instructions } ... «finally { instructions }» ?
Windows PowerShell trap «[exception]» { instructions } ... instructions [Debug]::Assert(condition)
Objective-C @throw exception; @try { instructions } @catch (exception) { instructions } ... «@finally { instructions }» NSAssert(condition, description);
Perl die exception; eval { instructions }; if ($@) { instructions } ?
Ruby raise exception begin
instructions
rescue exception
instructions
...
«else
instructions»
«ensure
instructions»
end
Common Lisp (error exception) (handler-case (progn instructions) (exception instructions) ...) ?
Scheme (R6RS) (raise exception) (guard (con (condition instructions) ...) instructions) ?
Pascal raise Exception.Create() try Except on E: exception do begin instructions end; end; ?
Visual Basic N/A ?
Visual Basic .NET Throw exception Try
instructions
Catch «exception» «When condition»
instructions
...
«Finally
instructions»
End Try
Debug.Assert(condition)
Python raise exception try:
Tab instructions
except «exception»:
Tab instructions
...
«else:
Tab instructions»
«finally:
Tab instructions»
assert condition
FORTRAN 77 N/A ?
Forth code THROW xt CATCH ( code or 0 ) N/A
OCaml raise exception try expression with pattern -> expression ... assert condition
F# try expression with pattern -> expression ...
or
try expression finally expression
Standard ML raise exception «arg» expression handle pattern => expression ...
Haskell (GHC) throw exception
or
throwError expression
catch tryExpression catchExpression
or
catchError tryExpression catchExpression
assert condition expression

Other control flow statements

exit block(break) continue label branch (goto) return value from generator
C (C99) break; continue; label: goto label; N/A
Objective-C
C++ (STL)
C# yield return value;
Java break «label»; continue «label»; N/A
JavaScript yield value«;»
PHP break «levels»; continue «levels»; goto label; return() ;
Perl last «label»; next «label»;
Common Lisp (return) or
(return-from block)
(go tag)
Scheme
Pascal(ISO) N/A label:[a] goto label; N/A
Pascal(FPC) break; continue;
Visual Basic Exit block N/A label: GoTo label
Visual Basic .NET Continue block
Python break continue N/A yield value
S-Lang break; continue;
FORTRAN 77 N/A a number in columns 1 to 5 GOTO label N/A
Ruby break next
Windows PowerShell break« label» continue
OCaml N/A
F#
Standard ML
Haskell (GHC)

^a  Pascal has declaration blocks. See Comparison of programming languages (basic instructions)#Functions.

Functions

See reflection for calling and declaring functions by strings.

calling a function basic/void function value-returning function required main function
C (C99) foo(«parameters»); void foo(«parameters») { instructions } type foo(«parameters») { instructions ... return value; } «global declarations»
int main(«int argc, char *argv[]») {
instructions
}
Objective-C
C++ (STL)
C# static void Main(«string[] args») { instructions } or
static int Main(«string[] args») { instructions }
Java public static void main(String[] args) { instructions } or
public static void main(String... args) { instructions }
JavaScript function foo(«parameters») { instructions } or
var foo = function («parameters») {instructions } or
var foo = new Function («"parameter", ... ,"last parameter"» "instructions");
function foo(«parameters») { instructions ... return value; } N/A
Common Lisp (foo «parameters») (defun foo (parameters) instructions) (defun foo (parameters) instructions... return_value)
Scheme (define (foo parameters) instructions) or
(define foo (lambda (parameters) instructions))
(define (foo parameters) instructions... return_value) or
(define foo (lambda (parameters) instructions... return_value))
Pascal foo«(parameters)» procedure foo«(parameters)»; «forward;»[a]
«label
label declarations»
«const
constant declarations»
«type
type declarations»
«var
variable declarations»
«local function declarations»
begin
instructions
end;
function foo«(parameters)»: type; «forward;»[a]
«label
label declarations»
«const
constant declarations»
«type
type declarations»
«var
variable declarations»
«local function declarations»
begin
instructions;
foo :=
value
end;
program name;
«label
label declarations»
«const
constant declarations»
«type
type declarations»
«var
variable declarations»
«function declarations»
begin
instructions
end.
Visual Basic Foo(«parameters») Sub Foo(«parameters»)
instructions
End Sub
Function Foo(«parameters») As type
instructions
Foo = value
End Function
Sub Main()
instructions
End Sub
Visual Basic .NET Function Foo(«parameters») As type
instructions
Return value
End Function
Sub Main(«ByVal CmdArgs() As String»)
instructions
End Sub
or
Function Main(«ByVal CmdArgs() As String») As Integer
instructions
End Function
Python foo(«parameters») def foo(«parameters»):
Tab instructions
def foo(«parameters»):
Tab instructions
Tab return value
N/A
S-Lang foo(«parameters» «;qualifiers») define foo («parameters») { instructions } define foo («parameters») { instructions ... return value; } public define slsh_main () { instructions }
FORTRAN 77 SUBROUTINE FOO«(parameters)»
instructions
END
type FUNCTION FOO«(parameters)»
instructions
FOO = value
END
PROGRAM main
Forth «parameters» FOO : FOO « stack effect comment: ( before -- after ) »
instructions
 ;
N/A N/A
PHP foo(«parameters») function foo(«parameters») { instructions } function foo(«parameters») { instructions ... return value; } N/A
Perl foo(«parameters») or
&foo«(parameters)»
sub foo { «my (parameters) = @_;» instructions } sub foo { «my (parameters) = @_;» instructions... «return» value; }
Ruby foo«(parameters)» def foo«(parameters)»
instructions
end
def foo«(parameters)»
instructions
«return» value
end
Windows PowerShell function foo «(parameters)» { instructions }; or
function foo { «param(parameters)» instructions }
function foo «(parameters)» { instructions … return value }; or
function foo { «param(parameters)» instructionsreturn value }
OCaml foo parameters let «rec» foo parameters = instructions let «rec» foo parameters = instructions... return_value
F# [<EntryPoint>] let main args = instructions
Standard ML fun foo parameters = ( instructions ) fun foo parameters = ( instructions... return_value )
Haskell foo parameters = do
Tab instructions
foo parameters = return_value
or
foo parameters = do
Tab instructions
Tab return value
«main :: IO ()»
main = do instructions
Eiffel foo («parameters») foo («parameters»)
require
preconditions
do
instructions
ensure
postconditions
end
foo («parameters»): type
require
preconditions
do
instructions
Result := value
ensure
postconditions
end
[b]

^a  Pascal requires "forward;" for forward declarations.
^b  Eiffel allows the specification of an application's root class and feature.

Type conversions

Where string is a signed decimal number:

string to integer string to long integer string to floating point integer to string floating point to string
C (C99) integer = atoi(string); long = atol(string); float = atof(string); sprintf(string, "%i", integer); sprintf(string, "%f", float);
Objective-C integer = [string intValue]; long = [string longLongValue]; float = [string doubleValue]; string = [NSString stringWithFormat:@"%i", integer]; string = [NSString stringWithFormat:@"%f", float];
C++ (STL) «std::»istringstream(string) >> number; «std::»ostringstream o; o << number; string = o.str();
C# integer = int.Parse(string); long = long.Parse(string); float = float.Parse(string); or
double = double.Parse(string);
string = number.ToString();
Java integer = Integer.parseInt(string); long = Long.parseLong(string); float = Float.parseFloat(string); or
double = Double.parseDouble(string);
string = Integer.toString(integer); string = Float.toString(float); or
string = Double.toString(double);
JavaScript[a] integer = parseInt(string); float = parseFloat(string); or
float = new Number (string) or
float = string*1;
N/A string = number.toString (); or
string = new String (number); or
string = number+"";
Common Lisp (setf integer (parse-integer string)) (setf float (read-from-string string)) (setf string (princ-to-string number))
Scheme (define number (string->number string)) (define string (number->string number))
Pascal integer := StrToInt(string); float := StrToFloat(string); string := IntToStr(integer); string := FloatToStr(float);
Visual Basic integer = CInt(string) long = CLng(string) float = CSng(string) or
double = CDbl(string)
string = CStr(number)
Visual Basic .NET
Python integer = int(string) long = long(string) float = float(string) string = str(number)
S-Lang integer = atoi(string); long = atol(string); float = atof(string); string = string(number);
FORTRAN 77 READ(string,format) integer N/A READ(string,format) float WRITE(string,format) number
PHP integer = intval(string); or
integer = (int)string;
float = floatval(string); or
float = (float)string;
string = "number"; or
string = strval(number); or
string = (string)number;
Perl[b] number = 0 + string; string = "$number";
Ruby integer = string.to_i float = string.to_f string = number.to_s
Windows PowerShell integer = [int]string long = [long]string float = [float]string string = [string]number; or
string = "number"; or
string = (number).ToString()
OCaml let integer = int_of_string string let float = float_of_string string let string = string_of_int integer let string = string_of_float float
F# let integer = int string let integer = int64 string let float = float string let string = string number
Standard ML val integer = Int.fromString string val float = Real.fromString string val string = Int.toString integer val string = Real.toString float
Haskell (GHC) number = read string string = show number

^a  JavaScript only uses floating point numbers so there are some technicalities.[2]
^b  Perl doesn't have separate types. Strings and numbers are interchangeable.

Standard Input and Standard Output

read from write to
stdin stdout stderr
C (C99) scanf(format, &x); or
fscanf(stdin, format, &x); [a]
printf( format, x); or
fprintf(stdout, format, x); [b]
fprintf(stderr, format, x );[c]
Objective-C
C++ «std::»cin >> x; or
«std::»getline(«std::»cin, str);
«std::»cout << x; «std::»cerr << x; or
«std::»clog << x;
C# x = Console.Read(); or
x = Console.ReadLine();
Console.Write(«format, »x); or
Console.WriteLine(«format, »x);
Console.Error.Write(«format, »x); or
Console.Error.WriteLine(«format, »x);
Java x = System.in.read(); or
x = new Scanner(System.in).nextInt(); or
x = new Scanner(System.in).nextLine();
System.out.print(x); or
System.out.printf(format, x); or
System.out.println(x);
System.err.print(x); or
System.err.printf(format, x); or
System.err.println(x);
JavaScript
Web Browser implementation
document.write(x)
JavaScript
Active Server Pages
Response.Write(x)
JavaScript
Windows Script Host
x = WScript.StdIn.Read(chars) or
x = WScript.StdIn.ReadLine()
WScript.Echo(x) or
WScript.StdOut.Write(x) or
WScript.StdOut.WriteLine(x)
WScript.StdErr.Write(x) or
WScript.StdErr.WriteLine(x)
Common Lisp (setf x (read-line)) (princ x) or
(format t format x)
(princ x *error-output*) or
(format *error-output* format x)
Scheme (R6RS) (define x (read-line)) (display x) or
(format #t format x)
(display x (current-error-port)) or
(format (current-error-port) format x)
Pascal read(x); or
readln(x);
write(x); or
writeln(x);
N/A
Visual Basic Input« prompt,» x Print x or
? x
Visual Basic .NET x = Console.Read() or
x = Console.ReadLine()
Console.Write(«format, »x) or
Console.WriteLine(«format, »x)
Console.Error.Write(«format, »x) or
Console.Error.WriteLine(«format, »x)
Python 2.x x = raw_input(«prompt») print x or
sys.stdout.write(x)
print >> sys.stderr, x or
sys.stderr.write(x)
Python 3.x x = input(«prompt») print(, end=""») print(, end=""», file=sys.stderr)
S-Lang fgets (&x, stdin) fputs (x, stdout) fputs (x, stderr)
FORTRAN 77 READ(5,format) variable names WRITE(6,format) expressions N/A
Forth buffer length ACCEPT ( # chars read )
KEY ( char )
buffer length TYPE
char EMIT
N/A
PHP $x = fgets(STDIN); or
$x = fscanf(STDIN, format);
print x; or
echo x; or
printf(format, x);
fprintf(STDERR, format, x);
Perl $x = <>; or
$x = <STDIN>;
print x; or
printf format, x;
print STDERR x; or
printf STDERR format, x;
Ruby x = gets puts x or
printf(format, x)
$stderr.puts(x) or
$stderr.printf(format, x)
Windows PowerShell $x = Read-Host«« -Prompt» text»; or
$x = [Console]::Read(); or
$x = [Console]::ReadLine()
x; or
Write-Output x; or
echo x
Write-Error x
OCaml let x = read_int () or
let str = read_line () or
Scanf.scanf format (fun x ... -> ...)
print_int x or
print_endline str or
Printf.printf format x ...
prerr_int x or
prerr_endline str or
Printf.eprintf format x ...
F# let x = System.Console.ReadLine() printf format x ... or
printfn format x ...
eprintf format x ... or
eprintfn format x ...
Standard ML val str = TextIO.inputLIne TextIO.stdIn print str TextIO.output (TextIO.stdErr, str)
Haskell (GHC) x <- readLn or
str <- getLine
print x or
putStrLn str
hPrint stderr x or
hPutStrLn stderr str

^a  gets(x) and fgets(x, length, stdin) read unformatted text from stdin. Use of gets is not recommended.
^b  puts(x) and fputs(x, stdout) write unformatted text to stdout.
^c  fputs(x, stderr) writes unformatted text to stderr

Reading command-line arguments

Argument values Argument counts Program name / Script name
C (C99) argv[n] argc first argument
Objective-C
C++
C# args[n] args.Length Assembly.GetEntryAssembly().Location;
Java args.length
JavaScript
Windows Script Host implementation
WScript.Arguments(n) WScript.Arguments.length ?
Common Lisp ? ? ?
Scheme (R6RS) (list-ref (command-line) n) (length (command-line)) first argument
Pascal ParamStr(n) ParamCount first argument
Visual Basic Command N/A ?
Visual Basic .NET CmdArgs(n) CmdArgs.Length [Assembly].GetEntryAssembly().Location
Python sys.argv[n] len(sys.argv) first argument
S-Lang __argv[n] __argc first argument
FORTRAN 77 N/A ?
PHP $argv[n] $argc first argument
Perl $ARGV[n] scalar(@ARGV) $0
Ruby ARGV[n] ARGV.size $0
Windows PowerShell $args[n] $args.Length $MyInvocation.MyCommand.Name
OCaml Sys.argv.(n) Array.length Sys.argv first argument
F# args.[n] args.Length Assembly.GetEntryAssembly().Location
Standard ML List.nth (CommandLine.arguments (), n) length (CommandLine.arguments ()) CommandLine.name ()
Haskell (GHC) do { args <- System.getArgs; return args !! n } do { args <- System.getArgs; return length args } System.getProgName

Execution of commands

Shell command Execute program
C system("command"); execl(path, args); or
execv(path, arglist);
C++
C# System.Diagnostics.Process.Start(path, argstring);
F#
Visual Basic Interaction.Shell(command «WindowStyle» «isWaitOnReturn»)
Visual Basic .NET Microsoft.VisualBasic.Interaction.Shell(command «WindowStyle» «isWaitOnReturn») System.Diagnostics.Process.Start(path, argstring)
Java Runtime.exec(command); or
new ProcessBuilder(command).start();
JavaScript
Windows Script Host implementation
WScript.CreateObject ("WScript.Shell").Run(command «WindowStyle» «isWaitOnReturn»);
Common Lisp (shell command)
Scheme (system command)
Pascal system(command);
OCaml Sys.command command, Unix.open_process_full command env (stdout, stdin, stderr),... Unix.execv prog args, Unix.execve prog args env, Unix.create_process prog args new_stdin new_stdout new_stderr, ...
Standard ML OS.Process.system command
Haskell (GHC) System.system command
Perl system(command) or
$output = `command`
exec(path, args)
Ruby system(command) or
output = `command`
exec(path, args)
PHP system(command) or
output = `command`
exec(command)
Python os.system(command) or
subprocess.Popen(command)
os.execv(path, args)
S-Lang system(command)
Windows PowerShell [Diagnostics.Process]::Start(command) «Invoke-Item »program arg1 arg2 …

References


Search unanswered questions...
Enter a question here...
Search: All sources Community Q&A Reference topics
 
 

 

Copyrights:

Wikipedia. This article is licensed under the Creative Commons Attribution/Share-Alike License. It uses material from the Wikipedia article "Comparison of programming languages (basic instructions)" Read more