Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Chapi source code modeling

Goal: source code data model for different language & different language family from Language support

Language Higher-order functions Nested functions Non-local variables Notes
Arguments Results Named Anonymous Closures Partial application
Algol family ALGOL 60 Yes No Yes No Downwards No Have function types.
ALGOL 68 Yes Yes[8] Yes Yes Downwards[9] No
Pascal Yes No Yes No Downwards No
Ada Yes No Yes No Downwards No
Oberon Yes Non-nested only Yes No Downwards No
Delphi Yes Yes Yes 2009 2009 No
C family C Yes Yes No No No No Has function pointers.
C++ Yes Yes C++11[10] C++11[11] C++11[11] C++11 Has function pointers, function objects. (Also, see below.)

Explicit partial application possible with std::bind.

C# Yes Yes 7 2.0 / 3.0 2.0 3.0 Has delegates (2.0) and lambda expressions (3.0).
Objective-C Yes Yes Using anonymous 2.0 + Blocks[12] 2.0 + Blocks No Has function pointers.
Java Partial Partial Using anonymous Java 8 Java 8 No Has anonymous inner classes.
Go Yes Yes Using anonymous Yes Yes Yes[13]
Limbo Yes Yes Yes Yes Yes No
Newsqueak Yes Yes Yes Yes Yes No
Rust Yes Yes Yes Yes Yes No
Functional languages Lisp Syntax Syntax Yes Yes Common Lisp No (see below)
Scheme Yes Yes Yes Yes Yes SRFI 26[14]
Julia Yes Yes Yes Yes Yes Yes
Clojure Yes Yes Yes Yes Yes Yes
ML Yes Yes Yes Yes Yes Yes
Haskell Yes Yes Yes Yes Yes Yes
Scala Yes Yes Yes Yes Yes Yes
F# Yes Yes Yes Yes Yes Yes
OCaml Yes Yes Yes Yes Yes Yes
Scripting languages JavaScript Yes Yes Yes Yes Yes ECMAScript 5 Partial application possible with user-land code on ES3 [15]
Lua Yes Yes Yes Yes Yes Yes[16]
PHP Yes Yes Using anonymous 5.3 5.3 No Partial application possible with user-land code.
Perl Yes Yes 6 Yes Yes 6[17]
Python Yes Yes Yes Expressions only Yes 2.5[18] (see below)
Ruby Syntax Syntax Unscoped Yes Yes 1.9 (see below)
Other languages Fortran Yes Yes Yes No No No
Io Yes Yes Yes Yes Yes No
Maple Yes Yes Yes Yes Yes No
Mathematica Yes Yes Yes Yes Yes No
MATLAB Yes Yes Yes Yes[19] Yes Yes Partial application possible by automatic generation of new functions.[20]
Smalltalk Yes Yes Yes Yes Yes Partial Partial application possible through library.
Swift Yes Yes Yes Yes Yes Yes