Programming Language Comparison: New Features

Strings Mathematics Operators and Symbols General (Control Flow/Debugging) Dates Objects New Features Timelines Links: Links (General) Links (Specific Languages) Features: AutoHotkey C C++ C# Crystal Dart Excel Excel VBA Go Java JavaScript Kotlin Pascal Perl PHP Python R Raku Ruby Rust Swift

Timelines

[AutoHotkey] 2004 AutoHotkey 1.0: [RELEASE] AutoHotkey v1.0 (February 16, 2004) 2004 AutoHotkey 1.0: if var is type 2004 AutoHotkey 1.0: Random command (in AHK v2, the Random function) 2004 AutoHotkey 1.0: operators: ++ -- += -= *= /= (in AHK v1, /= sometimes did true division, sometimes did C-style integer division) (in AHK v2, /= was fixed to always do true division) (note: / was added later, in AHK v1.0.25, it has always done true division) 2004 AutoHotkey 1.0.05: A_Index (built-in variable available within loops) 2004 AutoHotkey 1.0.08: hexadecimal literal ('0x') 2004 AutoHotkey 1.0.13: Sort command (in AHK v2, the Sort function) 2005 AutoHotkey 1.0.22: A_AhkVersion (built-in variable: AutoHotkey version number) 2005 AutoHotkey 1.0.25: expressions (e.g. 'Var:=expression') 2005 AutoHotkey 1.0.25: operators: ! != & && * ** + - / := < << <= <> = == > >= >> ^ and not or | || ~ (in AHK v2, <> was removed) (in AHK v1, ** was left-associative, in AHK v2, ** was fixed to be right-associative) (note: includes unary + and unary -) 2005 AutoHotkey 1.0.25: concatenation via 'auto-concat' (just separate variables/literal values with a space/tab) 2005 AutoHotkey 1.0.31: custom functions 2005 AutoHotkey 1.0.31: first built-in functions (WinActive and WinExist) 2005 AutoHotkey 1.0.31: short-circuit boolean evaluation 2005 AutoHotkey 1.0.31: . (concatenation) (concatenation was already possible via 'auto-concat') (note: .= was added later, in AHK 1.0.46) 2005 AutoHotkey 1.0.32: continuation sections (multi-line strings) 2005 AutoHotkey 1.0.33: first built-in functions continued (DllCall and VarSetCapacity (which later split to become Buffer/VarSetStrCapacity)) 2005 AutoHotkey 1.0.34: // operator (in AHK v1, C-style integer division on integers, floor division on floats) (in AHK v2, C-style integer division on integers/floats) (WARNING: in both AHK v1 and v2, // differs from Python's //) 2005 AutoHotkey 1.0.34: trigonometric functions: ACos/ASin/ATan/Cos/Sin/Tan 2005 AutoHotkey 1.0.34: mathematical functions: Abs, Ceil/Floor, Exp/Ln/Log/Sqrt, Mod, Round 2005 AutoHotkey 1.0.35: functions: optional parameters (specify default parameter values) (note: 'all parameters that lie to the right of the first optional parameter must also be marked optional') 2005 AutoHotkey 1.0.35.03: breaking up long lines: 'A line that starts with "and", "or", ||, &&, or a comma is automatically merged with the line directly above it.' (this was later extended to other operators) 2005 AutoHotkey 1.0.36.07: & and * operators (address and dereference, in AHK v2, functionality removed for both) (& already did bitwise-and, * already did multiply) (in AHK v1.1, * variadic syntax functionality added) (in AHK v2, & VarRef functionality added) 2006 AutoHotkey 1.0.46: operators: &= , .= //= <<= >>= ^= |= (including support for comma-separated expressions) 2006 AutoHotkey 1.0.46: the ternary operator: ? : 2007 AutoHotkey 1.0.47: Sort: added option to specify a callback function (comparator function) 2009 AutoHotkey 1.0.48: while loop added 2009 AutoHotkey 1.0.48: [ADDITIONAL] added an assume-static mode for functions 2011 AutoHotkey 1.1: [RELEASE] AutoHotkey v1.1 (May 1, 2011) 2011 AutoHotkey 1.1: basic object (in AHK v2, this was split into Object/Array/Map) 2011 AutoHotkey 1.1: function objects (store functions as objects) 2011 AutoHotkey 1.1: variadic syntax (a trailing *, in variadic function definitions, and variadic function calls) 2011 AutoHotkey 1.1: [ADDITIONAL] class syntax (including 'extends' keyword) 2011 AutoHotkey 1.1: [ADDITIONAL] ~= (RegExMatch operator) 2011 AutoHotkey 1.1: [ADDITIONAL] Unicode support 2011 AutoHotkey 1.1: [ADDITIONAL] 64-bit support 2011 AutoHotkey 1.1: [ADDITIONAL] File object (and FileOpen function) 2011 AutoHotkey 1.1.04: try/catch, throw 2011 AutoHotkey 1.1.04: Exception function (in AHK V2, renamed to Error) 2012 AutoHotkey 1.1.09: [ADDITIONAL] := (already used for assignment, can now declare optional parameters in function definitions) (AHK v1: = does assignment/optional parameters/case-sensitive comparison, AHK v2: = does case-insensitive comparison only) 2013 AutoHotkey 1.1.12: [ADDITIONAL] 2 consecutive commas to omit parameters (now works consistently everywhere) 2013 AutoHotkey 1.1.13: StrSplit function (replaces StringSplit command) 2013 AutoHotkey 1.1.14: finally statement 2014 AutoHotkey 1.1.17: Format function 2015 AutoHotkey 1.1.20: Func.Bind (bound functions) 2015 AutoHotkey 1.1.21: Array.InsertAt/Array.RemoveAt, Array.Push/Array.Pop (technically, not Array until AHK v2, but basic object) 2015 AutoHotkey 1.1.21: Array.Length 2015 AutoHotkey 1.1.21: Array.Delete/Map.Delete (technically, not Map until AHK v2, but basic object) 2015 AutoHotkey 1.1.21: StrReplace (replaces StringReplace command) 2018 AutoHotkey 1.1.27: Min/Max functions 2018 AutoHotkey 1.1.27: [ADDITIONAL] added force-local mode for functions 2018 AutoHotkey 1.1.28: StrSplit function: MaxParts parameter 2018 AutoHotkey 1.1.29: Map.Count 2019 AutoHotkey 1.1.31: switch statement 2019 AutoHotkey 1.1.31: [ADDITIONAL] InputHook object (replaces Input command) 2022 AutoHotkey 1.1.35: !== (case-sensitive not equals) 2022 AutoHotkey 1.1.35: >>> and >>>= 2022 AutoHotkey 1.1.36: VerCompare function 2022 AutoHotkey 2.0: [RELEASE] AutoHotkey v2.0 (December 20, 2022) 2022 AutoHotkey 2.0: separate object types (Object/Array/Map) 2022 AutoHotkey 2.0: Sort function: stable sort 2022 AutoHotkey 2.0: [ADDITIONAL] nested functions (local functions) 2022 AutoHotkey 2.0: [ADDITIONAL] closures 2022 AutoHotkey 2.0: [ADDITIONAL] Buffer object 2022 AutoHotkey 2.0: [ADDITIONAL] Gui object (replaces Gui command) 2022 AutoHotkey 2.0: fat-arrow functions 2022 AutoHotkey 2.0: && and || now return an operand (previously they returned 1 or 0) (short-ternary: ||) 2022 AutoHotkey 2.0: Integer function (truncates integers) 2022 AutoHotkey 2.0: StrCompare function 2022 AutoHotkey 2.0: Type function (similar to JavaScript's typeof operator) ???? AutoHotkey 2.1: [RELEASE] AutoHotkey v2.1 ???? AutoHotkey 2.1: ATan2 function [C] 1978 C: /* */ comment character 1978 C: The C Programming Language, 1st edition 1988 C: The C Programming Language, 2nd edition 1989 C89: [ADDITIONAL] 'A unary + operator is introduced for symmetry with unary -.' (The C Programming Language (2nd Edition) (1988)) 1989 C89: [ADDITIONAL] const (from C++) 1999 C99: // comment character 1999 C99: [ADDITIONAL] bool type 1999 C99: [ADDITIONAL] long long type 1999 C99: inline (from C++) 2011 C11: [ADDITIONAL] (removed gets) 2023 C23: [ADDITIONAL] nullptr constant (and nullptr_t type) 2023 C23: [ADDITIONAL] true/false 2023 C23: binary literals ('0b'/'0B') 2023 C23: digit separator (single-quote character, e.g. 123'456'789) [C++] 1985 C++ 1.0: [RELEASE] C++ 1.0 (1985) 1985 C++ 1.0: /* */ comment character 1985 C++ 1.0: // comment character 1985 C++ 1.0: function overloading 1985 C++ 1.0: operator overloading 1985 C++ 1.0: new/delete operators 1985 C++ 1.0: const keyword 1985 C++ 1.0: :: (scope resolution operator) 1985 C++ 1.0: The C++ Programming Language, 1st edition 1989 C++ 2.0: protected access 1989 C++ 2.0: RTTI (run-time type information) (dynamic_cast, typeid) 1989 C++ 2.0: [ADDITIONAL] bool type 2007 C++: 'mathematical functions from <math.h> that were new in C99' (from C) 2011 C++11: 'auto' keyword (type inferred v. stated explicitly) (auto 'was originally used in the typeless predecessor language B in a related role of denoting an untyped automatic variable definition') 2011 C++11: range-based for loop 2011 C++11: mathematical functions e.g. fmax/fmin, nan, log2, cbrt, hypot, asinh/acosh/atanh, erf/erfc, tgamma/lgamma, trunc, round, nearbyint, rint, copysign, fpclassify/isfinite/isinf/isnan/isnormal, signbit 2011 C++11: mathematical constants e.g. INFINITY, NAN 2011 C++11: universal character names ('\u' / '\U') (escape sequences) 2011 C++11: raw string literals 2011 C++11: lambda expressions (anonymous functions) 2011 C++11: [ADDITIONAL] nullptr 2011 C++11: [ADDITIONAL] long long type 2011 C++11: [ADDITIONAL] std::unique_ptr 2011 C++11: [ADDITIONAL] chrono library 2011 C++11: [ADDITIONAL] std::all_of, std::any_of, std::none_of 2011 C++11: [ADDITIONAL] std::copy_if, std::copy_n 2011 C++11: std::shuffle 2011 C++11: std::begin, std::end 2011 C++11: std::array container 2011 C++11: std::vector container 2011 C++11: std::unordered_map / std::unordered_multimap containers 2011 C++11: std::unordered_set / std::unordered_multiset containers 2011 C++11: std::tuple class template 2011 C++11: std::bind (binds one or more arguments to a function object) 2011 C++11: constexpr specifier 2011 C++11: decltype specifier 2011 C++11: <random> header library 2014 C++14: binary literals ('0b'/'0B') 2014 C++14: digit separator (single-quote character, e.g. 123'456'789) 2017 C++17: std::clamp 2017 C++17: std::gcd, std::lcm (greatest common divisor, lowest common multiple) 2017 C++17: (removed std::random_shuffle) 2017 C++17: [ADDITIONAL] fold-expressions 2017 C++17: [ADDITIONAL] fallthrough attribute ('[[fallthrough]]') 2017 C++17: [ADDITIONAL] std::reduce ('like std::accumulate except the elements of the range may be grouped and rearranged in arbitrary order') 2020 C++20: <=> (spaceship operator) 2020 C++20: string::starts_with / string::ends_with 2020 C++20: std::format 2020 C++20: std::bit_cast 2023 C++23: std::print and std::println 2023 C++23: string::contains 2023 C++23: std::byteswap 2026 C++26: (removed library header <codecvt>) [C#] 2002 C# 1: [RELEASE] C# 1.0 (January, 2002) 2002 C# 1: params keyword (params modifier) (variadic function definitions) [in ECMA-334 C# Language Specification (2001)] 2005 C# 2: [ADDITIONAL] iterators 2005 C# 2: [ADDITIONAL] ?? (null-coalescing operator) 2007 C# 3: lambda expressions and anonymous functions 2010 C# 4: optional arguments ('Each optional parameter has a default value as part of its definition') 2010 C# 4: [ADDITIONAL] named arguments 2015 C# 6: [ADDITIONAL] ?. and ?[] (null-conditional operators) (null propagator) 2015 C# 6: string interpolation (using $) 2015 C# 6: [ADDITIONAL] nameof operator 2017 C# 7: tuples 2017 C# 7: [ADDITIONAL] local functions (nested functions) 2017 C# 7: throw expressions 2017 C# 7.1: CollectionExtensions (e.g. AddRange/InsertRange, GetValueOrDefault, Remove/TryAdd) [.NET Core 2.0] 2019 C# 8: [ADDITIONAL] .. (range operator) 2019 C# 8: [ADDITIONAL] ??= (null-coalescing assignment) 2020 C# 9: String.Split accepts string delimiter [.NET 5.0] 2021 C# 10: Char.IsAscii [.NET 6.0] 2022 C# 11: multi-line strings (raw string literals e.g. use """) [.NET 7.0] 2022 C# 11: >>> (unsigned right-shift operator) 2023 C# 12: .. (spread operator) (for use within collections) (not for: variadic function calls and variadic function definitions) [.NET 8.0] 2023 C# 12: [] (square bracket syntax for arrays) (curly brace syntax, '{}', was already available) [Crystal] 2014 Crystal 1.0: [RELEASE] Crystal 1.0 (June 19, 2014) [Dart] 2013 Dart 1.0: [RELEASE] Dart 1.0 (November 14, 2013) 2013 Dart 1.0: ~/ (C-style integer division operator) 2018 Dart 2.0: [RELEASE] Dart 2.0 (February 22, 2018) (note: Wikipedia states August, 2018) 2023 Dart 3.0: [RELEASE] Dart 3.0 (May 10, 2023) [Excel] 1985 Excel 1.0: [RELEASE] Excel 1.0 (September 30, 1985) (for the Apple Macintosh) (listed below are Windows versions) 1987 Excel 2.0: [RELEASE] Excel 2.0 (first Windows version) 1990 Excel 3.0: [RELEASE] Excel 3.0 1992 Excel 4.0: [RELEASE] Excel 4.0 1993 Excel 5.0: [RELEASE] Excel 5.0 (VBA added) 1995 Excel 95: [RELEASE] Excel 95 (v7.0) (there was no 'Excel 6.0' as Office versions aligned) 1997 Excel 97: [RELEASE] Excel 97 (v8.0) 2000 Excel 2000: [RELEASE] Excel 2000 (v9.0) 2002 Excel 2002: [RELEASE] Excel 2002 (v10.0) 2003 Excel 2003: [RELEASE] Excel 2003 (v11.0) 2007 Excel 2007: [RELEASE] Excel 2007 (v12.0) 2007 Excel 2007: COUNTIFS/SUMIFS functions (and AVERAGEIF/AVERAGEIFS) 2007 Excel 2007: IFERROR function 2007 Excel 2007: new .xslx and .xlsm file formats 2007 Excel 2007: new maximum cell XFD1048576 (previous maximum: IV65536) 2010 Excel 2010: [RELEASE] Excel 2010 (v14.0) (there was no 'Excel 13.0') 2010 Excel 2010: CEILING.PRECISE/FLOOR.PRECISE (note: alternatives to the unusual CEILING/FLOOR functions) 2010 Excel 2010: WEEKNUM: '21' option (date to ISO week number) (in Excel 2013, ISOWEEKNUM was added) 2013 Excel 2013: [RELEASE] Excel 2013 (v15.0) 2013 Excel 2013: BASE/DECIMAL (DecToBase/BaseToDec functions) 2013 Excel 2013: COMBINA/PERMUTATIONA (number of combinations/permutations with repetitions) 2013 Excel 2013: MODE.MULT function (calculates the mode(s), returns an array) 2013 Excel 2013: [ADDITIONAL] ARABIC (Roman numerals to Arabic numerals) 2013 Excel 2013: GAMMA function 2013 Excel 2013: BITAND/BITOR/BITXOR functions 2013 Excel 2013: BITLSHIFT/BITRSHIFT functions 2013 Excel 2013: ISOWEEKNUM function (date to ISO week number) 2013 Excel 2013: UNICHAR/UNICODE functions 2016 Excel 2016: [RELEASE] Excel 2016 (v16.0) (still v16.0: Excel 2019, Excel 2021, Office 365) 2016 Excel 2016: TEXTJOIN 2022 Excel 365: TEXTSPLIT [Excel VBA] 1993 Excel VBA: [RELEASE] Excel 5.0 (1993) (VBA was first launched with MS Excel 5.0 in 1993) 1999 Excel VBA 6.0: [RELEASE] Microsoft Office 2000 2010 Excel VBA 7.0: [RELEASE] Microsoft Office 2010 [Go] 2012 Go 1.0: [RELEASE] Go 1.0 (March 28, 2012) [Java] 1996 Java JDK 1.0: [RELEASE] JDK 1.0 (January 23, 1996) 1996 Java JDK <=1.02: >>> 1997 Java JDK 1.1: [RELEASE] JDK 1.1 (February 19, 1997) 1998 Java J2SE 1.2: [RELEASE] J2SE 1.2 (December 8, 1998) 2000 Java J2SE 1.3: [RELEASE] J2SE 1.3 (May 8, 2000) 2002 Java J2SE 1.4: [RELEASE] J2SE 1.4 (February 6, 2002) 2002 Java JS2E 1.4: assert keyword 2004 Java J2SE 5.0: [RELEASE] J2SE 5.0 (September 30, 2004) (Java SE 5) 2004 Java J2SE 5.0: ... (varargs) (variadic function definitions) 2006 Java SE 6: [RELEASE] Java SE 6 (December 11, 2006) 2011 Java SE 7: [RELEASE] Java SE 7 (July 28, 2011) 2011 Java SE 7: binary literals ('0b') 2011 Java SE 7: underscores in numeric literals 2014 Java SE 8: [RELEASE] Java SE 8 (March 18, 2014) 2014 Java SE 8: lambda expressions 2014 Java SE 8: Integer/Long/Double: min/max methods 2014 Java SE 8: String: join method 2014 Java SE 8: Math: *Exact methods for safe arithmetic (addExact/substractExact/incrementExact/decrementExact/multiplyExact/negateExact) 2014 Java SE 8: Math: floorDiv method (also: modDiv, nextDown) 2017 Java SE 9: [RELEASE] Java SE 9 (September 21, 2017) (note: start of 6-monthly release schedule, thus only list every 10th version here:) 2017 Java SE 9: [ADDITIONAL] Stream.iterate overload added, with a Predicate parameter (i.e. it plays a similar role to 'for (init; condition; increment)') 2018 Java SE 10: [RELEASE] Java SE 10 (March 20, 2018) 2018 Java SE 10: 'var' keyword (local variable type inference) (type inferred v. stated explicitly) 2018 Java SE 11: String: repeat, lines, IsEmpty (also: strip/stripLeading/stripTrailing) 2019 Java SE 13: text blocks (multiline string literals) 2020 Java SE 14: Switch expressions (a less verbose alternative to switch statements) 2023 Java SE 20: [RELEASE] Java SE 20 (March 21, 2023) [JavaScript] 1995 JavaScript: [RELEASE] JavaScript (December 4, 1995) 1997 JavaScript: [RELEASE] ECMAScript 1 (June, 1997) 1997 JavaScript: ES1997 (ES1): >>> and >>>= 1997 JavaScript: ES1997 (ES1): keywords e.g. delete, function, in, new, this, typeof, var, void, with 1997 JavaScript: ES1997 (ES1): null 1997 JavaScript: ES1997 (ES1): arguments object 1997 JavaScript: ES1997 (ES1): hexadecimal literal ('0x') 1997 JavaScript: ES1997 (ES1): && and || return a value not necessarily a boolean (short-ternary: ||) 1999 JavaScript: ES1999 (ES3): object: hasOwnProperty 1999 JavaScript: ES1999 (ES3): string: match, string: replace 2009 JavaScript: ES2009 (ES5): array: map/filter/reduce/reduceRight 2009 JavaScript: ES2009 (ES5): "use strict" 2009 JavaScript: ES2009 (ES5): multi-line strings (using a backslash) 2009 JavaScript: ES2009 (ES5): array: forEach 2009 JavaScript: ES2009 (ES5): object: keys 2009 JavaScript: ES2009 (ES5): function: bind 2009 JavaScript: ES2009 (ES5): trailing commas for object/array literals 2014 JavaScript: HTML5: atob/btoa (it appears that: both are in HTML5, neither are in HTML4 or ES1997-ES2023) 2015 JavaScript: ES2015 (ES6): ... (rest parameters) (variadic function definitions) 2015 JavaScript: ES2015 (ES6): string: repeat 2015 JavaScript: ES2015 (ES6): string: includes/startsWith/endsWith 2015 JavaScript: ES2015 (ES6): Math.sign, Math.trunc 2015 JavaScript: ES2015 (ES6): Math.log2, Math.log10 2015 JavaScript: ES2015 (ES6): [ADDITIONAL] Math.cbrt, Math.fround, Math.hypot 2015 JavaScript: ES2015 (ES6): iterators, for...of 2015 JavaScript: ES2015 (ES6): arrow function expression 2015 JavaScript: ES2015 (ES6): let/const [partially supported by Internet Explorer 11] 2015 JavaScript: ES2015 (ES6): array: keys 2015 JavaScript: ES2015 (ES6): Map [partially supported by Internet Explorer 11] 2015 JavaScript: ES2015 (ES6): Set 2015 JavaScript: ES2015 (ES6): map: forEach [supported by Internet Explorer 11] 2015 JavaScript: ES2015 (ES6): map: keys 2015 JavaScript: ES2015 (ES6): binary data/typed arrays 2015 JavaScript: ES2015 (ES6): template literals (and String.raw) 2015 JavaScript: ES2015 (ES6): array: find/findIndex 2015 JavaScript: ES2015 (ES6): array: fill 2015 JavaScript: ES2015 (ES6): function parameter default values 2015 JavaScript: ES2015 (ES6): binary/octal literals ('0b' and '0o') 2015 JavaScript: ES2015 (ES6): Number.isNaN/Number.isFinite (alternatives to isNaN/isFinite) 2016 JavaScript: ES2016: ** and **= (exponentiation operator) 2016 JavaScript: ES2016: array: includes (alternative to indexOf) 2017 JavaScript: ES2017: object: values/entries 2017 JavaScript: ES2017: trailing commas for function parameters 2017 JavaScript: ES2017: async and await 2018 JavaScript: ES2018: ... (spread operator) (variadic function calls) 2018 JavaScript: ES2018: RegExp: look-behind assertions ('(?<=)' and '(?<!)') 2018 JavaScript: ES2018: RegExp: dotAll (s) 2019 JavaScript: ES2019: array: flat 2019 JavaScript: ES2019: array: sort (now stable sort) 2019 JavaScript: ES2019: object: fromEntries 2020 JavaScript: ES2020: BigInt (primitive type for arbitrary-sized integers) 2020 JavaScript: ES2020: string: matchAll [note: match is ES1 (1997)] 2020 JavaScript: ES2020: ?? and ??= (nullish-coalescing operator) (nullish coalescing operator) 2020 JavaScript: ES2020: ?. (optional chaining operator) (e.g. person?.address?.zipcode) 2021 JavaScript: ES2021: string: replaceAll 2021 JavaScript: ES2021: numeric separator (underscore) 2023 JavaScript: ES2023: array: toSorted, toReversed, toSpliced 2023 JavaScript: ES2023: array: findLast/findLastIndex [Kotlin] 2016 Kotlin: [RELEASE] Kotlin 1.0 (February 15, 2016) [Pascal] 1970 Pascal: 'a first compiler became operational in 1970, and publication followed a year later' [Perl] 1987 Perl 1.0: [RELEASE] Perl 1.0 (December 18, 1987) 1988 Perl <=1.0.15: . (and .=) (concatenation) 1988 Perl <=1.0.15: list assignment (e.g. '($a, $b, $c) = (1, 2, 3)') (destructuring assignment) 1988 Perl 2.0: [RELEASE] Perl 2.0 (June, 1988) 1989 Perl 3.0: [RELEASE] Perl 3.0 (October, 1989) 1991 Perl 4.0: [RELEASE] Perl 4.0 (March, 1991) 1992 Perl <=4.036: .. (range operator) 1992 Perl <=4.036: <=> (spaceship operator) (numeric comparison) and cmp (string comparison) 1994 Perl 5.0: [RELEASE] Perl 5.0 (October 17, 1994) [PHP] 1995 PHP 1.0: [RELEASE] 'Personal Home Page Tools (PHP Tools) version 1.0' (June 8, 1995) 1997 PHP 2.0: [RELEASE] 'PHP/FI 2.0' (November 1, 1997) 1997 PHP <=2.0: rand 1997 PHP <=2.0: intval 1997 PHP <=2.0: decbin/bindec/dechex/hexdec (and decoct/octdec) 1997 PHP <=2.0: log10 1998 PHP <=2.0.1: != 1998 PHP 3.0: [RELEASE] PHP 3.0 (June 6, 1998) 1998 PHP 3.0: . (concatenation operator) ('+' no longer does concatenation) ('.' like Perl) 1998 PHP 3.0: implode/join/explode (implode/join identical, both released in PHP 3.0) 1998 PHP 3.0: list() ('Perl style lists now supported', 'Multiple values from arrays may now be assigned into several variables using one assignment') 1998 PHP 3.0.3: strspn/strcspn 1998 PHP 3.0.4: deg2rad/rad2deg 1998 PHP 3.0.6: base_convert 1998 PHP 3.0.6: mt_rand/mt_getrandmax (Mersenne Twister functions) 2000 PHP <=3.0.18: <> 2000 PHP 4.0: [RELEASE] PHP 4.0 (May 22, 2000) 2000 PHP 4.0: substr_count/str_repeat 2000 PHP 4.0: === and !== 2000 PHP 4.0: stdClass 2000 PHP 4.0.1: str_pad 2000 PHP 4.0.4: [ADDITIONAL] gmp_popcount 2000 PHP 4.0.4: [ADDITIONAL] gmp_and/gmp_or/gmp_xor 2001 PHP 4.1: hypot 2002 PHP 4.2: fmod 2002 PHP 4.2: is_nan/is_finite/is_infinite 2002 PHP 4.3: str_shuffle 2004 PHP 5.0: [RELEASE] PHP 5.0 (July 13, 2004) 2004 PHP 5.0: str_split function (WARNING: confusing function name) ('broken down into chunks with each being length in length') 2004 PHP 5.0: substr_compare 2004 PHP 5.0: [ADDITIONAL] variant_and/variant_not 2009 PHP 5.3: anonymous functions (and the 'use' clause) 2009 PHP 5.3: [ADDITIONAL] ?: (short-ternary) (it is possible to leave out the middle part of the ternary operator) (Elvis operator) 2012 PHP 5.4: 'shortened array syntax' ('short array syntax exists which replaces array() with []') 2012 PHP 5.4: '0b' binary prefix 2013 PHP 5.5: 'finally' keyword 2014 PHP 5.6: argument unpacking via ... (known as the splat operator in other languages, including Ruby) (variadic function calls) 2014 PHP 5.6: variadic functions can now be implemented using the ... operator (variadic function definitions) 2014 PHP 5.6: ** operator (right associative) (to support exponentiation) (along with a **= shorthand assignment operator) 2015 PHP 6.0: [RELEASE] (there was no PHP 6.0) 2015 PHP 7.0: [RELEASE] PHP 7.0 (December 3, 2015) 2015 PHP 7.0: intdiv function (performs an integer division of its operands) 2015 PHP 7.0: <=> (spaceship operator) (for comparing two expressions, it returns -1, 0 or 1) 2015 PHP 7.0: [ADDITIONAL] ?? (null-coalescing operator) (null coalescing operator) 2016 PHP 7.1: [ADDITIONAL] support for negative string offsets 2018 PHP 7.3: [ADDITIONAL] heredoc/nowdoc multi-line strings: the ending marker may now be indented, which determines how much indentation to preserve 2018 PHP 7.3: [ADDITIONAL] trailing commas in function and method calls are now allowed 2019 PHP 7.4: arrow functions ('a more concise syntax for anonymous functions') 2019 PHP 7.4: 'fn' keyword 2019 PHP 7.4: numeric literal separator (numeric literals can contain underscores between digits) 2020 PHP 8.0: [RELEASE] PHP 8.0 (November 26, 2020) 2020 PHP 8.0: [ADDITIONAL] throw can now be used as an expression 2020 PHP 8.0: [ADDITIONAL] an optional trailing comma is now allowed in parameter lists 2020 PHP 8.0: str_contains/str_starts_with/str_ends_with 2020 PHP 8.0: sorting functions are now stable (which means that equal-comparing elements will retain their original order) (stable sort) 2020 PHP 8.0: fdiv function 2020 PHP 8.0: [ADDITIONAL] substr: returns an empty string where it previously returned false 2021 PHP 8.1: [ADDITIONAL] array_is_list function (check that array has key names like a 0-based array) 2021 PHP 8.1: [ADDITIONAL] '0o' octal prefix 2023 PHP 8.3: [ADDITIONAL] static variable initializers can now contain arbitrary expressions 2023 PHP 8.3: json_validate function 2023 PHP 8.3: mb_str_pad function [Python] 1994 Python 1.0: [RELEASE] Python 1.0 (January, 1994) 1994 Python 1.0: hex/oct (dec to hex, dec to oct) 1994 Python 1.0: lambda expressions (thanks to Amrit Prem, 'a Lisp hacker') 1994 Python 1.0: map/filter/reduce (thanks to Amrit Prem) (note: no reduceRight) 1994 Python <=1.0.1: * (variadic function definitions) 1994 Python <=1.0.1: [ADDITIONAL] a < b < c [Python 1.4 documentation: 'Comparisons can be chained arbitrarily, e.g. x < y <= z is equivalent to x < y and y <= z'] 1994 Python <=1.0.1: 'and' and 'or' return an operand (which is not necessarily a boolean) (short-ternary: or) 1994 Python <=1.0.1: 's[i:j]' slice syntax (WARNING: unusual syntax) 1994 Python <=1.0.1: 's * n' (and 'n * s') string repeat syntax (WARNING: mathematical operator that works on strings) 1999 Python 1.5.2: random.randrange 2000 Python 1.6: int/long: radix parameter added (base to dec) 2000 Python 2.0: * (variadic function calls) 2000 Python 2.0: operator.invert (operator.inv already existed) 2000 Python 2.0: [ADDITIONAL] list comprehensions 2001 Python 2.2: // (floor division) (for integers and floats) 2001 Python 2.2: operator.eq, operator.truediv/operator.floordiv 2002 Python 2.2.2: [ADDITIONAL] str.zfill 2003 Python 2.3: math.log: base argument added 2003 Python 2.3: operator.pow 2005 Python 2.4: [ADDITIONAL] str.rsplit 2008 Python 2.6: [ADDITIONAL] binary literals (e.g. 0b1010) 2008 Python 2.6: [ADDITIONAL] octal literals (e.g. 0o720) 2008 Python 2.6: math.isinf/math.isnan, math.copysign, math.factorial, math.trunc 2008 Python 2.6: bin (dec to bin) 2008 Python 2.6: str.format 2008 Python 3.0: / (changed: now does true division for integers (and floats)) (previously did floor division for integers, and true division for floats) 2008 Python 3.0: [ADDITIONAL] int/int now returns a float (e.g. 1/2 = 0.5) 2008 Python 3.0: [ADDITIONAL] leading '0' indicates decimal (not octal) 2008 Python 3.0: [ADDITIONAL] '0o' for octal values 2008 Python 3.0: [ADDITIONAL] iterators 2009 Python 3.1: ordered dictionaries [also added to Python 2.7] 2009 Python 3.1: [ADDITIONAL] int.bit_length 2009 Python 3.2: math.erf/math.gamma [also added to Python 2.7] 2009 Python 3.2: math.isfinite 2012 Python 3.3: SimpleNamespace objects (JavaScript-like object) ('classless' object) 2012 Python 3.3: math.log2 2014 Python 3.4: statistics.mean/statistics.median 2015 Python 3.5: math.gcd 2015 Python 3.5: [ADDITIONAL] type hints (type annotations) 2016 Python 3.6: formatted string literals (f-strings) 2016 Python 3.6: underscores in numeric literals 2018 Python 3.7: str.isascii() 2019 Python 3.8: := (walrus operator) 2019 Python 3.8: math.comb/math.perm, math.prod 2019 Python 3.8: statistics.multimode 2020 Python 3.9: dict class: merge (|) and update (|=) operators 2020 Python 3.9: math.lcm 2021 Python 3.10: match keyword (switch statement) (structural pattern matching) 2021 Python 3.10: int.bit_count 2021 Python 3.10: isinstance(object, classinfo): classinfo can be a Union Type (note: important since Python lacks an IsObject (or IsValue) function) 2022 Python 3.11: [ADDITIONAL] math.cbrt 2023 Python 3.12: itertools.batched (chunk list) (chunk array) [R] 2000 R 1.0: [RELEASE] R 1.0 (February 29, 2000) 2000 R 1.0: %% (floor modulo) [Raku] 2015 Perl 6: [RELEASE] Perl 6 version 1.0 (Perl 6.c) (December 24, 2015) (note: Wikipedia states December 25, 2015) 2015 Perl 6: ?? !! (ternary operator with alternative symbols) (i.e. there is no excuse for any programming language not to have a standard ternary operator, choose alternative symbols if you must) 2019 Raku: [RELEASE] (renamed to Raku) (October, 2019) [Ruby] 1996 Ruby 1.0: [RELEASE] Ruby 1.0 (December 25, 1996) 1998 Ruby <=1.2: <=> (spaceship operator) 1999 Ruby <=1.4: .. (range operator) 2003 Ruby <=1.8: unary * (splat) operator 2013 Ruby 2.0: [RELEASE] Ruby 2.0 (February 24, 2013) 2018 Ruby 2.6: endless ranges 2020 Ruby 3.0: [RELEASE] Ruby 3.0 (December 25, 2020) [Rust] 2015 Rust 1.0: [RELEASE] Rust 1.0 (May 15, 2015) 2015 Rust 1.3: join 2016 Rust 1.8: str::encode_utf16 2021 Rust 1.56: 'from' for all collections (e.g. HashMap::from) 2024 Rust 1.76: type_name_of_val (variable get type) [Swift] 2014 Swift 1.0: [RELEASE] Swift 1.0 (September 9, 2014) 2014 Swift 1.0: ?? (nil-coalescing operator) (i.e. a null-coalescing operator) 2015 Swift 2.0: [RELEASE] Swift 2.0 (September 21, 2015) 2016 Swift 3.0: [RELEASE] Swift 3.0 (September 13, 2016) 2017 Swift 4.0: [RELEASE] Swift 4.0 (September 19, 2017) 2019 Swift 5.0: [RELEASE] Swift 5.0 (March 25, 2019) 2023 Swift 5.9: if and switch expressions

