Программирование: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Отмена правки 154063, сделанной 5.35.86.113 (обсуждение)
Метка: отмена
Строка 50: Строка 50:
==Методологии программирования==
==Методологии программирования==
* [[w:Экстремальное программирование|Экстремальное программирование]]
* [[w:Экстремальное программирование|Экстремальное программирование]]
==Сравнение языков программирования==

{{Сравнения языков программирования}}
В этой статье сравнивается более 50 [[язык программирования|языков программирования]] по основным свойствам [[Синтаксис (программирование)|синтаксиса]].<br>

== Выражения ==
[[Выражение (информатика)|Выражения]] в языках программирования в широком смысле могут быть подразделены на 4 типа по синтаксической структуре:

;префиксная запись
* [[Лисп]] <tt>(* (+ 2 3) (expt 4 5))</tt>
;инфиксная запись
* [[Фортран]] <tt>(2 + 3) * (4 ** 5)</tt>
;суффиксная, постфиксная или [[Обратная польская запись]]
* [[Форт (язык программирования)|Форт]] <tt>2 3 + 4 5 ** *</tt>
;запись выражений в математическом стиле
* [[Wolfram (язык программирования)|Wolfram]] <tt>(2 + 3)(4^5) (* отметим неявный оператор умножения *)</tt>

== Операторы ==
Как правило в языках программирования имеются следующие соглашения по [[Оператор (программирование)|операторам]]:

* о разделителях операторов;
* о терминаторах операторов; и
* о продолжении строки

Разделитель операторов используется для демаркации границы между двумя отдельными операторами. Терминатор операторов используется для маркировки конца отдельного оператора. Языки, которые интерпретируют конец строки как конец оператора называются однострочными<ref>https://translate.yandex.ru/?utm_source=wizard&text=line-oriented&lang=en-ru</ref> языками программирования.

«Продолжение строки» — это соглашение для однострочных языков о ситуациях, когда символ окончания строки может быть неправильно интерпретирован как окончание оператора. В таких языках «продолжение строки» позволяет оператору охватывать более одной строки.


