Module pentru limbaje/rutine

A incercat cineva sa scrie module native pt diferite limbaje, cum ar fi PHP, Python, Ruby, NodeJS ?

Prin module native ma refer la componente scrise in C/C++ care apoi se pot folosi in respectivele limbaje

Pt php se pot scrie extensii in C. Cred ca este valabil si pt Python, Ruby sau altele
Avantajele ar fi:

  • Performata mai buna
  • Intelegerea modului in care functioneaza lucrurile under the hood

@alessioalex zicea la un moment dat că scrie module pentru Node :slight_smile:

Nu e mare lucru. De exemplu pentru python, cum crezi ca exista gramada aia de biblioteci?
Multe sunt scrise in C/C++ sau Fortran. OpenCV, TensorFlow, VTK, wxWidgets, etc… implementate in C++, cu wrappers:
https://intermediate-and-advanced-software-carpentry.readthedocs.io/en/latest/c++-wrapping.html

Pt. node inca n-am gasit un usecase atat de bun pt. care sa implementezi un modul nativ in comparatie cu un binar pe care-l rulezi si comunici prin grpc.

Edit:
mi-am adus aminte la ce-am folosit, am scris acum cativa ani un driver pt. un hardware custom de monitorizare a unui sistem de udare pt. o sera. Am facut o interfata cu cateva butoane pt. functiile care erau disponibile pe hardware.

2 Likes

Am facut niste module native de node.js pentru a implementa modele de ML eficient, când cele în JS nu aveau performanta necesară. În general e o chestie de nișă. N-aș coda business logic sau procesări facile într-un modul nativ.

4 Likes

Eu am lucrat la un mod pentru GTAV care avea node.js integrat in C++. (adica era exact invers, JS era limbajul de scripting al unui server scris in C++). Problema cea mai mare era ca daca ai incurcat cumva tipurile datelor (de exemplu la un model ii dadeai numele in loc de Jenkins One-At-A Time hash sau in loc de un array dadeai un obiect (chiar in unele locuri puteai da amandoua) atunci iti luai un frumos segfault in rulare de la C++ de nici dumnezeul programatorilor nu mai stia de unde a venit. La un serviciu stateless e acceptabil ca sa iti dea eroare serviciul si sa il ruleze din nou, dar la un server realtime dai afara sute de jucatori din cauza unui tip gresit la un parametru.

Nici macar TypeScript nu era o solutie perfecta, fiindca nu iti garanteaza nimeni ca daca ai tipurile nu o sa le incurci la un moment dat chiar in interfete.

Partea faina la Node daca ai un modul compilat e ca poti sa ii dai comenzi sau sa faci debug direct din Chrome Debugger conectându-te la Node.

Pe Windows era problema cu node-gyp, acum 2 ani iti trebuia ditamai Visual Studio-ul ca sa le poti compila la npm install. Incepand cu Node.JS 11 la instalare ti se da optiunea sa selectezi sa iti instaleze si native build tools. (adica Python si compilatorul de C++ de la Microsoft)

Problema cu nepotrivirea tipurilor de date am avut-o si eu intre C# si o biblioteca facuta in C++. Mai ales la string-uri

1 Like