[Derek Banas: 'Learn in One Video' videos for programming languages] Learn in One Video - YouTube [TIOBE Index: a list of the most popular programming languages] TIOBE Index - TIOBE [Rosetta Code] Null object - Rosetta Code Undefined values - Rosetta Code Partial function application - Rosetta Code [Wikipedia] Comparison of programming languages (syntax) - Wikipedia Comparison of programming languages (string functions) - Wikipedia Comparison of programming languages (basic instructions) - Wikipedia [switch statements (see 'select case'), if/else-if/else] Comparison of programming languages (basic instructions) - Wikipedia [throw, try/catch/finally, assert] Comparison of programming languages (strings) - Wikipedia [concatenation, interpolation, escaping, multi-line] Conditional (computer programming) - Wikipedia [switch statements (whether fall-through or not)] Ternary conditional operator - Wikipedia Relational operator - Wikipedia Three-way comparison - Wikipedia Ellipsis (computer programming) - Wikipedia Escape character - Wikipedia Variadic function - Wikipedia Fold (higher-order function) - Wikipedia [fold/fold right, reduce/reduce right] Elvis operator - Wikipedia

Note: source code zips often contain changelogs and documentation material. [AutoHotkey][v1.0] AutoHotkey Changes & New Features AutoHotkey - Alphabetical Command Reference AutoHotkey - Functions [note: 'Variables' became 'Variables and Expressions', and covered operators too] AutoHotkey - Variables AutoHotkey - Variables and Expressions list of every command/function/variable from across all versions - AutoHotkey Community [AutoHotkey][v1.1-] Changes & New Features | AutoHotkey v1 Changes & New Features | AutoHotkey v2 list of every command/function/variable from across all versions - AutoHotkey Community [C] History of C - cppreference.com C language - cppreference.com C Standard Library header files - cppreference.com Common mathematical functions - cppreference.com Operators in C and C++ - Wikipedia [C++] History of C++ - cppreference.com C++ language - cppreference.com C++ Standard Library headers - cppreference.com Common mathematical functions - cppreference.com Operators in C and C++ - Wikipedia [C#] The history of C# - C# Guide - C# | Microsoft Learn What's new in C# 12 - C# Guide - C# | Microsoft Learn ECMA-334 - Ecma International C# operators and expressions - List all C# operators and expression - C# | Microsoft Learn C Sharp (programming language) - Wikipedia [C#/.NET version table] [Crystal] crystal/CHANGELOG.md at master · crystal-lang/crystal · GitHub [Dart] Language specification | Dart Language Specification : Dart : Structured web programming Language evolution | Dart [Excel] Excel Functions and Formulas [Excel VBA] VBA Functions List [Go] Release History - The Go Programming Language [Java] Java history from Java 1.0 to Java 18 | by Abdalrhmanalkraien | CodeX | Medium history - Where can I get a copy of JDK 1.0.2 JavaDocs? - Stack Overflow Varargs Java New String Methods - From Java 8 To Java 17 Java 8 Math New Methods | Baeldung Java 11 String API Additions | Baeldung [JavaScript][ECMAScript] [ECMA-262: pdfs for each ECMAScript edition since 1997 (as of 2023, 14 editions)] ECMA-262 - Ecma International ECMAScript version history - Wikipedia JavaScript Versions ES6 Math Additions in Depth ECMAScript 6: New Features: Overview and Comparison [JavaScript][HTML 5 standard] HTML 5 HTML5 [Kotlin] Kotlin releases | Kotlin Documentation Keywords and operators | Kotlin Documentation [Pascal] Books by Niklaus Wirth – Pascal for small machines [Perl] Obtaining old versions of Perl Old Versions of Perl FTP archive directory /ftp/pub/languages/perl/CPAN/ports/msdos/old/perl4/ [PHP][PHP 1-3] PHP: PHP/FI Version 2.0 Documentation PHP: PHP Version 3 Documentation [note: php-2.0.1.tar.gz and php-3.0.18.tar.gz contain documentation/changelog info] PHP: Release Archives (museum) [PHP][PHP 4-] PHP: Releases PHP: PHP Manual - Manual PHP: Appendices - Manual PHP: PHP 4 ChangeLog PHP: PHP 5 ChangeLog PHP: New Functions - Manual PHP: History of PHP and Related Projects - Manual PHP: Documentation PHP: PHP Version 4 Documentation Index of /archives PHP: Release Archives (museum) [Python][Python 1] Python Documentation by Version | Python.org Index of /download/releases/src [note: docs.python.org/release contains documentation material] Index of /release/ Python Programming/Version history - Wikibooks, open books for an open world [Python][Python 2] What’s New in Python — Python 2.7.18 documentation 9.9. operator — Standard operators as functions — Python 2.7.18 documentation 2. Built-in Functions — Python 2.7.2 documentation [note: 'Built-in Types' covers the 'str' and 'int' functions] 5. Built-in Types — Python 2.7.18 documentation 9.2. math — Mathematical functions — Python 2.7.18 documentation 9.6. random — Generate pseudo-random numbers — Python 2.7.18 documentation [Python][Python 3] What’s New in Python — Python 3.12.0 documentation operator — Standard operators as functions — Python 3.12.0 documentation Built-in Functions — Python 3.12.0 documentation [note: 'Built-in Types' covers the 'str' and 'int' functions] Built-in Types — Python 3.12.0 documentation re — Regular expression operations — Python 3.12.0 documentation math — Mathematical functions — Python 3.12.0 documentation [note: Python 2 does not have a 'statistics' module] statistics — Mathematical statistics functions — Python 3.12.0 documentation [object types: list/dict/SimpleNamespace/range/bytearray] 5. Data Structures — Python 3.12.0 documentation Built-in Types — Python 3.12.0 documentation types — Dynamic type creation and names for built-in types — Python 3.12.0 documentation Built-in Types — Python 3.12.0 documentation Built-in Types — Python 3.12.0 documentation [R] Previous releases of R for Windows R Language Definition Quick-R: Operators [Raku] Perl 6 Perl 6 Language Documentation [Ruby] Ruby Releases [Rust] Rust Versions | Rust Changelogs rust/RELEASES.md at master · rust-lang/rust · GitHub [Swift] Swift.org - Documentation Swift | Apple Developer Documentation