A list and count of keywords in programming languages. Based on work originally compiled by @leighmcculloch and contributors.
2022 update (WIP): I took the latest versions of several popularity lists and am ensuring the top 10 in all three lists were on this list. There have been some pretty significant changes in the past couple of years, including the addition of some soft or contextual keywords in Python 3 and Java, increasing their keyword counts significantly.
In addition to the above, I migrated CI to GitHub Actions and am working to ensure multiple language versions with different keyword sets are represented.
The number of keywords in a programming language can be an indication to it's simplicity/complexity, and that can impact the simplicity/complexity of the solutions that developers produce using it. Complex solutions can be more expensive to maintain and difficult to hire for. However, this is dependent on many factors and keyword count is only one; language idioms also play a massive part.
Source code in this repository is licensed under the MIT License.
Compiled data in this repository is licensed under the Creative Commons Attribution 4.0 International Public License.
SPDX-License-Identifier: MIT AND CC-BY-4.0
Don't see a language here? Please open a pull request adding it!
- C (ANSI (C89)) (32 keywords)
- C (C11) (44 keywords)
- C (C17) (44 keywords)
- C (C99) (37 keywords)
- C# (8.0) (107 keywords)
- C++ (C++03) (74 keywords)
- C++ (C++11) (84 keywords)
- C++ (C++14) (84 keywords)
- C++ (C++17) (84 keywords)
- C++ (C++20) (92 keywords)
- C++ (C++98) (74 keywords)
- Dart (2.2) (33 keywords)
- Elixir (1.10) (15 keywords)
- Erlang (23) (27 keywords)
- Fortran (Fortran 2008) (103 keywords)
- Go (1.18) (25 keywords)
- Java (SE 11 LTS) (51 keywords)
- Java (SE 17 LTS) (67 keywords)
- JavaScript (1st edition) (35 keywords)
- JavaScript (2nd edition) (59 keywords)
- JavaScript (3rd edition) (59 keywords)
- JavaScript (5th edition) (45 keywords)
- JavaScript (6th edition) (46 keywords)
- Kotlin (1.4) (79 keywords)
- Lua (5.3) (22 keywords)
- MATLAB (R2020a) (20 keywords)
- Objective-C (2.0) (85 keywords)
- PHP (7.4) (69 keywords)
- Python 2 (2.7) (31 keywords)
- Python 3 (3.10) (38 keywords)
- R (4.0) (21 keywords)
- Ruby (2.7) (41 keywords)
- Rust (1.46) (53 keywords)
- Scala (2.13) (40 keywords)
- Swift (5.3) (97 keywords)
- Visual Basic (2019) (217 keywords)
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
int | long | register | return |
short | signed | sizeof | static |
struct | switch | typedef | union |
unsigned | void | volatile | while |
http://port70.net/~nsz/c/c89/c89-draft.html#3.1.1
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
inline | int | long | register |
restrict | return | short | signed |
sizeof | static | struct | switch |
typedef | union | unsigned | void |
volatile | while | _Alignas | _Alignof |
_Atomic | _Bool | _Complex | _Generic |
_Imaginary | _Noreturn | _Static_assert | _Thread_local |
https://www.open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
inline | int | long | register |
restrict | return | short | signed |
sizeof | static | struct | switch |
typedef | union | unsigned | void |
volatile | while | _Alignas | _Alignof |
_Atomic | _Bool | _Complex | _Generic |
_Imaginary | _Noreturn | _Static_assert | _Thread_local |
https://www.open-std.org/JTC1/SC22/WG14/www/docs/n2310.pdf
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
inline | int | long | register |
restrict | return | short | signed |
sizeof | static | struct | switch |
typedef | union | unsigned | void |
volatile | while | _Bool | _Complex |
_Imaginary |
https://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
abstract | as | base | bool |
break | byte | case | catch |
char | checked | class | const |
continue | decimal | default | delegate |
do | double | else | enum |
event | explicit | extern | false |
finally | fixed | float | for |
foreach | goto | if | implicit |
in | int | interface | internal |
is | lock | long | namespace |
new | null | object | operator |
out | override | params | private |
protected | public | readonly | ref |
return | sbyte | sealed | short |
sizeof | stackalloc | static | string |
struct | switch | this | throw |
true | try | typeof | uint |
ulong | unchecked | unsafe | ushort |
using | virtual | void | volatile |
while | add | alias | ascending |
async | await | by | descending |
dynamic | equals | from | get |
global | group | into | join |
let | nameof | notnull | on |
orderby | partial | remove | select |
set | unmanaged | value | var |
when | where | yield |
https://standards.iso.org/ittf/PubliclyAvailableStandards/c075178_ISO_IEC_23270_2018.zip
asm | auto | bool | break |
case | catch | char | class |
const | const_cast | continue | default |
delete | do | double | dynamic_cast |
else | enum | explicit | export |
extern | false | float | for |
friend | goto | if | inline |
int | long | mutable | namespace |
new | operator | private | protected |
public | register | reinterpret_cast | return |
short | signed | sizeof | static |
static_cast | struct | switch | template |
this | throw | true | try |
typedef | typeid | typename | union |
unsigned | using | virtual | void |
volatile | wchar_t | while | and |
and_eq | bitand | bitor | compl |
not | not_eq | or | or_eq |
xor | xor_eq |
http://staff.ustc.edu.cn/~zhuang/cpp/specs/ISO_IEC%2014882%202003.pdf
alignas | alignof | asm | auto |
bool | break | case | catch |
char | char_16t | char_32t | class |
const | constexpr | const_cast | continue |
decltype | default | delete | do |
double | dynamic_cast | else | enum |
explicit | export | extern | false |
float | for | friend | goto |
if | inline | int | long |
mutable | namespace | new | noexcept |
nullptr | operator | private | protected |
public | register | reinterpret_cast | return |
short | signed | sizeof | static |
static_assert | static_cast | struct | switch |
template | this | thread_local | throw |
true | try | typedef | typeid |
typename | union | unsigned | using |
virtual | void | volatile | wchar_t |
while | and | and_eq | bitand |
bitor | compl | not | not_eq |
or | or_eq | xor | xor_eq |
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf
alignas | alignof | asm | auto |
bool | break | case | catch |
char | char_16t | char_32t | class |
const | constexpr | const_cast | continue |
decltype | default | delete | do |
double | dynamic_cast | else | enum |
explicit | export | extern | false |
float | for | friend | goto |
if | inline | int | long |
mutable | namespace | new | noexcept |
nullptr | operator | private | protected |
public | register | reinterpret_cast | return |
short | signed | sizeof | static |
static_assert | static_cast | struct | switch |
template | this | thread_local | throw |
true | try | typedef | typeid |
typename | union | unsigned | using |
virtual | void | volatile | wchar_t |
while | and | and_eq | bitand |
bitor | compl | not | not_eq |
or | or_eq | xor | xor_eq |
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf
alignas | alignof | asm | auto |
bool | break | case | catch |
char | char16_t | char32_t | class |
const | constexpr | const_cast | continue |
decltype | default | delete | do |
double | dynamic_cast | else | enum |
explicit | export | extern | false |
float | for | friend | goto |
if | inline | int | long |
mutable | namespace | new | noexcept |
nullptr | operator | private | protected |
public | register | reinterpret_cast | return |
short | signed | sizeof | static |
static_assert | static_cast | struct | switch |
template | this | thread_local | throw |
true | try | typedef | typeid |
typename | union | unsigned | using |
virtual | void | volatile | wchar_t |
while | and | and_eq | bitand |
bitor | compl | not | not_eq |
or | or_eq | xor | xor_eq |
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf
alignas | alignof | asm | auto |
bool | break | case | catch |
char | char8_t | char16_t | char32_t |
class | concept | const | consteval |
constexpr | constinit | const_cast | continue |
co_await | co_return | co_yield | decltype |
default | delete | do | double |
dynamic_cast | else | enum | explicit |
export | extern | false | float |
for | friend | goto | if |
inline | int | long | mutable |
namespace | new | noexcept | nullptr |
operator | private | protected | public |
register | reinterpret_cast | requires | return |
short | signed | sizeof | static |
static_assert | static_cast | struct | switch |
template | this | thread_local | throw |
true | try | typedef | typeid |
typename | union | unsigned | using |
virtual | void | volatile | wchar_t |
while | and | and_eq | bitand |
bitor | compl | not | not_eq |
or | or_eq | xor | xor_eq |
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4849.pdf
asm | auto | bool | break |
case | catch | char | class |
const | const_cast | continue | default |
delete | do | double | dynamic_cast |
else | enum | explicit | export |
extern | false | float | for |
friend | goto | if | inline |
int | long | mutable | namespace |
new | operator | private | protected |
public | register | reinterpret_cast | return |
short | signed | sizeof | static |
static_cast | struct | switch | template |
this | throw | true | try |
typedef | typeid | typename | union |
unsigned | using | virtual | void |
volatile | wchar_t | while | and |
and_eq | bitand | bitor | compl |
not | not_eq | or | or_eq |
xor | xor_eq |
https://www.lirmm.fr/~ducour/Doc-objets/ISO+IEC+14882-1998.pdf
assert | break | case | catch |
class | const | continue | default |
do | else | enum | extends |
false | final | finally | for |
if | in | is | new |
null | rethrow | return | super |
switch | this | throw | true |
try | var | void | while |
with |
https://dart.dev/guides/language/specifications/DartLangSpec-v2.2.pdf
true | false | nil | when |
and | or | not | in |
fn | do | end | catch |
rescue | after | else |
https://hexdocs.pm/elixir/syntax-reference.html#reserved-words
after | and | andalso | band |
begin | bnot | bor | bsl |
bsr | bxor | case | catch |
cond | div | end | fun |
if | let | not | of |
or | orelse | receive | rem |
try | when | xor |
http://erlang.org/doc/reference_manual/introduction.html#reserved-words
abstract | allocatable | allocate | assign |
associate | asynchronous | backspace | bind |
block | block data | call | case |
class | close | codimension | common |
contains | contiguous | continue | critical |
cycle | data | deallocate | deferred |
dimension | do | do concurrent | elemental |
else | else if | elsewhere | end |
endfile | endif | entry | enum |
enumerator | equivalence | error stop | exit |
extends | external | final | flush |
forall | format | function | generic |
goto | if | implicit | import |
include | inquire | intent | interface |
intrinsic | lock | module | namelist |
non_overridable | nopass | nullify | only |
open | operator | optional | parameter |
pass | pause | pointer | |
private | procedure | program | protected |
public | pure | read | recursive |
result | return | rewind | rewrite |
save | select | sequence | stop |
submodule | subroutine | sync all | sync images |
sync memory | target | then | unlock |
use | value | volatile | wait |
where | while | write |
http://fortranwiki.org/fortran/show/Keywords
break | case | chan | const |
continue | default | defer | else |
fallthrough | for | func | go |
goto | if | import | interface |
map | package | range | return |
select | struct | switch | type |
var |
https://golang.org/ref/spec#Keywords
abstract | assert | boolean | break |
byte | case | catch | char |
class | const | continue | default |
do | double | else | enum |
extends | final | finally | float |
for | if | goto | implements |
import | instanceof | int | interface |
long | native | new | package |
private | protected | public | return |
short | static | strictfp | super |
switch | synchronized | this | throw |
throws | transient | try | void |
volatile | while | _ |
https://docs.oracle.com/javase/specs/jls/se11/html/jls-3.html#jls-3.9
abstract | assert | boolean | break |
byte | case | catch | char |
class | const | continue | default |
do | double | else | enum |
extends | final | finally | float |
for | if | goto | implements |
import | instanceof | int | interface |
long | native | new | package |
private | protected | public | return |
short | static | strictfp | super |
switch | synchronized | this | throw |
throws | transient | try | void |
volatile | while | _ | exports |
module | non-sealed | open | opens |
permits | provides | record | requires |
sealed | to | transitive | uses |
var | with | yield |
https://docs.oracle.com/javase/specs/jls/se17/html/jls-3.html#jls-3.9
break | continue | delete | else |
for | function | if | in |
new | return | this | typeof |
var | void | while | with |
case | catch | class | const |
debugger | default | do | enum |
export | extends | finally | import |
super | switch | throw | try |
null | true | false |
https://www.ecma-international.org/wp-content/uploads/ECMA-262_1st_edition_june_1997.pdf
break | continue | delete | else |
for | function | if | in |
new | return | this | typeof |
var | void | while | with |
abstract | boolean | byte | case |
catch | char | class | const |
debugger | default | do | double |
enum | export | extends | final |
finally | float | goto | implements |
import | instanceof | int | interface |
long | native | package | private |
protected | public | short | static |
super | switch | synchronized | throw |
throws | transient | try | volatile |
null | true | false |
https://www.ecma-international.org/wp-content/uploads/ECMA-262_2nd_edition_august_1998.pdf
break | case | catch | continue |
default | delete | do | else |
finally | for | function | if |
in | instanceof | new | return |
switch | this | throw | try |
typeof | var | void | while |
with | abstract | boolean | byte |
char | class | const | debugger |
double | enum | export | extends |
final | float | goto | implements |
import | int | interface | long |
native | package | private | protected |
public | short | static | super |
synchronized | throws | transient | volatile |
null | true | false |
https://www.ecma-international.org/wp-content/uploads/ECMA-262_3rd_edition_december_1999.pdf
break | case | catch | continue |
debugger | default | delete | do |
else | finally | for | function |
if | in | instanceof | new |
return | switch | this | throw |
try | typeof | var | void |
while | with | class | const |
enum | export | extends | import |
super | implements | interface | let |
package | private | protected | public |
static | yield | null | true |
false |
https://www.ecma-international.org/wp-content/uploads/ECMA-262_5th_edition_december_2009.pdf
break | case | catch | class |
const | continue | debugger | default |
delete | do | else | export |
extends | finally | for | function |
if | import | in | instanceof |
new | return | super | switch |
this | throw | try | typeof |
var | void | while | with |
yield | let | static | enum |
await | implements | interface | package |
private | protected | public | null |
true | false |
https://www.ecma-international.org/wp-content/uploads/ECMA-262_5th_edition_december_2009.pdf
as | as? | break | class |
continue | do | else | false |
for | fun | if | in |
!in | interface | is | !is |
null | object | package | return |
super | this | throw | true |
try | typealias | typeof | val |
var | when | while | by |
catch | constructor | delegate | dynamic |
field | file | finally | get |
import | init | param | property |
receiver | set | setparam | where |
actual | abstract | annotation | companion |
const | crossinline | data | enum |
expect | external | final | infix |
inline | inner | internal | lateinit |
noinline | open | operator | out |
override | private | protected | public |
reified | sealed | suspend | tailrec |
vararg | field | it |
https://kotlinlang.org/docs/reference/keyword-reference.html
and | break | do | else |
elseif | end | false | for |
function | goto | if | in |
local | nil | not | or |
repeat | return | then | true |
until | while |
https://www.lua.org/manual/5.3/manual.html#3.1
break | case | catch | classdef |
continue | else | elseif | end |
for | function | global | if |
otherwise | parfor | persistent | return |
spmd | switch | try | while |
https://www.mathworks.com/help/matlab/ref/iskeyword.html
asm | auto | break | case |
char | const | continue | default |
do | double | else | enum |
extern | float | for | goto |
if | inline | int | long |
register | restrict | return | short |
signed | sizeof | static | struct |
switch | typedef | union | unsigned |
void | volatile | while | _Bool |
_Complex | __block | Imaginary | id |
Class | SEL | IMP | BOOL |
nil | Nil | YES | NO |
self | super | _cmd | __strong |
__weak | __autoreleasing | __unsafe_unretained | oneway |
In | out | inout | bycopy |
byref | @autoreleasepool | @interface | @implementation |
@protocol | @end | @private | @protected |
@public | @package | @try | @throw |
@catch() | @finally | @property | @synthesize |
@dynamic | @class | @selector() | @protocol() |
@required | @optional | @encode | @"string" |
@synchronized() |
https://learning.oreilly.com/library/view/learning-objective-c-20/9780321712110/
__halt_compiler() | abstract | and | array() |
as | break | callable | case |
catch | class | clone | const |
continue | declare | default | die() |
do | echo | else | elseif |
empty() | enddeclare | endfor | endforeach |
endif | endswitch | endwhile | eval() |
exit() | extends | final | finally |
fn | for | foreach | function |
global | goto | if | implements |
include | include_once | instanceof | insteadof |
interface | isset() | list() | namespace |
new | or | private | |
protected | public | require | require_once |
return | static | switch | throw |
trait | try | unset() | use |
var | while | xor | yield |
yield from |
http://php.net/manual/en/reserved.keywords.php
and | as | assert | break |
class | continue | def | del |
elif | else | except | exec |
finally | for | from | global |
if | import | in | is |
lambda | not | or | pass |
raise | return | try | |
while | with | yield |
https://docs.python.org/2.7/reference/lexical_analysis.html#keywords
False | None | True | and |
as | assert | async | await |
break | class | continue | def |
del | elif | else | except |
finally | for | from | global |
if | import | in | is |
lambda | nonlocal | not | or |
pass | raise | return | try |
while | with | yield | match |
case | _ |
https://docs.python.org/3.10/reference/lexical_analysis.html#keywords https://docs.python.org/3.10/reference/lexical_analysis.html#keywords
... | ..1 | FALSE | Inf |
NA | NA_character_ | NA_complex_ | NA_integer_ |
NA_real_ | NaN | NULL | TRUE |
break | else | for | function |
if | in | next | repeat |
while |
https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Reserved-words
ENCODING | LINE | FILE | BEGIN |
END | alias | and | begin |
break | case | class | def |
defined? | do | else | elsif |
end | ensure | false | for |
if | in | module | next |
nil | not | or | redo |
rescue | retry | return | self |
super | then | true | undef |
unless | until | when | while |
yield |
https://docs.ruby-lang.org/en/2.7.0/keywords_rdoc.html
as | break | const | continue |
crate | else | enum | extern |
false | fn | for | if |
impl | in | let | loop |
match | mod | move | mut |
pub | ref | return | self |
Self | static | struct | super |
trait | true | type | unsafe |
use | where | while | async |
await | dyn | abstract | become |
box | do | final | macro |
override | priv | typeof | unsized |
virtual | yield | try | union |
'static |
https://doc.rust-lang.org/grammar.html#keywords
abstract | case | catch | class |
def | do | else | extends |
false | final | finally | for |
forSome | if | implicit | import |
lazy | macro | match | new |
null | object | override | package |
private | protected | return | sealed |
super | this | throw | trait |
try | true | type | val |
var | while | with | yield |
https://scala-lang.org/files/archive/spec/2.13/01-lexical-syntax.html
associatedtype | class | deinit | enum |
extension | fileprivate | func | import |
init | inout | internal | let |
open | operator | private | protocol |
public | rethrows | static | struct |
subscript | typealias | var | break |
case | continue | default | defer |
do | else | fallthrough | for |
guard | if | in | repeat |
return | switch | where | while |
as | Any | catch | false |
is | nil | super | self |
Self | throw | throws | true |
try | _ | #available | #colorLiteral |
#column | #else | #elseif | #endif |
#error | #file | #filePath | #fileLiteral |
#function | #if | #imageLiteral | #line |
#selector | #sourceLocation | #warning | associativity |
convenience | dynamic | didSet | final |
get | infix | indirect | lazy |
left | mutating | none | nonmutating |
optional | override | postfix | precedence |
prefix | Protocol | required | right |
set | Type | unowned | weak |
willSet |
https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html
AddHandler | AddressOf | Alias | And |
AndAlso | As | Boolean | ByRef |
Byte | ByVal | Call | Case |
Catch | CBool | CByte | CChar |
CDate | CDbl | CDec | Char |
CInt | Class | CLng | CObj |
Const | Continue | CSByte | CShort |
CSng | CStr | CType | CUInt |
CULng | CUShort | Date | Decimal |
Declare | Default | Delegate | Dim |
DirectCast | Do | Double | Each |
Else | ElseIf | End | EndIf |
Enum | Erase | Error | Event |
Exit | False | Finally | For |
For Each | Friend | Function | Get |
GetType | GetXMLNamespace | Global | GoSub |
GoTo | Handles | If | If() |
Implements | Imports | In | Inherits |
Integer | Interface | Is | IsNot |
Let | Lib | Like | Long |
Loop | Me | Mod | Module |
MustInherit | MustOverride | MyBase | MyClass |
NameOf | Namespace | Narrowing | New |
Next | Not | Nothing | NotInheritable |
NotOverridable | Object | Of | On |
Operator | Option | Optional | Or |
OrElse | Out | Overloads | Overridable |
Overrides | ParamArray | Partial | Private |
Property | Protected | Public | RaiseEvent |
ReadOnly | ReDim | REM | RemoveHandler |
Resume | Return | SByte | Select |
Set | Shadows | Shared | Short |
Single | Static | Step | Stop |
String | Structure | Sub | SyncLock |
Then | Throw | To | True |
Try | TryCast | TypeOf | UInteger |
ULong | UShort | Using | Variant |
Wend | When | While | Widening |
With | WithEvents | WriteOnly | Xor |
#Const | #Else | #ElseIf | #End |
#If | = | & | &= |
* | *= | / | /= |
\ | = | ^ | ^= |
+ | += | - | -= |
>> | >>= | << | <<= |
Aggregate | Ansi | Assembly | Async |
Auto | Await | Binary | Compare |
Custom | Distinct | Equals | Explicit |
From | Group By | Group Join | Into |
IsFalse | IsTrue | Iterator | Join |
Key | Mid | Off | Order By |
Preserve | Skip | Skip While | Strict |
Take | Take While | Text | Unicode |
Until | Where | Yield | #ExternalSource |
#Region |
https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/keywords/