← DevOps
DevOps avatar

TGINSIGHT POST

Post #1526

@DevOPSitsec

DevOps

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Ρ‹3,070ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ просмотров
ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½3 июн.03.06.2025, 12:53
Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ поста

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅

πŸ–₯ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ язык программирования 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"). βœ”οΈGithub βœ”οΈGauntlet βœ”οΈΠΠΎΠ²ΠΎΡΡ‚ΡŒ #Gauntlet#golang @golang_google