{| class="wikitable sortable"
|-
! Язык
! Разделитель-терминатор операторов
! Дополнительный разделитель<ref name="ss1">для нескольких операторов на одной строке</ref>
|-
| [[ABAP/4|ABAP]]
| разделитель — точка '.'
|-
| [[Ада (язык программирования)|Ада]] (Ada)
| терминатор — точка с запятой ';'
|-
| [[Алгол]] (ALGOL)
| разделитель — точка с запятой ';'
|-
| [[Алгол 68]] (ALGOL 68)
| разделитель — точка с запятой ';' и запятая ','<ref>Три типа предложений, каждое разделяет части по-разному:
*# последовательное предложение использует ''[[Токен (лексический анализ)|токен]] продолжения'' (точка с запятой ';'): '''begin''' a; b; c '''end''' — элементы исполняются по очереди.
*# непоследовательное предложение использует ''[[Токен (лексический анализ)|токен]] и-также'' (запятая «,»): '''begin''' a, b, c '''end''' — очередность исполнения определяется оптимизатором компилятора..
*# параллельное предложение использует ''[[Токен (лексический анализ)|токен]] и-также'' (запятая «,»): '''par begin''' a, b, c '''end''' — элементы необходимо исполнять в параллельных потоках.
</ref>
|-
| [[APL (язык программирования)|APL]]
| терминатор — новая строка
| разделитель — <tt>⋄</tt>
|-
| [[AppleScript]]
| терминатор — новая строка
|-
| [[AutoHotkey]]
| терминатор — новая строка
|-
| [[Бейсик]] (BASIC)
| терминатор — новая строка
| разделитель — двоеточие ':'
|-
| [[Boo]]
| терминатор — новая строка
|-
| [[Си (язык программирования)|Си]] (C)
| терминатор — точка с запятой ';'
| разделитель выражений — запятая ','
|-
| [[C++]]
| терминатор — точка с запятой ';'
| разделитель выражений — запятая ','
|-
| [[C Sharp|C#]]
| терминатор — точка с запятой ';'
|-
| [[Кобол]] (COBOL)
| разделитель — пробел, иногда точка '.', имеется возможность разделять запятыми ',' и точками с запятыми ';'.
|
|-
| [[Cobra (язык программирования)|Cobra]]
| терминатор — новая строка
|-
| [[CoffeeScript]]
| терминатор — новая строка
|-
| [[D (язык программирования)|D]]
| терминатор — точка с запятой ';'
|-
| [[Eiffel]]
| терминатор — новая строка
| точка с запятой ';'
|-
| [[Erlang]]
| разделитель — двоеточие ':', терминатор — точка '.'
|-
| [[F Sharp|F#]]
| терминатор — новая строка
| точка с запятой ';'
|-
| [[Фортран]] (Fortran)
| терминатор — новая строка
| точка с запятой ';'
|-
| [[Форт (язык программирования)|Форт]] (Forth)
| терминатор определений слов — точка с запятой ';'
|-
| [[:en:GFA BASIC|GFA BASIC]]
| терминатор — новая строка
|-
| [[Go]]
| разделитель — точка с запятой ';' (вставляется компилятором)
|-
| [[Haskell]] (в do-нотации)
| разделитель — новая строка
|-
| [[Haskell]] (в do-нотации, при использовании скобок)
| разделитель — точка с запятой ';'
|-
| [[Java]]
| терминатор — точка с запятой ';'
|-
| [[JavaScript]]
| разделитель — точка с запятой ';' (иногда неявно делится по новой строке)
|-
|[[Kotlin]]
| разделитель — точка с запятой ';' (иногда неявно делится по новой строке)
|-
| [[Lua]]
| разделитель — пробел (возможна точка с запятой ';')
|-
| [[Mathematica]]
| разделитель — точка с запятой ';'
|-
| [[MATLAB]]
| терминатор — новая строка
| точка с запятой ';' или запятая ','<ref>точка с запятой — спрятать результат оператора, запятая — показать результат</ref>
|-
| [[Object Pascal]] ([[Delphi (среда разработки)|Delphi]])
| разделитель — точка с запятой ';'
|-
| [[Objective-C]]
| терминатор — точка с запятой ';'
|-
| [[OCaml]]
| разделитель — точка с запятой ';'
|-
| [[Паскаль (язык программирования)|Паскаль]] (Pascal)
| разделитель — точка с запятой ';'
|-
| [[Perl]]
| разделитель — точка с запятой ';'
|-
| [[Perl 6]]
| разделитель — точка с запятой ';'
|-
| [[PHP]]
| терминатор — точка с запятой ';'
|-
| [[:en:Pick Basic|Pick Basic]]
| терминатор — новая строка
| разделитель — точка с запятой ';'
|-
| [[PowerShell]]
| терминатор — новая строка
| разделитель — точка с запятой ';'
|-
| [[Пролог (язык программирования)|Пролог]] (Prolog)
| терминатор — точка '.'
|-
| [[Python]]
| терминатор — новая строка
| точка с запятой ';'
|-
| [[Ruby]]
| терминатор — новая строка
| точка с запятой ';'
|-
| [[Rust (язык программирования)|Rust]]
| терминатор операторов — точка с запятой ';'
| разделитель выражений — запятая ','
|-
| [[Scala (язык программирования)|Scala]]
| терминатор — новая строка (возможна точка с запятой ';')
| точка с запятой ';'
|-
| [[Seed7]]
| разделитель — точка с запятой ';' (возможность использовать как терминатор)
|-
| [[Симула]] (Simula)
| разделитель — точка с запятой ';'
|-
| [[S-Lang]]
| разделитель — точка с запятой ';'
|-
| [[Smalltalk]]
| разделитель — точка '.'
|-
| [[Standard ML]]
| разделитель — точка с запятой ';'
|-
| [[Swift (язык программирования)|Swift]]
| разделитель — точка с запятой ';' (вставляется компилятором)
|-
| [[Visual Basic]]
| терминатор — новая строка
| разделитель — двоеточие ':'
|-
| [[Visual Basic .NET]]
| терминатор — новая строка
| разделитель — двоеточие ':'
|-
| [[Wolfram (язык программирования)|Wolfram]]
| разделитель — точка с запятой ';'
|-
| [[Xojo]]
| терминатор — новая строка
|-
|-class="sortbottom"
! Язык
! Разделитель-терминатор операторов
! Дополнительный разделитель<ref name="ss1"/>
|}

=== Продолжение строки ===
Операция продолжения строки обычно происходит на стадии [[Лексический анализ|лексического анализа]]: как правило символ новой строки не добавляет [[Токен (лексический анализ)|токен]] в соотв. список, если было обнаружено продолжение строки.

;[[Пробел|Символы пустого пространства]] — языки не требующие продолжения строки
* [[Ада (язык программирования)|Ада]] — Строка обрывается точкой с запятой
* [[C Sharp|C#]] — Строка обрывается точкой с запятой
* [[JavaScript]] — Строка обрывается точкой с запятой (возможен неявный обрыв)
* [[Lua]]
* [[OCaml]]

;[[Амперсанд]] как последний символ строки
* [[Фортран#Fortran 90 (1991)|Фортран 90]], [[Фортран#Fortran 95 (1997)|Фортран 95]], [[Фортран#Fortran 2003 (2004)|Фортран 2003]], [[Фортран#Fortran 2008 (2010)|Фортран 2008]]

;[[Обратная косая черта]] как последний символ строки
* [[Bash]]<ref>''[https://www.gnu.org/software/bash/manual/bashref.html Bash Reference Manual],'' [https://www.gnu.org/software/bash/manual/bashref.html#Escape-Character 3.1.2.1 Escape Character]</ref> и др. оболочки Unix
* Препроцессор [[Си (язык программирования)|Си]] и [[C++|Си++]]
* [[Mathematica]] and [[Wolfram (язык программирования)|Wolfram Language]]
* [[Python]]<ref>[https://docs.python.org/ Python Documentation], [https://docs.python.org/3/reference/lexical_analysis.html 2. Lexical analysis]: [https://docs.python.org/3/reference/lexical_analysis.html#explicit-line-joining 2.1.5. Explicit line joining]</ref>
* [[Ruby]]
* [[JavaScript]] — в текстовых константах, обрамлённых одной или двумя кавычками

;[[Гравис]] как последний символ строки
* [[PowerShell]]

;[[Дефис]] как последний символ строки
* [[SQL*Plus]]

;[[Подчёркивание]] как последний символ строки
* [[AutoIt]]
* [[Cobra (язык программирования)|Cobra]]
* [[Visual Basic]]
* [[Xojo]]

;[[Многоточие]] (три точки, а не отдельный спец. символ)
* [[MATLAB]]: Многоточие не должно являться последним символом строки, однако все последующие символы игнорируются.<ref>[http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_env/f0-5789.html Mathworks.com] {{webarchive|url=https://web.archive.org/web/20100207151905/http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_env/f0-5789.html |date=7 February 2010 }}</ref> (По сути оно начинает комментарий, который продолжается и на следующей строке, в отличие от однострочного комментария, который продолжается лишь до окончания строки.)

;[[Запятая]] как последний символ строки
* Ruby (за запятой может быть комментарий)


;[[Скобки|Левая скобка]] как последний символ строки
* [[Пакетный файл|Bat-файл]]: начало блока, обрамленного скобками разрешает продолжение строки<ref>https://ss64.com/nt/syntax-brackets.html</ref>
* [[Ruby]]: [[Скобки|Левая скобка — круглая, квадратная либо фигурная]]

;[[Операция (программирование)|Оператор]] в качестве последнего объекта строки
* [[Ruby]] (за оператором может быть комментарий)

;[[Операция (программирование)|Оператор]] в начале продолжающейся строки
* [[AutoHotkey]]: Любой оператор выражений за исключением ++ и --, а также точка или запятая<ref>https://autohotkey.com/docs/Scripts.htm#continuation</ref>

;[[Обратная косая черта]] в начале продолжающейся строки
* [[Vim]]script

;Какая-либо форма [[#Однострочные комментарии|однострочных комментариев]] как продолжение строки
* [[TASM|Turbo Assembler]]: <code>\</code>
* [[Макропроцессор m4|m4]]: <code>dnl</code>
* [[TeX]]: <code>%</code>

;Позиция символа
* [[Фортран#FORTRAN 77 (1980)|Фортран 77]]: Строка не являющаяся комментарием будет продолжением предыдущей строки не комментария в случае если на позиции 6 находится не пробел. Строки являющиеся комментариями не могут быть продолжены.
* [[Кобол]]: Текстовые константы могут быть продолжены, если не закончить их в предложении PICTURE символом <code>'</code>, а затем вставить символ <code>-</code> в 7 м столбце (на той же позиции, на которой использовался символ <code>*</code> для комментария)
* [[:en:TUTOR (programming language)|TUTOR]]: Строки, начинающиеся символом табуляции (после требуемого контекстом отступа) продолжают предыдущую команду.

;Использование кавычек
* Препроцессор [[Си (язык программирования)|Си]] и [[C++|Си++]]: Использование кавычки в начале строки продолжает предыдущую строку после обычного окончания.

== Библиотеки ==
'''Импорт''' [[Библиотека (программирование)|библиотеки]] — это способ добавить внешние (возможно откомпилированные) процедуры, программы или пакеты. Импорты классифицируют по уровню (модуль, пакет, класс, процедура,…) и по синтаксису (директивы, атрибуты,…)

;Импорт файлов
* [[Active Server Pages|ASP]]: <code>#include file="''filename''"</code>
* [[AutoHotkey]], [[AutoIt]], [[Си (язык программирования)|Си]], [[C++|Си++]]: <code>#include "''filename''"</code>, <code>#include <''filename''></code>
* [[Кобол]]: <code>COPY filename.</code>
* [[:en:Falcon (programming language)|Falcon]]: <code>load "''filename''"</code>
* [[Фортран]]: <code>include 'filename'</code>
* [[Lua]]: <code>require("''filename''")</code>
* [[Mathematica]] и [[Wolfram (язык программирования)|Wolfram]]: <code>Import["filename"]</code>
* [[MATLAB]]: <code>addpath(''directory'')</code><ref>Чтобы М-файл (код MATLAB) был доступен по имени, он должен находится в текущем каталоге либо, либо каталоге из пути поиска.</ref>
* [[Objective-C]]: <code>#import "''filename''"</code>, <code>#import <''filename''></code>
* [[Perl]]: <code>require "''filename''";</code>
* [[PHP]]: <code>include "''filename''";</code>, <code>require "''filename''";</code>
* [[:en:Pick Basic|Pick Basic]]: <code>include [filename] program</code>, <code>#include [filename] program</code>
* [[R (язык программирования)|R]]: <code>source(""filename"")</code>
* [[Rust (язык программирования)|Rust]]: <code>include!( "''filename''");</code>

;Импорт пакетов
* [[Ада (язык программирования)|Ада]]: <code>with ''package''</code>
* [[Си (язык программирования)|Си]], [[C++|Си++]]: <code>#include ''filename''</code>
* [[Cobra (язык программирования)|Cobra]]: <code>use Package.Name</code>
* [[D (язык программирования)|D]]: <code>import ''package.module'';</code>, <code>import ''altname'' = ''package.module'';</code>
* [[:en:Falcon (programming language)|Falcon]]: <code>load ''module''</code>, <code>load ''module.submodule''</code>
* [[Фортран#Fortran 90 (1991)|Фортран 90]]+: <code>use ''module''</code>, <code>use ''module'', only : ''identifier''</code>
* [[Go]]: <code>import altname "''package/name''"</code>
* [[Haskell]]: <code>import ''Module''</code>, <code>import qualified ''Module'' as ''M''</code>
* [[Java]], [[MATLAB]], [[Kotlin]]: <code>import ''package''.*</code>
* [[JavaScript]]: <code>import ''altname'' from "''modname''";</code>, <code>import "''modname''";</code>
* [[Lua]]: <code>require("''modname''")</code>
* [[Mathematica]] и [[Wolfram (язык программирования)|Wolfram]]: <code><<''name''</code>
* [[Оберон (язык программирования)|Оберон]] (Oberon): <code>IMPORT ''module''</code>
* [[Objective-C]]: <code>@import ''module'';</code>
* [[Паскаль (язык программирования)|Паскаль]]: <code>uses ''unit''</code>
* [[Perl]]: <code>use Module;</code>, <code>use Module qw(''import options'');</code>
* [[Python]]: <code>import ''module''</code>, <code>from ''module'' import *</code>
* [[Rust (язык программирования)|Rust]]: <code>mod ''modname'';</code>, <code>#[path = "''filename''"] mod ''altname'';</code>, <code>extern crate ''libname'';</code>, <code>extern crate ''libname'' as ''altname'';</code>
* [[R (язык программирования)|R]]: <code>library("package")</code>
* [[Scala (язык программирования)|Scala]]: <code>import ''package''._</code>, <code>import ''package''</code>
* [[Swift (язык программирования)|Swift]]: <code>import ''module''</code>

;Импорт классов
* [[:en:Falcon (programming language)|Falcon]]: <code>import ''class''</code>
* [[Java]], [[MATLAB]], [[Kotlin]]: <code>import ''package''.''class''</code>
* [[JavaScript]]: <code>import ''class'' from "modname";</code>, <code>import {''class''} from "''modname''";</code>, <code>import {''class'' as ''altname''} from "''modname''";</code>
* [[PHP]]: <code>use ''Namespace\ClassName'';</code>, <code>use ''Namespace\ClassName as AliasName'';</code>
* [[Python]]: <code>from ''module'' import ''class''</code>
* [[Scala (язык программирования)|Scala]]: <code>import ''package''.''class''</code>, <code>import ''package''.{ ''class1'' => ''alternativeName'', ''class2'' }</code>, <code>import ''package''._</code>

;Импорт процедур/функций
* [[D (язык программирования)|D]]: <code>import ''package.module'' : ''symbol'';</code>, <code>import ''package.module'' : ''altsymbolname'' = ''symbol'';</code>
* [[Haskell]]: <code>import ''Module'' (''function'')</code>
* [[JavaScript]]: <code>import ''function'' from "modname";</code>, <code>import {''function''} from "''modname''";</code>, <code>import {''function'' as ''altname''} from "''modname''";</code>
* [[MATLAB]]: <code>import ''package''.''function''</code>
* [[Perl]]: <code>use Module ('symbol');</code>
* [[PHP]]: <code>use function ''Namespace\function_name'';</code>, <code>use ''Namespace\function_name as function_alias_name'';</code>
* [[Python]]: <code>from ''module'' import ''function''</code>
* [[Rust (язык программирования)|Rust]]: <code>use ''module''::''submodule''::''symbol'';</code>, <code>use ''module''::''submodule''::{''symbol1'', ''symbol2''};</code>, <code>use ''module''::''submodule''::''symbol'' as ''altname'';</code>
* [[Scala (язык программирования)|Scala]]: <code>import ''package''.''class''.''function''</code>, <code>import ''package''.''class''.{ ''function'' => ''alternativeName'', ''otherFunction'' }</code>

;Импорт констант
* [[PHP]]: <code>use const ''Namespace\CONST_NAME'';</code>

Вышеуказанные операторы также могут быть разделены на 2 группы — являются ли они синтаксическим удобством (просто добавляют элементам краткое название, при этом элементы всё равно доступны по своему полному названию), либо нужны для доступа к коду (без этого оператора доступ к элементам невозможен даже при наличии полного имени).

;Синтаксическое удобство
* [[Java]]: <code>import ''package''.*</code>, <code>import ''package''.''class''</code>
* [[OCaml]]: <code>open ''module''</code>

;Необходимы для доступа к коду
* [[Go]]: <code>import altname "''package/name''"</code>
* [[JavaScript]]: <code>import ''altname'' from "''modname''";</code>
* [[Python]]: <code>import ''module''</code>

== Блоки ==
'''Блок''' представляет собой способ группировки двух или более отдельных операторов, выражений или иных элементов кода, которые должны представлять собой целое..

;Скобки (фигурные скобки) <code>{</code> … <code>}</code>:
* [[Си (язык программирования)|Си]], [[C++|Си++]], [[Objective-C]], [[Go]], [[Java]], [[JavaScript]]/[[ECMAScript]], [[C Sharp|C#]], [[D (язык программирования)|D]], [[Perl]], [[PHP]] (циклы <code>for</code> и <code>loop</code> , передача блоков как аргументов), [[Rust (язык программирования)|Rust]], [[Scala (язык программирования)|Scala]], [[S-Lang]], [[Swift (язык программирования)|Swift]], [[PowerShell|Windows PowerShell]], [[Haskell]] (в do-нотации), [[AutoHotkey]]
см. также [[:en:Curly bracket programming language|Curly bracket programming language]]

;Круглые скобки <code>(</code> … <code>)</code>
* [[OCaml]], [[Standard ML]]
;Квадратные скобки <code>[</code> … <code>]</code>
* [[Smalltalk]] (блоки — объекты первого класса, т. н. замыкания)
;<code>begin</code> … <code>end</code>:
* [[Ада (язык программирования)|Ада]], [[Алгол]], [[Паскаль (язык программирования)|Паскаль]], [[Ruby]] (циклы <code>for</code>, <code>do/while</code> и <code>do/until</code>), [[OCaml]], [[Simula]], [[Erlang]].
;<code>do</code> … <code>end</code>:
* [[ПЛ/1]] (PL/I), [[REXX]]
;<code>do</code> … <code>done</code>:
* [[Bash]] (циклы <code>for</code> и <code>while</code>), [[Visual Basic]], [[Фортран]], [[:en:TUTOR (programming language)|TUTOR]] (тело блока обязано быть с отступом), [[Visual Prolog]]
;<code>do</code> … <code>end</code>
* [[Lua]], [[Ruby]] (блоки передаются как аргументы, цикл <code>for</code>), [[Seed7]] (тело цикла заключено между '''<code>do</code>''' и '''<code>end</code>''')
;X … <code>end</code>''' (напр. <code>if</code> … <code>end</code>):'''
* [[Ruby]] (операторы <code>if</code>, <code>while</code>, <code>until</code>, <code>def</code>, <code>class</code>, <code>module</code>), [[OCaml]] (циклы <code>for</code> и <code>while</code>), [[MATLAB]] (операторы <code>if</code> и <code>switch</code>, циклы <code>for</code> и <code>while</code>, предложение <code>try</code> , блоки <code>package</code>, <code>classdef</code>, <code>properties</code>, <code>methods</code>, <code>events</code> и <code>function</code>), [[Lua]] (<code>then</code> / <code>else</code> и <code>function</code>)
;(<code>begin</code> …):
* [[Scheme]]
;(progn …):
* [[Лисп]]
;(<code>do</code> …):
* [[Clojure]]

;Отступы
* Значимые (см. [[:en:Off-side rule#Off-side rule languages|Off-side rule languages]]): [[Cobra (язык программирования)|Cobra]], [[CoffeeScript]], [[F Sharp|F#]], [[Haskell]] (в do-нотации без скобок), [[Occam]], [[Python]]
* Не имеют значения (см. [[:en:Free-form language|Free-form languages]]): потомки [[Алгол]]а (включая [[Си (язык программирования)|Си]], [[Паскаль (язык программирования)|Паскаль]] и [[Perl]]); языки семейства [[Лисп]]

;Другое
* [[Ада (язык программирования)|Ада]], [[Visual Basic]], [[Seed7]]: <code>if</code> … <code>end if</code>
* [[Bash]], [[Bourne shell|sh]], and [[Korn shell|ksh]]: <code>if</code> … <code>fi</code>, <code>do</code> … <code>done</code>, <code>case</code> … <code>esac</code>;
* [[Алгол 68]]: <code>begin</code> … <code>end</code>, <code>(</code> … <code>)</code>, <code>if</code> … <code>fi</code>, <code>do</code> … <code>od</code>
* [[Lua]], [[Паскаль (язык программирования)]], [[Модула-2]], [[Seed7]]: <code>repeat</code> … <code>until</code>
* [[Кобол]]: <code>IF</code> … <code>END-IF</code>, <code>PERFORM</code> … <code>END-PERFORM</code> и т. д. для операторов; … <code>.</code> для предложений.
* [[Visual Basic .NET]]: <code>If</code> … <code>End If</code>, <code>For</code> … <code>Next</code>, <code>Do</code> … <code>Loop</code>
* [[Microsoft Small Basic|Small Basic]]: <code>If</code> … <code>EndIf</code>, <code>For</code> … <code>EndFor</code>, <code>While</code> … <code>EndWhile</code>

== Комментарии ==
[[Комментарии (программирование)|Комментарии]] подразделяются по:
* стилю (однострочные/многострочные)
* правилам разбора/[[Трансляция|трансляции]] (ингорируются/интерполируются/сохраняются в памяти)
* рекурсивности (вкладываемые/не-вкладываемые)
* использованию (для документации (см. [[:en:docstring|docstrings]])/отбрасываемые/другие)

=== Однострочные комментарии ===
Как правило эти комментарии простираются до [[Перевод строки|символа перевода строки]], и используют оговоренную последовательность [[Токен (лексический анализ)|токенов]] для индикации начала комментария.

Примеры:

{| class="wikitable"
|-
! Символ
! Языки
|-
|<code>C</code>
|[[Фортран]] от I до Фортрана (C в первом столбце)
|-
|<code>REM</code>
|[[Бейсик]], [[Пакетный файл|Bat-файлы]]
|-
|<code>::</code>
|[[Пакетный файл|Bat-файлы]], [[COMMAND.COM]], [[Cmd.exe]]
|-
|-
|<code>NB.</code>
|[[J (язык программирования)|J]]; от аббревиатуры [[Nota bene]] (с [[Латинский язык|лат]]. — «заметь хорошо»).
|-
|-
|<code>⍝</code>
|[[APL (язык программирования)|APL]]; используется функциональный глиф (up shoe jot — U+235D) напоминающий лампу («освещающий» комментируемое).
|-
|<code>#</code>
|[[Bourne shell|sh]] и другие [[Командная оболочка Unix|оболочки UNIX]], [[Cobra (язык программирования)|Cobra]], [[Perl]], [[Python]], [[Ruby]], [[Seed7]], [[Windows PowerShell]], [[PHP]], [[R (язык программирования)|R]], [[make]], [[Maple]], [[Elixir (язык программирования)|Elixir]], [[Nim]]<ref>https://nim-lang.org/docs/manual.html#lexical-analysis-comments</ref>
|-
|<code>%</code>
|[[TeX]], [[Пролог (язык программирования)|Пролог]], [[MATLAB]],<ref name=Mathworks.com>{{cite web|title=Mathworks.com|url=http://www.mathworks.de/de/help/matlab/matlab_prog/comments.html|accessdate=25 июня 2013}}</ref> [[Erlang]], [[S-Lang]], [[Visual Prolog]]
|-
|<code>//</code>
|[[ActionScript]], [[Си (язык программирования)|Си)|C (C99)]], [[C++|Си++]], [[C Sharp|C#]], [[D (язык программирования)|D]], [[F Sharp|F#]], [[Go]], [[Java]], [[JavaScript]], [[Kotlin]], [[Object Pascal]] (Delphi), [[Objective-C]], [[PHP]], [[Rust (язык программирования)|Rust]], [[Scala (язык программирования)|Scala]], [[Sass]], [[Swift (язык программирования)|Swift]], [[Xojo]]
|-
|<code>'</code>
|[[Monkey (язык программирования)|Monkey]], [[Visual Basic]], [[VBScript]] [[Microsoft Small Basic|Small Basic]], [[Gambas]], [[Xojo]]
|-
|<code>!</code>
|[[Фортран]], Basic Plus, Inform, [[:en:Pick Basic|Pick Basic]]
|-
|<code>;</code>
|[[Язык ассемблера|Assembly x86]], [[AutoHotkey]], [[AutoIt]], [[Лисп]], [[Common Lisp]], [[Clojure]], [[REBOL]], [[Scheme]],
|-
|<code><nowiki>--</nowiki></code>
|[[Euphoria (язык программирования)|Euphoria]], [[Haskell]], [[SQL]], [[Ада (язык программирования)|Ада]], [[AppleScript]], [[Eiffel]], [[Lua]], [[VHDL]], [[SGML]]
|-
|<code>*</code>
|[[IBM System/360|Assembler S/360]] (* в первом столбце), [[Кобол]] от I до Коболa 85, [[:en:Physics Analysis Workstation|PAW]], Фортран от IV до Фортрана 77 (* в первом столбце), [[:en:Pick Basic|Pick Basic]]
|-
|<code><nowiki>||</nowiki></code>
|[[Curl (язык программирования)|Curl]]
|-
|<code><nowiki>"</nowiki></code>
|[[Vim]]script, [[ABAP/4|ABAP]]
|-
|<code><nowiki>\</nowiki></code>
|[[Форт (язык программирования)|Форт]]
|-
|<code>*></code>
|Кобол 90
|}

=== Многострочные комментарии ===
Как правило многострочные комментарии используют оговоренные последовательности символов для маркировки начала и конца комментария. В этом контексте символы [[Пробел|пустого места]] или [[Перевод строки|перевода строки]] игнорируются.

Примеры:

{| class="wikitable"
|-
! Символ
! Языки
|-
| <code>comment</code> ~ <code>;</code>
| [[Алгол]] 60, [[Симула]]
|-
| <code>¢</code> ~ <code>¢</code>,<br><code>#</code> ~ <code>#</code>, <code>co</code> ~ <code>co</code>,<br><code>comment</code> ~ <code>comment</code>
| [[Алгол 68]]<ref name=algolcomments>{{cite web|title=Algol68_revised_report-AB.pdf стр. 61-62, в оригинале стр. 121-122|url=http://www.softwarepreservation.org/projects/ALGOL/report/Algol68_revised_report-AB.pdf|accessdate=27 мая 2014}}</ref><ref name=algolcomments2>{{cite web|title=HTML Пересмотренный доклад о языке Algol68|url=http://jmvdveer.home.xs4all.nl/report.html#941h|accessdate=27 мая 2014|deadurl=yes|archiveurl=https://web.archive.org/web/20130317015548/http://jmvdveer.home.xs4all.nl/report.html#941h|archivedate=17 марта 2013|df=dmy-all}}</ref>
|-
| <code>/*</code> ~ <code>*/</code>
| [[ActionScript]], [[AutoHotkey]], [[Си (язык программирования)|Си]], [[C++|Си++]], [[C Sharp|C#]], [[D (язык программирования)|D]]<ref name=dcomments>{{cite web|title=DLang.org, Lexical|url=http://dlang.org/lex.html#comment|accessdate=27 мая 2014}}</ref> [[Go]], [[Java]], [[JavaScript]], [[Kotlin]], [[Objective-C]], [[PHP]], [[ПЛ/1]], [[Rexx]], [[Rust (язык программирования)|Rust]] (могут быть вложенными), [[Scala (язык программирования)|Scala]] (могут быть вложенными), [[:en:SAS language|SAS]], [[SASS]], [[SQL]], [[Swift (язык программирования)|Swift]], [[Visual Prolog]], [[CSS]]
|-
| <code>#cs</code> ~ <code>#ce</code>
| [[AutoIt]]<ref name=autoitscriptcomments>{{cite web|title=AutoItScript.com Keyword Reference, #comments-start|url=https://www.autoitscript.com/autoit3/docs/keywords/comments-start.htm|accessdate=27 мая 2014}}</ref>
|-
| <code>/+</code> ~ <code>+/</code>
| [[D (язык программирования)|D]] (могут быть вложенными)<ref name=dcomments/>
|-
| <code>/#</code> ~ <code>#/</code>
| [[Cobra (язык программирования)|Cobra]] (могут быть вложенными)
|-
| <code>&lt;#</code> ~ <code>#&gt;</code>
| [[Powershell]]
|-
| <code>=begin</code> ~ <code>=cut</code>
| [[Perl]]
|-
| <code>#`(</code> ~ <code>)</code>
| [[Perl6]] (можно использовать любые скобки — (), <>, {}, [], зеркальные пары символов [[Юникод]]а, а также символы [[Юникод]]а со свойствами [[:en:Unicode character property#General Category|Ps/Pe/Pi/Pf]])
|-
| <code>=begin</code> ~ <code>=end</code>
| [[Ruby]]
|-
| <code>#<[[Тег (метаданные)|TAG]]></code> ~ <code>#</[[Тег (метаданные)|TAG]]></code>, <code>#stop</code> ~ <code>[[EOF]]</code>,<br><code>#iffalse</code> ~ <code>#endif</code>, <code>#ifntrue</code> ~ <code>#endif</code>,<br> <code>#if false</code> ~ <code>#endif</code>, <code>#if !true</code> ~ <code>#endif</code>
| [[S-Lang]]<ref>{{cite web|title=slang-2.2.4/src/slprepr.c - line 43 to 113|url=ftp://space.mit.edu/pub/davis/slang/v2.2/slang-2.2.4.tar.bz2|accessdate=28 мая 2014}}</ref>
|-
| <code>{-</code> ~ <code>-}</code>
| [[Haskell]] (могут быть вложенными)
|-
| <code>(*</code> ~ <code>*)</code>
| [[ML]], [[Mathematica]], [[Object Pascal]] (Delphi), [[Паскаль (язык программирования)|Паскаль]], [[Seed7]], [[Applescript]], [[OCaml]] (могут быть вложенными), [[Standard ML]] (могут быть вложенными), [[Maple]], [[:en:Newspeak (programming language)|Newspeak]], [[F Sharp|F#]]
|-
| <code>{</code> ~ <code>}</code>
| [[Object Pascal]] (Delphi), [[Паскаль (язык программирования)|Паскаль]]
|-
| <code><nowiki>|#</nowiki></code> ~ <code><nowiki>#|</nowiki></code>
| [[Curl (язык программирования)|Curl]]
|-
| <code>%{</code> ~ <code>%}</code>
| [[MATLAB]]<ref name="Mathworks.com"/> (символы должны быть в отдельной строке)
|-
| <code><nowiki>#|</nowiki></code> ~ <code><nowiki>|#</nowiki></code>
| [[Лисп]], [[Scheme]], [[Racket (язык программирования)|Racket]] (во всех трёх могут быть вложенными).
|-
| <code>--[[</code> ~ <code>]]</code>,<br><code>--[=[</code> ~ <code>]=]</code>
| [[Lua]] (первая форма может включаться во вторую)
|-
| <code>"</code> ~ <code>"</code>
| [[Smalltalk]]
|-
| <code>(comment</code> ~ <code>)</code>
|[[Clojure]]
|}

=== Уникальные варианты ===

==== Фортран ====
* Решающее значение в [[Фортран]]e 66/77 имеют отступы. Основной оператор находится в столбцах с 7 по 72. Любой не пробел в столбце 6 указывает на то, что строка является продолжением предыдущей строки. Символ '<code>C</code>' в первом столбце указывает на то, что строка является комментарием . Столбцы с 1-го по 5-й могут содержать число, являющееся меткой. Столбцы с 73-го по 80-й игнорируются и могут быть комментарием; ранее в этих местах наносился номер [[Перфокарта|перфокарты]], что позволяло отсортировать их в случае падения колоды. В Фортране 90 правило отступов было упразднено и были добавлены однострочные комментарии с использованием символа <code>!</code>.

==== Кобол ====
* Отступы значимы в формате фиксированного кода. Содержание столбцов с 1-го по 6-й и после 73-го игнорируется. Если в 7-м столбце содержался символ <code>*</code> или <code>/</code> строка являлась комментарием. До версии [[Кобол]] 2002 если строка содержала в 7-м столбце символ <code>D</code> или <code>d</code> — это обозначало отладочную строку, которая могла игнорироваться в зависимости от режима компилирования.

==== Cobra ====
* [[Cobra (язык программирования)|Cobra]] поддерживает многострочные комментарии «<code>/#</code> … <code>#/</code>» похожие на встречающиеся в Си-подобных языках «<code>/*</code> … <code>*/</code>», однако с некоторыми отличиями. Символ <code>#</code> используется в однострочной форме комментариев «<code>#</code> …» и многострочные комментарии могут быть вложенными, что удобно при комментировании больших кусков кода.

==== Curl ====
* [[Curl (язык программирования)|Curl]] поддерживает многострочные комментарии при помощи пользовательских тегов <code>|foo# ... #foo|</code>.

==== Lua ====
* Как и в текстовых константах, в многострочном комментарии может использоваться произвольное число символов <code>=</code>, при условии, что такое же их число используется и в закрывающей последовательности; это позволяет реализовать множественное вложение комментариев и текстовых констант если все они используют различное количество знаков <code>=</code> в обрамляющих тегах: <code>--[[comment --[=[ nested comment ]=] ]]</code>. [[Lua]] игнорирует первый перенос строки, который следует сразу за открывающим тегом.

==== Perl 5 ====
* Многострочные комментарии в Perl 5 считаются частью документации и именуются «[[Простая старая документация]]» (англ. Plain Old Documentation — POD). Технически в Perl 5 нет соглашения о многострочных комментариях, но POD повсеместно используются в этом качестве.

==== Perl 6 ====
* В [[Perl 6]] для многострочных комментариев используется конструкция <code>#`(...)</code>.<ref>{{cite web|url=https://docs.perl6.org/language/syntax#Comments |title=Документация Perl 6 (синтаксис) |at=Comments |publisher=docs.perl6.org |date= |accessdate=2017-04-05}}</ref> Фактически Perl 6 позволяет использовать любые пары скобок после <code>#`</code> (напр. <code>#`(...)</code>, <code>#`[...]</code>, <code>#`{...}</code>, <code>#`<...></code>, и даже более сложные <code>#`&#123;{...}&#125;</code> являются полноценными комментариями). Скобки также можно вкладывать внутри комментариев (напр. в конструкции <code>#`{ a { b } c }</code> комментарий продолжается до последней закрывающей скобки).

==== PHP ====
{{Основная статья|PHP#Синтаксис}}

* [[PHP]] поддеживает стандартные комментарии в стиле C/C++ а также комментарии в стиле Perl.

==== Python ====
* Иногда для комментирования строк кода используются три двойных кавычки <code>"""</code>. На самом деле они создают не комментарий, а пустой оператор с текстовой константой, который [[Python]] игнорирует (за исключением случая, когда текстовая константа — первый оператор в теле модуля, класса или функции; см [[:en:docstring|docstring]])

==== Ruby ====
* Также как Python и Perl, Ruby не имеет определённого синтаксиса многострочных комментариев. Однако в качестве комментариев, как и в Perl, могут использоваться блоки документации, поскольку интерпретатор игнорирует их.

==== S-Lang ====
* Интерпретатор игнорирует регион кода обрамленный <code><nowiki>#&lt;tag&gt;</nowiki></code> и <code><nowiki>#&lt;/tag&gt;</nowiki></code>. Имя тега может быть любой алфавитно-цифровой последовательностью символов и указывать на способ обработки кода. Например, <code><nowiki>#&lt;latex&gt;</nowiki></code> может указывать на документацию в формате LaTeX.

==== Scheme and Racket ====
* Следующий полный синтаксический элемент (s-выражение) может быть откомментирован при помощи <code>#;</code> .

==== ABAP ====
* [[ABAP/4|ABAP]] поддерживает два типа комментариев. Если первый символ строки (вкл. отступ) является звёздочкой (<code>*</code>) вся строка считается комментарием, а кавычками (<code>"</code>) начинается комментарий до конца строки. Комментарии в ABAP невозможны между операторами <code>EXEC SQL</code> и <code>ENDEXEC</code> поскольку в SQL имеется другое применение этим символам. В большинстве диалектов SQL вместо этого используется двойной дефис (<code>--</code>).

==== Эзотерические языки программирования ====
* Большинство [[Эзотерический язык программирования|эзотерических языков программирования]] следует соглашению о том, что любой не [[Счётчик команд|исполняющийся]] (напр. [[Befunge]]) или не имеющий значения (напр. [[Brainfuck]]) кусок кода считается комментарием.

=== Сравнение комментариев ===
Существует большое разнообразие способов объявления комментариев в исходном коде.
<code>''BlockComment''</code> курсивом указывает многострочное тело комментария.
<code>''InlineComment''</code> курсивом указывает однострочное тело комментария.
<!--ПОМЕТКА: 20061101 ;; dreftymac
Указание на «многострочный» или «однострочный» комментарий могут быть некорректными, если Вы увидите ошибку в описании для известного Вам языка, пожалуйста замените здесь и в англ. версии страницы.
-->

{| class="wikitable"
|-
!width=30%| Язык
!width=30%| Однострочный комментарий
!width=40%| Многострочный комментарий
|-
|[[Ада (язык программирования)|Ада]], [[Eiffel]], [[Euphoria (язык программирования)|Euphoria]], [[Occam]], [[:en:SPARK (programming language)|SPARK]], ANSI [[SQL]], и [[VHDL]]
|<code>-- ''InlineComment''</code>
|
|-
|[[Алгол]] 60 (ALGOL 60)
|
|<code>comment ''BlockComment'';</code>
|-
|[[Алгол 68]] (ALGOL 68)
|
|<code>¢ ''BlockComment'' ¢</code><br>
<code><u>comment</u> ''BlockComment'' <u>comment</u></code><br>
<code><u>co</u> ''BlockComment'' <u>co</u></code><br>
<code># ''BlockComment'' #</code><br>
<code>£ ''BlockComment'' £</code><br>
|-
|[[APL (язык программирования)|APL]]
|<code>⍝ ''InlineComment''</code>
|
|-
|[[AppleScript]]
|<code>-- ''InlineComment''</code>
|<code>(* ''BlockComment'' *)</code>
|-
|[[Язык ассемблера]] (разн.)
|<code>; ''InlineComment''</code> только один пример (в большинстве ассемблеров есть только комментарии-строки)
|
|-
|[[AutoHotkey]]
|<code>; ''InlineComment''</code>
|<code>/* ''BlockComment'' */</code>
|-
|[[AWK]], [[Bash]], [[Bourne shell]], [[csh|C shell]], [[Maple]], [[R (язык программирования)|R]], [[Tcl]], и [[Windows PowerShell]]
|<code># ''InlineComment''</code>
|<code><# ''BlockComment'' #></code>
|-
|[[Бейсик]] (BASIC) разл. диалекты:
|<code>&#39;''InlineComment''</code> (not all dialects)<!-- заметьте, что символ &#39; не разрушает синтаксический разбор --><br>
<code>REM ''InlineComment''</code>
|
|-
|[[Си (язык программирования)|Си]] (K&R, ANSI/C89/C90), [[CHILL]], [[ПЛ/1]] (PL/I) и [[REXX]]
|
|<code>/* ''BlockComment'' */</code>
|-
|[[C99|C (C99)]], [[C++]], [[Go]] и [[JavaScript]]
|<code>// ''InlineComment''</code>
|<code>/* ''BlockComment'' */</code>
|-
|[[C Sharp|C#]]
|<code>// ''InlineComment''</code><br><code>/// ''InlineComment''</code> (XML комментарий-документация)
|<code>/* ''BlockComment'' */</code><br><code>/** ''BlockComment'' */</code> (XML комментарий-документация)
|-
|[[Кобол]] (COBOL) от I до Кобол 85
|<code> * ''InlineComment''</code> (* в столбце 7)
|
|-
|Кобол 2002
|<code>*> ''InlineComment''</code>
|
|-
|[[Curl (язык программирования)|Curl]]
|<code>&#124;&#124; ''InlineComment''</code>
|<code>&#124;# ''BlockComment'' #&#124;</code><br>
<code>&#124;foo# ''BlockComment'' #&#124;</code>
|-
|[[Cobra (язык программирования)|Cobra]]
|<code># ''InlineComment''</code>
|<code>/# ''BlockComment'' #/</code> (вкладываемые)
|-
|[[D (язык программирования)|D]]
|<code>// ''InlineComment''</code><br><code>/// Documentation ''InlineComment''</code> ([[:en:ddoc]] комментарии)
|<code>/* ''BlockComment'' */</code><br><code>/** Documentation ''BlockComment'' */</code> ([[:en:ddoc]] комментарии)<br>
<code>/+ ''BlockComment'' +/</code> (nestable)<br><code>/++ Documentation ''BlockComment'' +/</code> (вкладываемые, [[:en:ddoc]] комментарии)
|-
|[[DIGITAL Command Language|DCL]]
|<code>$! ''InlineComment''</code>
|
|-
|[[ECMAScript]] ([[JavaScript]], [[ActionScript]] и т. д.)
|<code>// ''InlineComment''</code>
|<code>/* ''BlockComment'' */</code>
|-
|[[Форт (язык программирования)|Форт]] (Forth)
|<code>\ ''InlineComment''</code>
|<code>( ''BlockComment'' )</code> (одно и многострочные)<br>
<code>( ''before'' -- ''after'' )</code> стековые комментарии
|-
|[[Фортран]] от I Фортран77
|<code>C ''InlineComment''</code> (C в первом столбце)
|
|-
|[[Фортран#Fortran 90 (1991)|Фортран 90]]
|<code>! ''InlineComment''</code>
|
|-
|[[Haskell]]
|<code>-- ''InlineComment''</code>
|<code>{- ''BlockComment'' -}</code>
|-
|[[Java]]
|<code>// ''InlineComment''</code>
|<code>/* ''BlockComment'' */</code><br>
<code>/** ''BlockComment'' */</code> ([[Javadoc]] комментарий-документация)
|-
|[[Лисп]] (Lisp) и [[Scheme]]
|<code>; ''InlineComment''</code>
|<code>#&#124; ''BlockComment'' &#124;#</code>
|-
|[[Lua]]
|<code>-- ''InlineComment''</code>
|<code><nowiki> --[==[ </nowiki>''BlockComment''<nowiki>]==]</nowiki></code> (варьируемое количество знаков =)
|-
|[[Maple]]
|<code># ''InlineComment''</code>
|<code>(* ''BlockComment'' *)</code>
|-
|[[Mathematica]]
|
|<code>(* ''BlockComment'' *)</code>
|-
|[[Matlab]]
|<code>% ''InlineComment''</code>
|<code>%{<br>''BlockComment (nestable)''<br>%}</code><br>Отметьте: оба символа процент-скобка должны быть единственными не пустыми символами (пробелами, табуляциями и др.) на своих строках.
|-
|[[Object Pascal|Object Pascal (Delphi)]]
|<code>// ''InlineComment''</code>
|<code>(* ''BlockComment'' *)</code><br><code>{ ''BlockComment'' }</code>
|-
|[[OCaml]]
|
|<code>(* ''BlockComment (* вкладываемые *)'' *)</code>
|-
|[[Паскаль (язык программирования)|Паскаль]] (Pascal), [[Модула-2]], [[Модула-3]] (Modula-2,3), [[Оберон (язык программирования)|Оберон]] (Oberon) и [[ML]]:
|
|<code>(* ''BlockComment'' *)</code>
|-
|[[Perl]] и [[Ruby]]
|<code># ''InlineComment'' </code>
|<code>=begin<br/>''BlockComment''<br/>=cut</code> (<code>=end</code> в Ruby) ([[Простая старая документация|POD]] комментарий-документация)<br>
<code><nowiki>__END__</nowiki><br>''Комментарии после окончания кода''</code>
|-
|[[Perl 6]]
|<code># ''InlineComment'' </code>
|<code>#`{<br/>''BlockComment''<br/>}</code><br>
<code>=comment<br/>''&nbsp;&nbsp;&nbsp;&nbsp;Комментарий продолжается до следующей POD директивы''<br/>''&nbsp;&nbsp;&nbsp;&nbsp; или первой пустой строки.''</code><ref>{{cite web |url=https://docs.perl6.org/language/pod#Pod_comments |title=Perl 6 POD Comments}}</ref><ref>{{cite web |url=https://docs.perl6.org/language/pod#Abbreviated_blocks |title=Perl 6 POD (Abbreviated Blocks)}}</ref>
|-
|[[PHP]]
|<code># ''InlineComment''</code><br><code>// ''InlineComment''</code>
|<code>/* ''BlockComment'' */</code><br><code>/** документация ''BlockComment'' */</code> ([[PHPDoc|PHP комментарий-документация]])
|-
|[[:en:PILOT|PILOT]]
|<code>R:''InlineComment''</code>
|
|-
|[[PLZ/SYS]]
|
|<code>! ''BlockComment'' !</code>
|-
|[[PL/SQL]] and [[Transact-SQL|TSQL]]
|<code>-- ''InlineComment''</code>
|<code>/* ''BlockComment'' */</code>
|-
|[[Python]]
|<code># ''InlineComment'' </code>
|<code><nowiki>'''</nowiki> ''BlockComment'' <nowiki>'''</nowiki><br>""" ''BlockComment'' """</code><br>
([[:en:Docstring|Комментарий-документация]] если это первая строка модуля, класса, метода или функции)
|-
|[[Rust (язык программирования)|Rust]]
|<code>// ''InlineComment''</code><br>
<code>/// ''InlineComment''</code> («Внешний» комментарий rustdoc)<br>
<code>//! ''InlineComment''</code> («Внутренний» комментарий rustdoc)
|<code>/* ''BlockComment'' */</code> (вкладываемый)<br>
<code>/** ''BlockComment'' */</code> («Внешний» комментарий rustdoc)<br>
<code>/*! ''BlockComment'' */</code> («Внутренний» комментарий rustdoc)
|-
|[[:en:SAS System|SAS]]
|
|<code>* ''BlockComment'';</code><br><code>/* ''BlockComment'' */</code>
|-
|[[Seed7]]
|<code># ''InlineComment''</code>
|<code>(* ''BlockComment'' *)</code>
|-
|[[Симула]] (Simula)
|
|<code>comment ''BlockComment'';</code><br><code>! ''BlockComment'';</code>
|-
|[[Smalltalk]]
|
|<code>"''BlockComment''"</code>
|-
|[[Smarty]]
|
|<code>{* ''BlockComment'' *}</code>
|-
|[[Standard ML]]
|
|<code>(* ''BlockComment'' *)</code>
|-
|[[TeX]], [[LaTeX]], [[PostScript]], [[Erlang]], [[Elixir (язык программирования)|Elixir]] and [[S-Lang]]
|<code>% ''InlineComment''</code>
|
|-
|[[Texinfo]]
|<code>@c ''InlineComment''</code>
<code>@comment ''InlineComment''</code>
|
|-
|[[:en:TUTOR (programming language)|TUTOR]]
|<code>* ''InlineComment''</code><br><code>''command'' $$ ''InlineComment''</code>
|
|-
|[[Visual Basic]]
|<code><nowiki>'</nowiki> ''InlineComment''</code><br><code>Rem ''InlineComment''</code>
|
|-
|[[Visual Basic .NET]]
|<code><nowiki>'</nowiki> ''InlineComment''</code><br>
<code><nowiki>'''</nowiki> ''InlineComment''</code> (XML комментарий-документация)<br>
<code>Rem ''InlineComment''</code>
|
|-
|[[Visual Prolog]]
|<code>% ''InlineComment''</code>
|<code>/* ''BlockComment'' */</code>
|-
|[[Wolfram (язык программирования)|Wolfram]]
|
|<code>(* ''BlockComment'' *)</code>
|-
|[[Xojo]]
|<code>' ''InlineComment''</code><br><code>// ''InlineComment''</code><br><code>rem ''InlineComment''</code>
|
|}


== См. также ==
== См. также ==

Версия от 11:19, 27 апреля 2019

Программи́рованиепроцесс и искусство создания компьютерных программ с помощью языков программирования[1][2].

Программирование сочетает в себе элементы искусства, науки, математики и инженерии.

В узком смысле слова, программирование рассматривается как кодирование — реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования. В более широком смысле, программирование — процесс создания программ, то есть разработка программного обеспечения.

Большая часть работы программиста связана с написанием исходного кода на одном из языков программирования.

Различные языки программирования поддерживают различные стили программирования (т. н. парадигмы программирования). Отчасти, искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).

Единственный язык, напрямую выполняемый процессором — это машинный язык (также называемый машинным кодом). Изначально, все программисты прорабатывали каждую мелочь в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого, программисты пишут исходный код, и компьютер (используя компилятор, интерпретатор или ассемблер) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Даже если требуется полный низкоуровневый контроль над системой, программисты пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора.

В некоторых языках, вместо машинного кода генерируется интерпретируемый двоичный код "виртуальной машины", также называемый байт-кодом (byte-code). Такой подход применяется в Forth, Lisp, Java, Perl, Python а также в языках платформы Microsoft .NET.

Парадигмы программирования

Функциональное программирование в соответствующем Вики-учебнике подробно изложено, поэтому поговорим об императивном программировании.

Для императивных языков программирования можно выделить 4 современных парадигмы программирования:

  1. Процедурное программирование (ПП)
  2. Объектно-ориентированное программирование (ООП)
  3. Компонентно-ориентированое программирование (КОП)
  4. Аспектно-ориентированое программирование (АОП)

Процедурное программирование

Вот пример процедурного кода, выводящего строку:

<?php

echo "Hello, world!";

?>

Вот пример объектно-ориентированного кода, который делает то же самое:

<?php

class helloWorld { 
  function myPrint() { 
    echo "Hello, world!"; 
  } 
} 
$myHelloWorld = new helloWorld(); 
$myHelloWorld->myPrint();

?>

Методологии программирования

Сравнение языков программирования

  В этой статье сравнивается более 50 языков программирования по основным свойствам синтаксиса.

Выражения

Выражения в языках программирования в широком смысле могут быть подразделены на 4 типа по синтаксической структуре:

префиксная запись
инфиксная запись
суффиксная, постфиксная или Обратная польская запись
запись выражений в математическом стиле
  • Wolfram (2 + 3)(4^5) (* отметим неявный оператор умножения *)

Операторы

Как правило в языках программирования имеются следующие соглашения по операторам:

  • о разделителях операторов;
  • о терминаторах операторов; и
  • о продолжении строки

Разделитель операторов используется для демаркации границы между двумя отдельными операторами. Терминатор операторов используется для маркировки конца отдельного оператора. Языки, которые интерпретируют конец строки как конец оператора называются однострочными[3] языками программирования.

«Продолжение строки» — это соглашение для однострочных языков о ситуациях, когда символ окончания строки может быть неправильно интерпретирован как окончание оператора. В таких языках «продолжение строки» позволяет оператору охватывать более одной строки.


Язык Разделитель-терминатор операторов Дополнительный разделитель[4]
ABAP разделитель — точка '.'
Ада (Ada) терминатор — точка с запятой ';'
Алгол (ALGOL) разделитель — точка с запятой ';'
Алгол 68 (ALGOL 68) разделитель — точка с запятой ';' и запятая ','[5]
APL терминатор — новая строка разделитель —
AppleScript терминатор — новая строка
AutoHotkey терминатор — новая строка
Бейсик (BASIC) терминатор — новая строка разделитель — двоеточие ':'
Boo терминатор — новая строка
Си (C) терминатор — точка с запятой ';' разделитель выражений — запятая ','
C++ терминатор — точка с запятой ';' разделитель выражений — запятая ','
C# терминатор — точка с запятой ';'
Кобол (COBOL) разделитель — пробел, иногда точка '.', имеется возможность разделять запятыми ',' и точками с запятыми ';'.
Cobra терминатор — новая строка
CoffeeScript терминатор — новая строка
D терминатор — точка с запятой ';'
Eiffel терминатор — новая строка точка с запятой ';'
Erlang разделитель — двоеточие ':', терминатор — точка '.'
F# терминатор — новая строка точка с запятой ';'
Фортран (Fortran) терминатор — новая строка точка с запятой ';'
Форт (Forth) терминатор определений слов — точка с запятой ';'
GFA BASIC терминатор — новая строка
Go разделитель — точка с запятой ';' (вставляется компилятором)
Haskell (в do-нотации) разделитель — новая строка
Haskell (в do-нотации, при использовании скобок) разделитель — точка с запятой ';'
Java терминатор — точка с запятой ';'
JavaScript разделитель — точка с запятой ';' (иногда неявно делится по новой строке)
Kotlin разделитель — точка с запятой ';' (иногда неявно делится по новой строке)
Lua разделитель — пробел (возможна точка с запятой ';')
Mathematica разделитель — точка с запятой ';'
MATLAB терминатор — новая строка точка с запятой ';' или запятая ','[6]
Object Pascal (Delphi) разделитель — точка с запятой ';'
Objective-C терминатор — точка с запятой ';'
OCaml разделитель — точка с запятой ';'
Паскаль (Pascal) разделитель — точка с запятой ';'
Perl разделитель — точка с запятой ';'
Perl 6 разделитель — точка с запятой ';'
PHP терминатор — точка с запятой ';'
Pick Basic терминатор — новая строка разделитель — точка с запятой ';'
PowerShell терминатор — новая строка разделитель — точка с запятой ';'
Пролог (Prolog) терминатор — точка '.'
Python терминатор — новая строка точка с запятой ';'
Ruby терминатор — новая строка точка с запятой ';'
Rust терминатор операторов — точка с запятой ';' разделитель выражений — запятая ','
Scala терминатор — новая строка (возможна точка с запятой ';') точка с запятой ';'
Seed7 разделитель — точка с запятой ';' (возможность использовать как терминатор)
Симула (Simula) разделитель — точка с запятой ';'
S-Lang разделитель — точка с запятой ';'
Smalltalk разделитель — точка '.'
Standard ML разделитель — точка с запятой ';'
Swift разделитель — точка с запятой ';' (вставляется компилятором)
Visual Basic терминатор — новая строка разделитель — двоеточие ':'
Visual Basic .NET терминатор — новая строка разделитель — двоеточие ':'
Wolfram разделитель — точка с запятой ';'
Xojo терминатор — новая строка
Язык Разделитель-терминатор операторов Дополнительный разделитель[4]

Продолжение строки

Операция продолжения строки обычно происходит на стадии лексического анализа: как правило символ новой строки не добавляет токен в соотв. список, если было обнаружено продолжение строки.

Символы пустого пространства — языки не требующие продолжения строки
  • Ада — Строка обрывается точкой с запятой
  • C# — Строка обрывается точкой с запятой
  • JavaScript — Строка обрывается точкой с запятой (возможен неявный обрыв)
  • Lua
  • OCaml
Амперсанд как последний символ строки
Обратная косая черта как последний символ строки
Гравис как последний символ строки
Дефис как последний символ строки
Подчёркивание как последний символ строки
Многоточие (три точки, а не отдельный спец. символ)
  • MATLAB: Многоточие не должно являться последним символом строки, однако все последующие символы игнорируются.[9] (По сути оно начинает комментарий, который продолжается и на следующей строке, в отличие от однострочного комментария, который продолжается лишь до окончания строки.)
Запятая как последний символ строки
  • Ruby (за запятой может быть комментарий)


Левая скобка как последний символ строки
Оператор в качестве последнего объекта строки
  • Ruby (за оператором может быть комментарий)
Оператор в начале продолжающейся строки
  • AutoHotkey: Любой оператор выражений за исключением ++ и --, а также точка или запятая[11]
Обратная косая черта в начале продолжающейся строки
Какая-либо форма однострочных комментариев как продолжение строки
Позиция символа
  • Фортран 77: Строка не являющаяся комментарием будет продолжением предыдущей строки не комментария в случае если на позиции 6 находится не пробел. Строки являющиеся комментариями не могут быть продолжены.
  • Кобол: Текстовые константы могут быть продолжены, если не закончить их в предложении PICTURE символом ', а затем вставить символ - в 7 м столбце (на той же позиции, на которой использовался символ * для комментария)
  • TUTOR: Строки, начинающиеся символом табуляции (после требуемого контекстом отступа) продолжают предыдущую команду.
Использование кавычек
  • Препроцессор Си и Си++: Использование кавычки в начале строки продолжает предыдущую строку после обычного окончания.

Библиотеки

Импорт библиотеки — это способ добавить внешние (возможно откомпилированные) процедуры, программы или пакеты. Импорты классифицируют по уровню (модуль, пакет, класс, процедура,…) и по синтаксису (директивы, атрибуты,…)

Импорт файлов
Импорт пакетов
  • Ада: with package
  • Си, Си++: #include filename
  • Cobra: use Package.Name
  • D: import package.module;, import altname = package.module;
  • Falcon: load module, load module.submodule
  • Фортран 90+: use module, use module, only : identifier
  • Go: import altname "package/name"
  • Haskell: import Module, import qualified Module as M
  • Java, MATLAB, Kotlin: import package.*
  • JavaScript: import altname from "modname";, import "modname";
  • Lua: require("modname")
  • Mathematica и Wolfram: <<name
  • Оберон (Oberon): IMPORT module
  • Objective-C: @import module;
  • Паскаль: uses unit
  • Perl: use Module;, use Module qw(import options);
  • Python: import module, from module import *
  • Rust: mod modname;, #[path = "filename"] mod altname;, extern crate libname;, extern crate libname as altname;
  • R: library("package")
  • Scala: import package._, import package
  • Swift: import module
Импорт классов
  • Falcon: import class
  • Java, MATLAB, Kotlin: import package.class
  • JavaScript: import class from "modname";, import {class} from "modname";, import {class as altname} from "modname";
  • PHP: use Namespace\ClassName;, use Namespace\ClassName as AliasName;
  • Python: from module import class
  • Scala: import package.class, import package.{ class1 => alternativeName, class2 }, import package._
Импорт процедур/функций
  • D: import package.module : symbol;, import package.module : altsymbolname = symbol;
  • Haskell: import Module (function)
  • JavaScript: import function from "modname";, import {function} from "modname";, import {function as altname} from "modname";
  • MATLAB: import package.function
  • Perl: use Module ('symbol');
  • PHP: use function Namespace\function_name;, use Namespace\function_name as function_alias_name;
  • Python: from module import function
  • Rust: use module::submodule::symbol;, use module::submodule::{symbol1, symbol2};, use module::submodule::symbol as altname;
  • Scala: import package.class.function, import package.class.{ function => alternativeName, otherFunction }
Импорт констант
  • PHP: use const Namespace\CONST_NAME;

Вышеуказанные операторы также могут быть разделены на 2 группы — являются ли они синтаксическим удобством (просто добавляют элементам краткое название, при этом элементы всё равно доступны по своему полному названию), либо нужны для доступа к коду (без этого оператора доступ к элементам невозможен даже при наличии полного имени).

Синтаксическое удобство
  • Java: import package.*, import package.class
  • OCaml: open module
Необходимы для доступа к коду
  • Go: import altname "package/name"
  • JavaScript: import altname from "modname";
  • Python: import module

Блоки

Блок представляет собой способ группировки двух или более отдельных операторов, выражений или иных элементов кода, которые должны представлять собой целое..

Скобки (фигурные скобки) {}

см. также Curly bracket programming language

Круглые скобки ()
Квадратные скобки []
  • Smalltalk (блоки — объекты первого класса, т. н. замыкания)
beginend
doend
dodone
doend
  • Lua, Ruby (блоки передаются как аргументы, цикл for), Seed7 (тело цикла заключено между do и end)
X … end (напр. ifend):
  • Ruby (операторы if, while, until, def, class, module), OCaml (циклы for и while), MATLAB (операторы if и switch, циклы for и while, предложение try , блоки package, classdef, properties, methods, events и function), Lua (then / else и function)
(begin …)
(progn …)
(do …)
Отступы
Другое

Комментарии

Комментарии подразделяются по:

  • стилю (однострочные/многострочные)
  • правилам разбора/трансляции (ингорируются/интерполируются/сохраняются в памяти)
  • рекурсивности (вкладываемые/не-вкладываемые)
  • использованию (для документации (см. docstrings)/отбрасываемые/другие)

Однострочные комментарии

Как правило эти комментарии простираются до символа перевода строки, и используют оговоренную последовательность токенов для индикации начала комментария.

Примеры:

Символ Языки
C Фортран от I до Фортрана (C в первом столбце)
REM Бейсик, Bat-файлы
:: Bat-файлы, COMMAND.COM, Cmd.exe
NB. J; от аббревиатуры Nota beneлат. — «заметь хорошо»).
APL; используется функциональный глиф (up shoe jot — U+235D) напоминающий лампу («освещающий» комментируемое).
# sh и другие оболочки UNIX, Cobra, Perl, Python, Ruby, Seed7, Windows PowerShell, PHP, R, make, Maple, Elixir, Nim[13]
% TeX, Пролог, MATLAB,[14] Erlang, S-Lang, Visual Prolog
// ActionScript, Си)|C (C99), Си++, C#, D, F#, Go, Java, JavaScript, Kotlin, Object Pascal (Delphi), Objective-C, PHP, Rust, Scala, Sass, Swift, Xojo
' Monkey, Visual Basic, VBScript Small Basic, Gambas, Xojo
! Фортран, Basic Plus, Inform, Pick Basic
; Assembly x86, AutoHotkey, AutoIt, Лисп, Common Lisp, Clojure, REBOL, Scheme,
-- Euphoria, Haskell, SQL, Ада, AppleScript, Eiffel, Lua, VHDL, SGML
* Assembler S/360 (* в первом столбце), Кобол от I до Коболa 85, PAW, Фортран от IV до Фортрана 77 (* в первом столбце), Pick Basic
|| Curl
" Vimscript, ABAP
\ Форт
*> Кобол 90

Многострочные комментарии

Как правило многострочные комментарии используют оговоренные последовательности символов для маркировки начала и конца комментария. В этом контексте символы пустого места или перевода строки игнорируются.

Примеры:

Символ Языки
comment ~ ; Алгол 60, Симула
¢ ~ ¢,
# ~ #, co ~ co,
comment ~ comment
Алгол 68[15][16]
/* ~ */ ActionScript, AutoHotkey, Си, Си++, C#, D[17] Go, Java, JavaScript, Kotlin, Objective-C, PHP, ПЛ/1, Rexx, Rust (могут быть вложенными), Scala (могут быть вложенными), SAS, SASS, SQL, Swift, Visual Prolog, CSS
#cs ~ #ce AutoIt[18]
/+ ~ +/ D (могут быть вложенными)[17]
/# ~ #/ Cobra (могут быть вложенными)
<# ~ #> Powershell
=begin ~ =cut Perl
#`( ~ ) Perl6 (можно использовать любые скобки — (), <>, {}, [], зеркальные пары символов Юникода, а также символы Юникода со свойствами Ps/Pe/Pi/Pf)
=begin ~ =end Ruby
#<TAG> ~ #</TAG>, #stop ~ EOF,
#iffalse ~ #endif, #ifntrue ~ #endif,
#if false ~ #endif, #if !true ~ #endif
S-Lang[19]
{- ~ -} Haskell (могут быть вложенными)
(* ~ *) ML, Mathematica, Object Pascal (Delphi), Паскаль, Seed7, Applescript, OCaml (могут быть вложенными), Standard ML (могут быть вложенными), Maple, Newspeak, F#
{ ~ } Object Pascal (Delphi), Паскаль
|# ~ #| Curl
%{ ~ %} MATLAB[14] (символы должны быть в отдельной строке)
#| ~ |# Лисп, Scheme, Racket (во всех трёх могут быть вложенными).
--[[ ~ ]],
--[=[ ~ ]=]
Lua (первая форма может включаться во вторую)
" ~ " Smalltalk
(comment ~ ) Clojure

Уникальные варианты

Фортран

  • Решающее значение в Фортранe 66/77 имеют отступы. Основной оператор находится в столбцах с 7 по 72. Любой не пробел в столбце 6 указывает на то, что строка является продолжением предыдущей строки. Символ 'C' в первом столбце указывает на то, что строка является комментарием . Столбцы с 1-го по 5-й могут содержать число, являющееся меткой. Столбцы с 73-го по 80-й игнорируются и могут быть комментарием; ранее в этих местах наносился номер перфокарты, что позволяло отсортировать их в случае падения колоды. В Фортране 90 правило отступов было упразднено и были добавлены однострочные комментарии с использованием символа !.

Кобол

  • Отступы значимы в формате фиксированного кода. Содержание столбцов с 1-го по 6-й и после 73-го игнорируется. Если в 7-м столбце содержался символ * или / строка являлась комментарием. До версии Кобол 2002 если строка содержала в 7-м столбце символ D или d — это обозначало отладочную строку, которая могла игнорироваться в зависимости от режима компилирования.

Cobra

  • Cobra поддерживает многострочные комментарии «/##/» похожие на встречающиеся в Си-подобных языках «/**/», однако с некоторыми отличиями. Символ # используется в однострочной форме комментариев «# …» и многострочные комментарии могут быть вложенными, что удобно при комментировании больших кусков кода.

Curl

  • Curl поддерживает многострочные комментарии при помощи пользовательских тегов |foo# ... #foo|.

Lua

  • Как и в текстовых константах, в многострочном комментарии может использоваться произвольное число символов =, при условии, что такое же их число используется и в закрывающей последовательности; это позволяет реализовать множественное вложение комментариев и текстовых констант если все они используют различное количество знаков = в обрамляющих тегах: --[[comment --[=[ nested comment ]=] ]]. Lua игнорирует первый перенос строки, который следует сразу за открывающим тегом.

Perl 5

  • Многострочные комментарии в Perl 5 считаются частью документации и именуются «Простая старая документация» (англ. Plain Old Documentation — POD). Технически в Perl 5 нет соглашения о многострочных комментариях, но POD повсеместно используются в этом качестве.

Perl 6

  • В Perl 6 для многострочных комментариев используется конструкция #`(...).[20] Фактически Perl 6 позволяет использовать любые пары скобок после #` (напр. #`(...), #`[...], #`{...}, #`<...>, и даже более сложные #`{{...}} являются полноценными комментариями). Скобки также можно вкладывать внутри комментариев (напр. в конструкции #`{ a { b } c } комментарий продолжается до последней закрывающей скобки).

PHP

Основная статья: PHP#Синтаксис
  • PHP поддеживает стандартные комментарии в стиле C/C++ а также комментарии в стиле Perl.

Python

  • Иногда для комментирования строк кода используются три двойных кавычки """. На самом деле они создают не комментарий, а пустой оператор с текстовой константой, который Python игнорирует (за исключением случая, когда текстовая константа — первый оператор в теле модуля, класса или функции; см docstring)

Ruby

  • Также как Python и Perl, Ruby не имеет определённого синтаксиса многострочных комментариев. Однако в качестве комментариев, как и в Perl, могут использоваться блоки документации, поскольку интерпретатор игнорирует их.

S-Lang

  • Интерпретатор игнорирует регион кода обрамленный #<tag> и #</tag>. Имя тега может быть любой алфавитно-цифровой последовательностью символов и указывать на способ обработки кода. Например, #<latex> может указывать на документацию в формате LaTeX.

Scheme and Racket

  • Следующий полный синтаксический элемент (s-выражение) может быть откомментирован при помощи #; .

ABAP

  • ABAP поддерживает два типа комментариев. Если первый символ строки (вкл. отступ) является звёздочкой (*) вся строка считается комментарием, а кавычками (") начинается комментарий до конца строки. Комментарии в ABAP невозможны между операторами EXEC SQL и ENDEXEC поскольку в SQL имеется другое применение этим символам. В большинстве диалектов SQL вместо этого используется двойной дефис (--).

Эзотерические языки программирования

Сравнение комментариев

Существует большое разнообразие способов объявления комментариев в исходном коде. BlockComment курсивом указывает многострочное тело комментария. InlineComment курсивом указывает однострочное тело комментария.

Язык Однострочный комментарий Многострочный комментарий
Ада, Eiffel, Euphoria, Occam, SPARK, ANSI SQL, и VHDL -- InlineComment
Алгол 60 (ALGOL 60) comment BlockComment;
Алгол 68 (ALGOL 68) ¢ BlockComment ¢

comment BlockComment comment
co BlockComment co
# BlockComment #
£ BlockComment £

APL InlineComment
AppleScript -- InlineComment (* BlockComment *)
Язык ассемблера (разн.) ; InlineComment только один пример (в большинстве ассемблеров есть только комментарии-строки)
AutoHotkey ; InlineComment /* BlockComment */
AWK, Bash, Bourne shell, C shell, Maple, R, Tcl, и Windows PowerShell # InlineComment <# BlockComment #>
Бейсик (BASIC) разл. диалекты: 'InlineComment (not all dialects)

REM InlineComment

Си (K&R, ANSI/C89/C90), CHILL, ПЛ/1 (PL/I) и REXX /* BlockComment */
C (C99), C++, Go и JavaScript // InlineComment /* BlockComment */
C# // InlineComment
/// InlineComment (XML комментарий-документация)
/* BlockComment */
/** BlockComment */ (XML комментарий-документация)
Кобол (COBOL) от I до Кобол 85 * InlineComment (* в столбце 7)
Кобол 2002 *> InlineComment
Curl || InlineComment |# BlockComment #|

|foo# BlockComment #|

Cobra # InlineComment /# BlockComment #/ (вкладываемые)
D // InlineComment
/// Documentation InlineComment (en:ddoc комментарии)
/* BlockComment */
/** Documentation BlockComment */ (en:ddoc комментарии)

/+ BlockComment +/ (nestable)
/++ Documentation BlockComment +/ (вкладываемые, en:ddoc комментарии)

DCL $! InlineComment
ECMAScript (JavaScript, ActionScript и т. д.) // InlineComment /* BlockComment */
Форт (Forth) \ InlineComment ( BlockComment ) (одно и многострочные)

( before -- after ) стековые комментарии

Фортран от I Фортран77 C InlineComment (C в первом столбце)
Фортран 90 ! InlineComment
Haskell -- InlineComment {- BlockComment -}
Java // InlineComment /* BlockComment */

/** BlockComment */ (Javadoc комментарий-документация)

Лисп (Lisp) и Scheme ; InlineComment #| BlockComment |#
Lua -- InlineComment --[==[ BlockComment]==] (варьируемое количество знаков =)
Maple # InlineComment (* BlockComment *)
Mathematica (* BlockComment *)
Matlab % InlineComment %{
BlockComment (nestable)
%}

Отметьте: оба символа процент-скобка должны быть единственными не пустыми символами (пробелами, табуляциями и др.) на своих строках.
Object Pascal (Delphi) // InlineComment (* BlockComment *)
{ BlockComment }
OCaml (* BlockComment (* вкладываемые *) *)
Паскаль (Pascal), Модула-2, Модула-3 (Modula-2,3), Оберон (Oberon) и ML: (* BlockComment *)
Perl и Ruby # InlineComment =begin
BlockComment
=cut
(=end в Ruby) (POD комментарий-документация)

__END__
Комментарии после окончания кода

Perl 6 # InlineComment #`{
BlockComment
}

=comment
    Комментарий продолжается до следующей POD директивы
     или первой пустой строки.
[21][22]

PHP # InlineComment
// InlineComment
/* BlockComment */
/** документация BlockComment */ (PHP комментарий-документация)
PILOT R:InlineComment
PLZ/SYS ! BlockComment !
PL/SQL and TSQL -- InlineComment /* BlockComment */
Python # InlineComment ''' BlockComment '''
""" BlockComment """

(Комментарий-документация если это первая строка модуля, класса, метода или функции)

Rust // InlineComment

/// InlineComment («Внешний» комментарий rustdoc)
//! InlineComment («Внутренний» комментарий rustdoc)

/* BlockComment */ (вкладываемый)

/** BlockComment */ («Внешний» комментарий rustdoc)
/*! BlockComment */ («Внутренний» комментарий rustdoc)

SAS * BlockComment;
/* BlockComment */
Seed7 # InlineComment (* BlockComment *)
Симула (Simula) comment BlockComment;
! BlockComment;
Smalltalk "BlockComment"
Smarty {* BlockComment *}
Standard ML (* BlockComment *)
TeX, LaTeX, PostScript, Erlang, Elixir and S-Lang % InlineComment
Texinfo @c InlineComment

@comment InlineComment

TUTOR * InlineComment
command $$ InlineComment
Visual Basic ' InlineComment
Rem InlineComment
Visual Basic .NET ' InlineComment

''' InlineComment (XML комментарий-документация)
Rem InlineComment

Visual Prolog % InlineComment /* BlockComment */
Wolfram (* BlockComment *)
Xojo ' InlineComment
// InlineComment
rem InlineComment

См. также

Литература

Примечания

  1. нет АИ
  2. см.также wikt:программирование
  3. https://translate.yandex.ru/?utm_source=wizard&text=line-oriented&lang=en-ru
  4. а б для нескольких операторов на одной строке
  5. Три типа предложений, каждое разделяет части по-разному:
      1. последовательное предложение использует токен продолжения (точка с запятой ';'): begin a; b; c end — элементы исполняются по очереди.
      2. непоследовательное предложение использует токен и-также (запятая «,»): begin a, b, c end — очередность исполнения определяется оптимизатором компилятора..
      3. параллельное предложение использует токен и-также (запятая «,»): par begin a, b, c end — элементы необходимо исполнять в параллельных потоках.
  6. точка с запятой — спрятать результат оператора, запятая — показать результат
  7. Bash Reference Manual, 3.1.2.1 Escape Character
  8. Python Documentation, 2. Lexical analysis: 2.1.5. Explicit line joining
  9. Mathworks.com Шаблон:Webarchive
  10. https://ss64.com/nt/syntax-brackets.html
  11. https://autohotkey.com/docs/Scripts.htm#continuation
  12. Чтобы М-файл (код MATLAB) был доступен по имени, он должен находится в текущем каталоге либо, либо каталоге из пути поиска.
  13. https://nim-lang.org/docs/manual.html#lexical-analysis-comments
  14. а б Mathworks.com Проверено 25 июня 2013 г.
  15. Algol68_revised_report-AB.pdf стр. 61-62, в оригинале стр. 121-122 Проверено 27 мая 2014 г.
  16. HTML Пересмотренный доклад о языке Algol68 Проверено 27 мая 2014 г. Архивировано из первоисточника 17 марта 2013.
  17. а б DLang.org, Lexical Проверено 27 мая 2014 г.
  18. AutoItScript.com Keyword Reference, #comments-start Проверено 27 мая 2014 г.
  19. slang-2.2.4/src/slprepr.c - line 43 to 113 Проверено 28 мая 2014 г.
  20. Документация Perl 6 (синтаксис). docs.perl6.org. Проверено 2017-04-05 г.
  21. Perl 6 POD Comments
  22. Perl 6 POD (Abbreviated Blocks)