diff --git a/docs/index.rst b/docs/index.rst index 014c850ded3f..fb0d04ed2a6b 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,6 +12,8 @@ within the Ethereum state. Solidity is a `curly-bracket language `_. It is influenced by C++, Python and JavaScript, and is designed to target the Ethereum Virtual Machine (EVM). +You can find more details about which languages Solidity has been inspired by in +the :doc:`language influences ` section. Solidity is statically typed, supports inheritance, libraries and complex user-defined types among other features. @@ -157,3 +159,4 @@ Contents bugs.rst contributing.rst brand-guide.rst + language-influences.rst \ No newline at end of file diff --git a/docs/language-influences.rst b/docs/language-influences.rst new file mode 100644 index 000000000000..e4f0ab69023b --- /dev/null +++ b/docs/language-influences.rst @@ -0,0 +1,25 @@ +################### +Language Influences +################### + +Solidity is a `curly-bracket language `_ +that has been influenced and inspired by several well-known programming languages. + +Solidity is most profoundly influenced by C++, but also borrowed concepts from languages like +Python, JavaScript, and others. + +The influence from C++ can be seen in the syntax for variable declarations, for loops, the concept +of overloading functions, implicit and explicit type conversions and many other details. + +In the early days of the language, Solidity used to be partly influenced by JavaScript. +This was due to function-level scoping of variables and the use of the keyword ``var``. +The JavaScript influence was reduced starting from version 0.4.0. +Now, the main remaining similarity to JavaScript is that functions are defined using the keyword +``function``. Solidity also supports import syntax and semantics that +are similar to those available in JavaScript. Besides those points, Solidity looks like +most other curly-bracket languages and has no major JavaScript influence anymore. + +Another influence to Solidity was Python. Solidity's modifiers were added trying to model +Python's decorators with a much more restricted functionality. Furthermore, multiple inheritance, C3 linearization, +and the ``super`` keyword are taken from Python as well as the general assignment and copy semantics of value +and reference types.