[Ненормальное программирование, PHP, JavaScript, Erlang/OTP] 20_20 — год в котором подчеркивание в числовых литералах победило
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Вдруг вы не знали, но в языке, на котором вы пишите, вы можете использовать _ в цифрах. Например, следующий код на PHP:
<?php
print(1_00);
print(100);
Выведет 100100 (проверить онлайн). Этот синтаксический сахар появился в Ada в 1980 году, и он имел переменный успех последние 40 лет. Но, за последний год его добавили в javascript, PHP, Go, Scala и даже консервативный Elrlang. Я не могу объяснить, что послужило всплеском популярности, поэтому в статье просто опишу историю разделителей в цифрах.
19 68 Algol
На заре программирования не особенно заморачивались с пробелами, а поэтому в Algol в именах переменных и цифрах можно было вставлять пробел. Например, a 1 st var — корректное название переменной, и синоним a1stvar. Код:
BEGIN
INT a 1 st var = 1 234 567;
REAL a 2 nd var = 3 . 1 4159 26 5 359;
print((a1stvar, newline, a2ndvar))
END
Выведет (проверить):
+1234567
+3.14159265359000e +0
Я не смог найти более ранние версии интерпретатора, но очевидно, так вели себя и предыдущие версии Algol. Также, пишут, что FORTRAN до версии 77 года вел себя аналогично.
19_80 Ada
Похоже, что впервые использовать подчеркивание как разделитель в цифрах придумали в 1980 году в Ada. Кроме этого, в Ada можно было указывать числа в системах с любым основанием от 2 до 16. 11 в пятеричной системе (6 в десятеричной) можно было записать 5#11#. Что в свою очередь позволяло делать, такие неочевидные вещи, как I: Float := 3#0.1# — переменная со значением 1/3 (одна треть):
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
procedure hello is
I: Float := 3#0.1#;
J: Float := 1_00.0;
begin
Put(I);
Put(J);
end hello;
Выведет 3.33333E-01 1.00000E+02 (онлайн).
19_85 Caml
19_87 Perl
Позже, похоже независимо друг от друга, подчеркивание появилось в Caml и Perl. Perl стал первым языком, где (по непонятой мне причине) можно использовать несколько подчеркиваний подряд:
$x = 1_0_0;
$y = 2__5________0;
$z = $x+$y;
print "Sum of $x + $y = $z";
Выведет Sum of 100 + 250 = 350 (проверить).
19_93 Ruby
19_96 OCaml
Это первые два языка, где можно проследить, откуда пришло подчеркивание. OCaml (неожиданно) перенял подчеркивание у Caml, а Ruby создавался под влиянием Perl, откуда и перенял подчеркивание (правда, без возможности ставить несколько подряд).
20_03 D (v0.69)
D стал первым языком, в котором изначально в спецификации подчеркиваний не было, а их добавили позже (через два года после создания).
20_10 Rust
20_11 Java (SE 7)
20_12 Julia
Rust создавался под влиянием OCaml, а Julia под влиянием Ruby. В Java как и в Perl можно ставить несколько подчеркиваний подряд.
20_14 Swift
Под влиянием Rust.
20'14 C++ (v14)
У плюсовиков проблемы всегда отличаются от других. Дело в том, что идентификатор в C++ может состоять из подчеркивания и цифры. То есть, _1 правильное название переменной. И код:
#include <iostream>
int main()
{
for (int _1 = 0; _1 < 5; ++_1) {
std::cout << _1 << " ";
}
}
Выведет 0 1 2 3 4 (проверить). И чтобы не путать название переменных и цифры в C++ разделителем сделали одинарную кавычку 1'00.
20_16 Python (3.6)
20_17 C# (7.0)
20_18 Haskell (GHC 8.6.1)
20_19 JS (V8 v7.5, Chrome 75), PHP (v7.4), Go (v1.13), Scala (v2.13)
Тут что-то произошло, и подчеркивание добавили во все основные языки. Здесь бы и хотел сделать замечание, что подчеркивание хоть и не сильно, но усложняет интерпретаторы или компиляторы. Например, из мануала в PHP регулярные выражения для цифровых литералов:
// PHP 7.3
decimal : [1–9][0–9]* | 0
hexadecimal : 0[xX][0–9a–fA–F]+
octal : 0[0–7]+
binary : 0[bB][01]+
// PHP 7.4
decimal : [1–9][0–9]*(_[0–9]+)* | 0
hexadecimal : 0[xX][0–9a–fA–F]+(_[0–9a–fA–F]+)*
octal : 0[0–7]+(_[0–7]+)*
binary : 0[bB][01]+(_[01]+)*
В добавок, теперь в PHP появилось еще больше способов записать одно и тоже число:
20_20 Elrlang (v23)
Дольше всех держался Elrlang. Но, что удивительно, с самого начала в Elrlang можно было, как и в Ada (даже с похожим синтаксисом), записывать числа в произвольной системе исчисления (до 36). Например, следующий код печатает (онлайн) 3z в системе с основанием 36 (=143).
-module(main).
-export([start/0]).
start() ->
io:fwrite("~w", [36#3z]).
Но, подчеркивание в цифрах добавили только спустя 33 года после создания языка.
===========
Источник:
habr.com
===========
Похожие новости:
- [JavaScript, Node.JS, Open source, Разработка веб-сайтов] Сладкая жизнь, или Создание веб-приложения без написания кода
- [Развитие стартапа, Управление продуктом, Управление продажами, Дизайн] 10 лет Designmodo: взлеты, падения, уроки и вдохновение
- [Разработка веб-сайтов, JavaScript, Клиентская оптимизация, Angular, Разработка под e-commerce] Дружим Angular с Google
- [Ненормальное программирование, Программирование, Совершенный код] Dark code-style academy: spoil if statement
- [Разработка веб-сайтов, JavaScript, Программирование, Node.JS] Руководство по Express.js. Часть 1 (перевод)
- 30% из тысячи крупнейших сайтов используют скрипты для скрытой идентификации
- [Разработка веб-сайтов, JavaScript, Программирование] Изучаем Parcel — альтернативу Webpack для небольших проектов
- [Ненормальное программирование, Программирование, Совершенный код, C++] Совершенный цикл
- [JavaScript, Angular, TypeScript] Что можно положить в механизм Dependency Injection в Angular?
- [ООП, История IT] История IT. ООП
Теги для поиска: #_nenormalnoe_programmirovanie (Ненормальное программирование), #_php, #_javascript, #_erlang/otp, #_istorija (история), #_sintaksicheskij_sahar (синтаксический сахар), #_nenormalnoe_programmirovanie (
Ненормальное программирование
), #_php, #_javascript, #_erlang/otp
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 13:41
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Вдруг вы не знали, но в языке, на котором вы пишите, вы можете использовать _ в цифрах. Например, следующий код на PHP: <?php
print(1_00); print(100); Выведет 100100 (проверить онлайн). Этот синтаксический сахар появился в Ada в 1980 году, и он имел переменный успех последние 40 лет. Но, за последний год его добавили в javascript, PHP, Go, Scala и даже консервативный Elrlang. Я не могу объяснить, что послужило всплеском популярности, поэтому в статье просто опишу историю разделителей в цифрах. 19 68 Algol На заре программирования не особенно заморачивались с пробелами, а поэтому в Algol в именах переменных и цифрах можно было вставлять пробел. Например, a 1 st var — корректное название переменной, и синоним a1stvar. Код: BEGIN
INT a 1 st var = 1 234 567; REAL a 2 nd var = 3 . 1 4159 26 5 359; print((a1stvar, newline, a2ndvar)) END Выведет (проверить): +1234567
+3.14159265359000e +0 Я не смог найти более ранние версии интерпретатора, но очевидно, так вели себя и предыдущие версии Algol. Также, пишут, что FORTRAN до версии 77 года вел себя аналогично. 19_80 Ada Похоже, что впервые использовать подчеркивание как разделитель в цифрах придумали в 1980 году в Ada. Кроме этого, в Ada можно было указывать числа в системах с любым основанием от 2 до 16. 11 в пятеричной системе (6 в десятеричной) можно было записать 5#11#. Что в свою очередь позволяло делать, такие неочевидные вещи, как I: Float := 3#0.1# — переменная со значением 1/3 (одна треть): with Ada.Float_Text_IO; use Ada.Float_Text_IO;
procedure hello is I: Float := 3#0.1#; J: Float := 1_00.0; begin Put(I); Put(J); end hello; Выведет 3.33333E-01 1.00000E+02 (онлайн). 19_85 Caml 19_87 Perl Позже, похоже независимо друг от друга, подчеркивание появилось в Caml и Perl. Perl стал первым языком, где (по непонятой мне причине) можно использовать несколько подчеркиваний подряд: $x = 1_0_0;
$y = 2__5________0; $z = $x+$y; print "Sum of $x + $y = $z"; Выведет Sum of 100 + 250 = 350 (проверить). 19_93 Ruby 19_96 OCaml Это первые два языка, где можно проследить, откуда пришло подчеркивание. OCaml (неожиданно) перенял подчеркивание у Caml, а Ruby создавался под влиянием Perl, откуда и перенял подчеркивание (правда, без возможности ставить несколько подряд). 20_03 D (v0.69) D стал первым языком, в котором изначально в спецификации подчеркиваний не было, а их добавили позже (через два года после создания). 20_10 Rust 20_11 Java (SE 7) 20_12 Julia Rust создавался под влиянием OCaml, а Julia под влиянием Ruby. В Java как и в Perl можно ставить несколько подчеркиваний подряд. 20_14 Swift Под влиянием Rust. 20'14 C++ (v14) У плюсовиков проблемы всегда отличаются от других. Дело в том, что идентификатор в C++ может состоять из подчеркивания и цифры. То есть, _1 правильное название переменной. И код: #include <iostream>
int main() { for (int _1 = 0; _1 < 5; ++_1) { std::cout << _1 << " "; } } Выведет 0 1 2 3 4 (проверить). И чтобы не путать название переменных и цифры в C++ разделителем сделали одинарную кавычку 1'00. 20_16 Python (3.6) 20_17 C# (7.0) 20_18 Haskell (GHC 8.6.1) 20_19 JS (V8 v7.5, Chrome 75), PHP (v7.4), Go (v1.13), Scala (v2.13) Тут что-то произошло, и подчеркивание добавили во все основные языки. Здесь бы и хотел сделать замечание, что подчеркивание хоть и не сильно, но усложняет интерпретаторы или компиляторы. Например, из мануала в PHP регулярные выражения для цифровых литералов: // PHP 7.3
decimal : [1–9][0–9]* | 0 hexadecimal : 0[xX][0–9a–fA–F]+ octal : 0[0–7]+ binary : 0[bB][01]+ // PHP 7.4 decimal : [1–9][0–9]*(_[0–9]+)* | 0 hexadecimal : 0[xX][0–9a–fA–F]+(_[0–9a–fA–F]+)* octal : 0[0–7]+(_[0–7]+)* binary : 0[bB][01]+(_[01]+)* В добавок, теперь в PHP появилось еще больше способов записать одно и тоже число: 20_20 Elrlang (v23) Дольше всех держался Elrlang. Но, что удивительно, с самого начала в Elrlang можно было, как и в Ada (даже с похожим синтаксисом), записывать числа в произвольной системе исчисления (до 36). Например, следующий код печатает (онлайн) 3z в системе с основанием 36 (=143). -module(main).
-export([start/0]). start() -> io:fwrite("~w", [36#3z]). Но, подчеркивание в цифрах добавили только спустя 33 года после создания языка. =========== Источник: habr.com =========== Похожие новости:
Ненормальное программирование ), #_php, #_javascript, #_erlang/otp |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 13:41
Часовой пояс: UTC + 5