Go vs Javascript. На чому писати IoT проекти

Яку мову програмування краще для вашого IoT проекту? Відповідь на це питання неоднозначна і суб’єктивна. Є кілька аспектів, які необхідно враховувати при розгляді цього питання: завдання, цілі і потреби вашого проекту. Важливу роль також грають ваші особисті уподобання, наявність і можливості кваліфікованих розробників.

Існує думка, що розроблена Google мова Golang, може в кінцевому підсумку витіснити JavaScript (чи, краще сказати, Node.js) із сфери IoT додатків. Правда ховрах може перемогти в цій битві? Давайте докладніше розглянемо, як Golang, так і JS, їх переваги та недоліки для IoT рішень.

JavaScript


Мови програмування приходять і йдуть, але схоже, що JavaScript залишиться надовго. Спочатку ненависний розробниками, сьогодні ця топова мова програмування широко використовується в Інтернеті речей із-за його високої ресурсоефективності. Так як тема використання JavaScript в IoT додатках досить велика і може включати фронтенд, бекенд і інші етапи розробки, то давайте звузимо її до Node.js. Як відомо, JavaScript — це мова, а Node.js — це програмна платформа. Вона дозволяє встановлювати гнучке взаємодію з пристроями введення-виведення через свій API, а також підключати необхідні для вирішення завдань бібліотеки.

Node.js ідеально підходить для управління мережами датчиків, радарів, маяків, мікросистем і інших пристроїв. Крім того, він відмінно справляється з обробкою декількох завдань для підтримання взаємодії між усіма цими IoT пристроями. Розробники сходяться на думці, що переваги Node.js для програмного IoT забезпечення — це простота використання і розумні вимоги до пам’яті.

Провідні IoT компанії, такі як Telefonica, Rightech і Salesforce IoT Cloud, продовжують впроваджувати Node.js у своїх проектах, тому попит на розробників JavaScript найближчим часом, схоже, не впаде.

Golang

Go — це мова програмування з відкритим вихідним кодом. Вона ще не так широко розповсюджена, як JavaScript, але вона вже встиг захопити свій шматок IoT пирога. Подібно більшості платформ і мов програмування, вона виникла в результаті незадоволеності розробників існуючими рішеннями. Go створена для прискорення введення в робочий процес нових розробників, тому однією з основних його особливостей є, простота освоєння, використання і читання, тобто низький поріг входу для будь-якого охочого почати розробку чужою мовою. Ця мова має порівняно вузький набір функцій, хоча він виграє у паралелізмі і продуктивності.

Читайте також  OpenSceneGraph: Основи роботи з геометрією сцени

Також до особливостей  Go відносяться:

  • Сувора типізація, типи даних встановлюються на етапі компіляції, отже, їх невідповідність можна відстежити перед запуском;
  • Так як мова більш суворий в ньому менше громіздких конструкцій і відповідно його легше читати;
  • Даний мова активно використовується при розробці інфраструктурного ЗА зразок Docker, Kubernetes і т. д. Знання Go, при необхідності, дозволить глибше вивчити дані інструменти;
  • Екосистема мови відносно молода, то існує можливість звернутися до техпідтримки розробників мови для вирішення проблемних моментів;

Програмісти зазвичай вибирають Golang для побудови комунікаційного рівня в системі IoT, оскільки паралелізм і можливість одночасного запуску введеннявиводу даних є одними з ключових переваг Go. Також ця мова відмінно підходить для написання сервісів логування та парсингу.

Інші не настільки очевидні переваги Go включають:

  • інструменти: документування — GoDoc і аналізу коду — Race Detector;
  • вбудований інструмент тестування (якщо ви коли-небудь пробували вибрати фреймворк для тестування проекту на JavaScript, ви розумієте вигоду);
  • серйозний підхід до паралельного програмування з допомогою Data Race Detector;
  • єдине керівництво по стилю для всіх, якому потрібно слідувати, на відміну від багатьох інструментів і парадигм в JavaScript (вони відомі тим, що паралізують команду, коли прийшов час прийняти рішення про структуру, угодах, бібліотеках тестування і т. д.)

 

Порівняємо за окремими критеріями:

Як JavaScript, так і Go, схоже, добре підходять для IoT проектів. Тому давайте порівняємо функціонал Node.js і Go, щоб визначити переможця.

Зрілість. Будучи відносно молодим, Go досить зріла мова, до того ж він спочатку позиціонувався як стабільний і назад сумісний. Що стосується Node.js він має версію LTS (Long Time Support, довготривала підтримка), а також новітню версію, яка має мінливий API, і велике ком’юніті, підтримує платформу.

