20_20 - tahun di mana garis bawah dalam literal numerik menang

Tiba-tiba Anda tidak tahu, tetapi dalam bahasa yang Anda tulis, Anda bisa menggunakan _angka. Misalnya, kode PHP berikut:



<?php

print(1_00);
print(100);


Akan mengeluarkan 100100( periksa online ). Gula sintaksis ini muncul di Ada pada tahun 1980 dan memiliki kesuksesan yang beragam selama 40 tahun terakhir. Namun selama setahun terakhir, itu telah ditambahkan ke javascript, PHP, Go, Scala, dan bahkan Erlang konservatif. Saya tidak bisa menjelaskan apa yang menyebabkan lonjakan popularitas, jadi dalam artikel ini saya hanya akan menjelaskan sejarah pemisah dalam angka.



19 68 Algol



Pada awal pemrograman, kami tidak terlalu peduli dengan spasi, dan oleh karena itu di Algol dimungkinkan untuk memasukkan spasi dalam nama dan angka variabel. Misalnya, a 1 st varadalah nama variabel yang valid, dan sinonim a1stvar. Kode:



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


Akan mengeluarkan ( centang ):



   +1234567
+3.14159265359000e  +0


, , Algol. , , FORTRAN 77 .



UPD: ( fixed-form source files). fixed-form source files 2018 .



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.



UPD: , (User-defined literals). 1:



#include <iostream>

constexpr unsigned long long operator"" _0(unsigned long long i)
{
    return 1;
}

int main()
{
    int x = 0_0;
    std::cout << x;

    return 0;
}


20_16 Python (3.6)



20_17 C# (7.0), Kotlin (v1.1)



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 Erlang (v23)



Erlang. , , Erlang , Ada ( ), ( 36). , () 3z 36 (=143).



-module(main).
-export([start/0]).

start() ->
  io:fwrite("~w", [36#3z]).


33 .




All Articles