ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ язык программирования Gauntlet, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ возмоТности языка Go

ДоступСн ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Π»ΡŒΡ„Π°-выпуск языка программирования Gauntlet, надстройки Π½Π°Π΄ языком Go, Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Gauntlet ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ всС возмоТности языка Go, Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² прСдставлСниС Π½Π° языкС Go ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ экосистСмой Go Π±Π΅Π· нСобходимости задСйствования обвязок (binding). Π Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ инструмСнтарий написан Π½Π° языкС F# ΠΈ распространяСтся ΠΏΠΎΠ» Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv3. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ΄ΠΎΠΌ прСдоставляСтся Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρƒ VSCode.

Π Π΅ΡˆΠ°Π΅ΠΌΡ‹Π΅ Π² Gauntlet ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  • Назойливый Π²Ρ‹Π²ΠΎΠ΄ ошибок, связанных с Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ (Gauntlet добавляСт для всСх Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ Π²ΠΈΠ΄Π° Β«_ = aΒ»).
  • Π Π°Π·Π΄ΡƒΡ‚Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок. Π’ Gauntlet вмСсто условных Π±Π»ΠΎΠΊΠΎΠ² Π²ΠΈΠ΄Π° Β«if err != nilΒ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ однострочныС выраТСния Β«try-withΒ».
  • Назойливый способ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈ экспорта (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Go Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ экспортируСмыС ΠΈΠΌΠ΅Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈΡΡŒ Π½Π° Π·Π°Π³Π»Π°Π²Π½ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ).
  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Ρ‚Π΅Π½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’ Gauntlet ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ выраТСния Π²ΠΈΠ΄Π° β€˜let properWord = @String len(lines) > 1 ? Β«linesΒ» : Β«lineΒ»β€˜.
  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ синтаксиса switch-case.
  • УслоТнённыС Ρ†ΠΈΠΊΠ»Ρ‹ Β«forΒ». Π’ Gauntlet ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Β«for let _, c in Β«HelloΒ» {Β» вмСсто Β«for _, c := range Β«HelloΒ» {Β«.
  • НСобычный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания (Β«:=Β» для ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ объявлСния ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…; Β«=Β» для измСнСния значСния ΡƒΠΆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…).
  • ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ (Π² Gauntlet поддСрТиваСтся Π²Ρ‹Π·ΠΎΠ² Π²ΠΈΠ΄Π° β€˜let trimmedLines = fileContentStrVersion => strings.trimSpace(_) => strings.split(_, Β«\nΒ»)’.

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности Gauntlet:

  • Бинтаксис Β«when-isΒ» ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° switch.case, Π½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ выраТСниями.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° pipe-ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· нСсколько Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Β«10 => add(_, 10) => add(_, 30) => divide(_, 2)Β».
  • ВыраТСния Β«try .. withΒ» ΠΈ Β«force .. withΒ».
  • Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Β«wrapperΒ» для создания псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Β«wrapper Int DollarsΒ»).

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