Читайте також  Написання шейдерів у Unity. GrabPass, PerRendererData

Продуктивність.. В реальних умовах мережевої взаємодії та взаємодії з базою даних Go і Node.js показують однакові результати.

Паралелізм. Тут Go безумовно виграє: він використовує легкі потоки — goroutines, а Node.js успадкував механізм циклу обробки подій JavaScript, який має свої недоліки.

Крива навчання. Завдяки JavaScript, згідно з недавнім опитуванням Node.js став одним з найбільш швидкозростаючих мов розробки. Причиною цього є проста освоєння, велика документація і великий відкритий ком’юніті. Go, також досить легкий у навчанні. Опитування PW Engine показав, що більшість розробників вважають його дуже інтуїтивним, а це великий плюс якщо компанії потрібно якомога швидше ввести нових співробітників в робочий процес. Так що, тут теж нічия.

Обробка помилок. Тут думки розходяться. Go використовує явну перевірку помилок, на відміну від неявного trycatch. за рахунок цього перевірок на помилки ставати більше, але вони зрозуміліше, так як знаходяться ближче до місця їх виникнення та спрямовані на визначення проблеми в конкретному місці, у другій версії Go обіцяють додати checkhandle. Node.js використовує принцип trycatch, загальний для багатьох мов, і володіє певними обмеженнями.

Фронтенд і бекенд. Go націлений на розробку паралельних сервісів, тому він відмінно підходить для серверної частини. І хоча для Go є фреймворки для створення веб-додатків, такі як Beego і gopherjs, набагато зручніше створювати сучасний користувальницький інтерфейс з JavaScript. До того ж виходячи з факту, що JS панує на фронтенде, то простіше підтримувати і бекенд і фронтенд на одній мові — JavaScript
Вибір розробників. Тут немає сумнівів: JavaScript залишається нагорі так як вже давно влився в робочі процеси розробників у всьому світі. Звичайно, Go увійшов у топ-20 найбільш популярних технологій, але, на жаль, він як і раніше далекий від JavaScript з точки зору популярності.

Читайте також  Про систему блюра - Laplace Blur

Sync/Async IO (синхронний/асинхронний ввід-висновок). Node.js славиться своєю неблокірующіх моделлю вводу-виводу, яка робить його легким та ефективним з точки зору ресурсів. Але у нього також є недоліки, наприклад, нескінченні зворотні дзвінки в коді і дивні трасування стека. З іншого боку, Go, використовуючи свій планувальник, що рекомендує розробникам використовувати синхронні операції, спираючись на різні інструменти, що надаються ОС, для підвищення ефективності і скорочення блокування ресурсів.

Робота на пристроях. З менеджером пакетів NPM Node.js можна ефективно використовувати в якості середовища програмування на одноплатниках, таких, як Raspberry Pi, Iskra Js або BeagleBone Black. NPM містить близько 80 пакетів з відкритим вихідним кодом для контролерів Arduino, Intel IoT Edison, Raspberry Pi і більше 30 пакетів для різних пристроїв і датчиків Bluetooth. Що стосується Go, то він добре підходить плат Raspberry Pi, так як він запускає повну збірку Linux. Однак малопотужні IoT-пристрої, такі як Arduino, не можуть працювати з двійковим кодом Go. Ось чому був створений фреймворк Gobot. Він підтримує безліч платформ, Bluetooth LE пристроїв та навіть інтерфейс NeuroSky.

Бібліотеки.За кількістю бібліотек JavaScript звичайно ж поки обходить свого опонента, однак у певних галузях, наприклад, в математиці, для Go написані більш потужні інструменти по роботі зі складною математикою і аналізом даних.

Висновок

Golang – це компільована багатопотокова мова програмування, яка дозволяє створювати цілі системи підключених контролерів, і ефективно працювати з базами даних. JavaScript ідеально підходить для асинхронних операцій, що потребують низького часу відгуку. Зараз ці дві мови далеко не взаємозамінні. JavaScript залишається найпопулярнішою мовою в світі, в тому числі і конкретно в Інтернеті речей. Вона міцно утримує свої позиції і навряд чи поступиться Golang в найближчому майбутньому. Проте, завдяки своєму інноваційному і надійному підходу, Go має дуже яскраві перспективи, щоб очолити топ технологій IoT розробки.

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

Вам також сподобається...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *