Александър Поуп ли каза: „Надеждата извира вечно в човешките гърди“? Поуп беше поет, а не хакер, но вярвам, че би разбрал очакването, свързано с откриването на нов език за програмиране. Той би знаел, че разработчиците на софтуер винаги се надяват, че този език, с неговата уникална комбинация от Unicode знаци, най-накрая ще реши всичките ни проблеми, правейки кодирането лесно само с няколко кликвания.
Поуп със сигурност би разбрал желанието за нов синтаксис толкова интуитивен, че трябва само да си представим отговор и да го видим преобразуван в логически правила, които са прекрасни, сложни и преди всичко правилни. Той би оценил копнежа в пръстите ни да завъртим нов код, който изглежда толкова лесен и елегантен като троен аксел, вътрешен три и половина в позиция на щука или бягане на гигантски слалом на Олимпийските игри.
Повечето съвременни езици обаче не са създадени за капризи или за демонстриране на нашите умения за програмиране. Те са направени в отговор на често срещан проблем, който създателите искат да разрешат. Въпреки че повечето разработчици ще продължат да правят нашето ежедневно кодиране на един или повече по-стари, по-утвърдени езици, ние винаги сме в търсене на нови инструменти, които да ни помогнат да разрешим проблемите си с кодирането. Можем да видим тази тенденция, особено в нарастването на специфичните за домейн езици или DSL. Тези езици са компактни и фокусирани. Те не са предназначени за общо предназначение. Но някои биха могли да заслужат специално място в кутията ви с инструменти точно поради тази причина.
Ето 11 по-нови езика, които са намерили своята ниша. Някои са DSL, предназначени да правят едно нещо и то добре. Други, изглежда, се стремят да спасят света. Дори и да не са това, от което се нуждаете в момента, всички те имат какво да научат как да накараме нашите компютри да правят това, което правят, но по-добре.
Reactive Clojure
Когато комбинирате Clojure с React, ето какво получавате: система, която съчетава всички възможности на реактивните предни части със солидната, функционална сила на Clojure. В най-добрия случай Reactive Clojure ви позволява да оформите сложна колекция от предни компоненти и да ги свържете заедно с функции. Реактивната рамка попълва детайлите и гарантира плавния поток от данни на приложението между вашите компоненти и базата данни. Clojure носи функционалната основа, за да направи възможни дори необичайни случаи на употреба – и с възможност за отстраняване на грешки.
Това съвпадение на небето ли е? Времето ще покаже. Reactive Clojure е добър вариант за писане на лепилния код, който държи заедно предните компоненти. Неговият многонишков модел е естествено съвпадение за сложни и реактивни табла за управление, които отчитат множество задачи едновременно.
Никел
Една от най-ироничните игри, които програмистите играят, е да прехвърляме по-голямата част от нашата работа към конфигурационни файлове. Тези файлове, често кодирани в JSON, YAML или дори XML, са добра идея за кодиране, която е метастазирана в сложен ритуал. В някои случаи дори не е необходимо да пишете действителен код; просто безкрайно премествайте различните конфигурационни файлове, за да направите това, от което се нуждаете.
Тогава има смисъл, че имаме Nickel: език за програмиране за създаване на конфигурационни файлове. Nickel е като шаблон с вградена логика, който можете да използвате за създаване на конфигурационни файлове, които не са статични. Един параметър може да бъде една стойност през седмицата и различна през почивните дни. Когато работи, Nickel създава нов конфигурационен файл, който отговаря на всички параметри, които е получил.
Структурата на Nickel е до голяма степен функционална и е налична проверка на типа, ако случайно помогне. Голяма тема е „коректността“, защото добре написаното парче код на Nickel до голяма степен гарантира, че изходът ще се подчинява както на синтактичните правила, така и на всички други правила, които трябва да наложите. Компилаторът на Nickel ви позволява да пишете договори, след което проверява дали изходът им се подчинява. Разбира се, има нещо смешно в писането на код за създаване на конфигурационни файлове, които след това управляват вашия код. Но това е много практично решение за модерни архитектури.
Kobra
Създателите на Kobra искаха език, който отваря машинното обучение за инженери, учени и други не толкова професионални програмисти. Резултатът е това, което те наричат визуален език за машинно обучение. Редакторът на Kobra композира подобни на код последователности с плочки за плъзгане и пускане, представляващи общи вградени процедури за статистически анализ и машинно обучение. Процесът се усеща като R с рамки от данни, изградени от таблични данни и колекция от функции за графичен дисплей за създаване на табла и документи.
Бицепс
Една от най-полезните функции на облака е способността да се стартират и разрушават сървъри, за да се справят с пренапрежения на данни. Веднъж бяха нужни седмици на хардуерен екип от център за данни да поиска, инсталира, тества и конфигурира машина. Сега облакът ви позволява да правите всичко това за минути или дори секунди.
Много екипи за devops са започнали да пишат код за различните API, поддържани от различните облаци. Microsoft реши да отиде малко по-далеч и да създаде опростен език за стартиране на машини в Azure, като част от своята философия за инфраструктура като код.
Езикът, наречен Bicep, предлага ефективен, декларативен формат за изписване на повечето от различните битове, които разработчикът може да иска да обърне в нов екземпляр. Някои основни мерки за безопасност на типа могат да помогнат за предотвратяване на грешки и във VS Code има редактор, който познава синтаксиса. Самият език е проектиран за мислене от по-висок порядък за инфраструктура, със силно декларативна структура, която ви позволява да включвате инструкции в произволен ред, след което да оставите мениджъра на ресурсите на Azure да оптимизира изпълнението.
Frink
Един приятел твърди, че единственото му изискване за избор на банка е да гарантира, че счетоводният софтуер на банката използва цели числа за броене на стотинки, а не числа с плаваща запетая за части от долар. Опасностите от грешки с плаваща запетая са добре известни и твърде големи. Колко бъгове са причинени от подхвърляне на числа без особено внимание?
Frink е език с „разпознаване на единици“, създаден точно за този проблем. Всяка променлива във Frink съдържа не само число, но и индикация за мерната единица, било то тонове, ватове, футове или метри. Преобразуването на единици е лесно благодарение на конфигурационния файл Frink. Основният механизъм на Frink също използва числа с произволна точност, за да намали проблемите със закръгляването. Това е като проверка на типа, но за числови мерни единици.
Faust
Синтезът на звук може да изглежда като тесен фокус, но е много полезен за разработка на игри, виртуална реалност и всяко приложение, което разчита на добро качество на звука. Въведете Faust, специфичен за домейн език, който получава името си от смесица от функционален аудио поток. Структурата на Faust е чисто функционална и всички нейни функции изграждат тръбопровод за обработка на звука. Неговият заден край разбива входящия звук в цифрово представяне, а самият код е набор от функции, които могат да бъдат съставени или комбинирани в краен резултат. Като пример можете да създадете ехо или реверберация, като разделите изходния код и въведете закъснение. Кодът на Faust е транспилиран в C++, C, LLVM bit code, WebAssembly, Rust и няколко други езика, така че можете да го използвате с почти всеки проект.
Melrōse and Glicol
Всеки, който пише код, знае как един програмист би основал група: Вместо да пуснете обява за намиране на барабанист и след това да интервюирате всеки, който отговори, просто напишете код, който да изложите ритмите за дръм машина. След като това е направено, можете също така да замените всички останали членове на групата с подпрограми. Можете дори да изградите цял симфоничен оркестър по този начин.
Melrōse и Glicol са два музикални програмни езика, предназначени за този стил на създаване на музика. И двете ви позволяват да създавате сложни композиции само с няколко натискания на клавиши. Melrōse работи на високо ниво около стандартната октава от дванадесет тона, често срещана в западната музика. Нотите са групирани в последователности и софтуерът се справя с голяма част от scut работата като транспониране. Изходът отива към всеки съвместим с MIDI инструмент и кодът може също да реагира на входящи сигнали през MIDI порта, така че кодът на Melrōse може да бъде член на групата.
Glicol е базиран на Rust инструмент, който изпълнява голяма част от същите задачи, но от по-ниско ниво. Кодът се интегрира с цифрова обработка на сигнала, за да предложи широка гама от музикални опции. Инструментът е проектиран да произвежда готови за браузър звуци със своята аудио машина с отворен код. Разработчикът на Glicol казва, че езикът има „ниска входна такса и високи тавани“, за да насърчи сътрудничеството с други с всички нива на умения.
WebAssembly и Wase
Най-ефективният начин за изпращане на инструкции към компютъра е да се кодират в двоичен код и да се ограничат до основния набор от операции, използвани от процесорите. Всеки чип има свой любим двоичен синтаксис и някои езици като Pascal или Java имат неутрален двоичен формат, предназначен да работи на локална виртуална машина. WebAssembly (Wasm) следва тези стъпки, като предлага на уеб браузърите предварително изграден двоичен код, комбиниран с текст в стандартен формат. Целта на WebAssembly е да замени минимизирания JavaScript код, който формира гръбнака на уеб приложенията, с нещо, което е още по-готово за изпълнение, с почти естествена скорост.
Много разработчици ще използват WebAssembly, без да го пишат директно, използвайки компилатори, които преобразуват езици от по-високо ниво в WebAssembly, който ще работи в браузъри. Има и ход за създаване на езици на ниско ниво, които излагат голяма част от основната структура на WebAssembly в четима от хора форма. Wase е една такава опция, предлагаща C-подобен синтаксис със силно писане.
WebAssembly също намира приложение извън уеб браузърите, като общ начин за кодиране на инструкции със стекова машина, подобна на JVM на Java. Redpanda, например, е платформа за стрийминг на данни, която предлага на разработчиците възможността да настройват или модифицират данните, докато идват по тръбата с код, написан в WebAssembly.
Java 17
Технически Java не е нов език. Наистина, едно от най-великите неща за Java е, че нейните разработчици са свършили страхотна работа, поддържайки съвместимостта с по-старите версии. Обикновено е доста лесно да се компилира код, който е на 10 или дори 20 години за най-новите JVM. Не е гарантирано, че кодът ще работи, но все пак е по-лесен за компилиране от почти всеки друг език. Екипът на Java разполага с пакет от милиони интеграционни тестове и това се вижда.
Включвам Java 17 в този списък, защото е толкова модернизирана, че би била почти неузнаваема за пътник във времето от 90-те години. Java 17 има толкова много допълнителни функции и разширения, които променят начина, по който кодираме.
Някои, като подобрения генератор на произволни числа или по-строгата математическа семантика с плаваща запетая, се справят с предизвикателствата на писането на много сложен цифров код. Разработчиците, които пишат счетоводни системи, могат да се разминат с използването на цели числа, за да задържат броя центове, но тези, които се занимават с AI алгоритми и сложна линейна алгебра, се нуждаят от плаваща запетая.
Други, като силно капсулиране и разширена семантика на превключване, внасят смесица от дисциплина и гъвкавост в основния език. Като цяло е по-лесно от всякога да пишете по-силен, по-безопасен и по-сигурен код благодарение на всички тези подобрения. Все още е Java в основата си, но екстрите правят разликата.