Выпуск компилятора языка D 2.100

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ языка программирования D прСдставили Ρ€Π΅Π»ΠΈΠ· основного эталонного компилятора DMD 2.100.0, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ систСмы GNU/Linux, Windows, macOS ΠΈ FreeBSD. Код компилятора распространяСтся ΠΏΠΎΠ΄ свободной Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSL (Boost Software License).

Π―Π·Ρ‹ΠΊ D ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ синтаксисом, схоТим с C/C++, ΠΈ обСспСчиваСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков, ΠΏΡ€ΠΈ этом заимствуя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ возмоТности динамичСских языков Π² области эффСктивности Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ обСспСчСния бСзопасности. НапримСр, прСдоставляСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ассоциативных массивов, косвСнноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ², автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, срСдства ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ сборщик мусора, систСма шаблонов, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для мСтапрограммирования, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° языкС C, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° C++ ΠΈ Objective-C.

Π‘Ρ€Π΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½ΠΎΠ²ΠΎΠΌ выпускС:

  • ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° старого стиля ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² Π²Π΅Ρ‚ΠΊΠ΅ D1. На смСну opNeg, opAdd_r, opAddAssign ΠΈ Ρ‚.ΠΏ. ΠΏΡ€ΠΈΡˆΠ»ΠΈ opUnary, opBinary, opBinaryRight ΠΈ opOpAssign. Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π±Ρ‹Π» объявлСн ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ Π² 2019 Π³ΠΎΠ΄Ρƒ ΠΈ начиная с выпуска 2.100 Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ ошибки.
  • ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова delete, объявлСнного ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ, начиная с 2018 Π³ΠΎΠ΄Π°. ВмСсто delete слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ destroy ΠΈΠ»ΠΈ core.memory.__delete.
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ @mustuse, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ ΠΊ Ρ‚ΠΈΠΏΠ°ΠΌ struct ΠΈ union Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠΎΠ΄Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π±Π»ΠΎΠΊΠ°Ρ… @nogc). Если ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ @mustuse Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠΎΠ΄Π΅, компилятор Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.
  • Для статичСских массивов Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ свойства «.tupleof» для получСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (lvalue) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива. void foo(int, int, int) { /* … */ } int[3] ia = [1, 2, 3]; foo(ia.tupleof); // Π°Π½Π°Π»ΠΎΠ³ foo(1, 2, 3); float[3] fa; fa.tupleof = ia.tupleof; // простоС присвоСниС fa = ia ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ ΠΊ ошибкС assert(fa == [1F, 2F, 3F]);

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru