Programació en C++ | Construït a Chicago

Per als desenvolupadors següents, la senzillesa és clau. Dit això, escriure codi que altres enginyers poden ampliar fàcilment pot ser una tasca complicada. A les empreses fintech locals Hudson River Trading i Wolverine Trading, els professionals de la tecnologia aprofiten C++ perquè puguin accedir a capacitats de llenguatge d’alt nivell sense complicar innecessàriament els processos de programari existents. Com qualsevol llenguatge, però, hi ha alguns avantatges, i els desenvolupadors següents van dir que són molt conscients que, si no tenen cura, les mateixes campanes i xiulets que fan que el llenguatge de programació sigui tan atractiu poden provocar un mal de cap agreujat.

“C++ us permetrà fer gairebé tot el que vulgueu, inclòs fer un embolic complet de coses”, va dir Peter Levenberg, un desenvolupador.

Per tal de gestionar la complexitat i prevenir “masses”, l’equip de Levenberg és prudent quan utilitza funcions avançades de C++ com la metaprogramació de plantilles, una ruta que només recomana prendre quan no hi ha cap solució més senzilla.

A Wolverine Trading, els enginyers utilitzen C++ per gestionar l’encaminament del trànsit entre el servidor comercial de l’empresa i el seu client comercial insígnia. L’enginyer de programari Chris White va dir que quan s’utilitza correctament, el llenguatge de programació coincideix amb les necessitats de rendiment i escalabilitat de les demandes dels components del sistema.

Programar en C++ no vol dir eliminar els compromisos basats en la usabilitat. En canvi, permet als enginyers navegar per la implementació de funcions tenint en compte l’escala.

Comerç del riu Hudson

Abans que els enginyers de Hudson River Trading poguessin desenvolupar la seva plataforma de distribuïdor únic, havien de saber que podien confiar en un llenguatge amb un rendiment estable i accés a detalls del sistema de baix nivell. El desenvolupador principal Peter Levenberg va dir que aquí va entrar en joc C++. Com a resultat, els clients de HRT poden comerciar directament amb l’empresa fintech en lloc d’utilitzar un intercanvi.

Primer, explica’ns una mica com el teu equip utilitza C++ en el seu treball.

Aquí a HRT, la velocitat d’execució sovint és molt important. Per tant, utilitzem bastant C++ per als processos del camí calent. Això pot incloure qualsevol cosa, des de l’anàlisi de dades del mercat i l’anàlisi de les condicions del mercat fins a la preparació de comandes.

C++ també ofereix al nostre equip un alt grau de control sobre els detalls del sistema de baix nivell sense sacrificar l’accés a les capacitats del llenguatge d’alt nivell. HRT creu en oferir als nostres desenvolupadors les millors eines que puguin per a la feina. Així que ens mantenim al dia amb els darrers compiladors i funcions de C++. Per exemple, el rendiment va ser crític quan vam desenvolupar el nostre SDP, que permet a altres empreses comerciar directament amb HRT en lloc de passar per un intercanvi. Després de desplegar el sistema implementat en gran mesura amb C++, vam demanar comentaris d’alguns dels nostres socis comercials. Van dir que era un dels SDP més ràpids amb els quals havien interactuat.

Què’És la millor pràctica més important que seguiu quan programeu en C++?

Una de les millors pràctiques d’HRT és esforçar-se perquè el nostre codi sigui el més senzill possible. C++ us permetrà fer gairebé qualsevol cosa que vulgueu, inclòs fer un embolic complet de coses. Per tant, és important estar disposat a dedicar temps a considerar si el vostre primer instint és realment el millor per a la línia de codi. La complexitat no sempre és necessària. Però quan ho és, fem servir funcions avançades de C++ com la metaprogramació de plantilles amb criteri.

A més, un codi més senzill acostuma a ser més fiable, cosa que ajuda a prevenir errors o, pitjor, temps d’inactivitat costosos. Recordeu: quan escriviu codi, no és només dir-li a l’ordinador què ha de fer. També serveix per dir a qualsevol persona que el llegeixi en el futur (incloent-se a tu mateix) què havia de fer. Si heu escrit codi descuidat o caòtic, és molt més difícil per a qualsevol persona que el llegeixi trobar errors, ampliar-lo o simplement entendre què fa. Resisteix l’impuls de tancar el codi i seguir endavant. Sempre és una bona idea invertir més temps per simplificar el codi i facilitar que la gent pugui treballar.

Resisteix l’impuls de tancar el codi i seguir endavant.”

Què’És el repte més gran a l’hora de programar en C++ i com ho supereu?

Els HRT creuen que un dels majors reptes de l’ús de C++ és gestionar la complexitat que sorgeix a mesura que un sistema creix i evoluciona amb el temps. Intentem gestionar aquest problema mitjançant una varietat de mètodes. Al nivell més baix, és important intentar mantenir el codi contingut en peces petites, fàcils de provar i comprensibles. Qualsevol cosa que hagi de ser inusualment complicat o esotèric, com ara algun codi crític pel rendiment o codi que interactua amb una API externa difícil d’utilitzar, també està ben contingut. Intentem mantenir la coherència reutilitzant components on tingui sentit fer-ho.

I al més alt nivell, intentem mantenir el disseny del sistema en si tan net com sigui possible. Fer aquestes coses requereix temps i esforç. I HRT entén que hem de permetre als desenvolupadors la llibertat de millorar les coses. Finalment, la TRH és un entorn de col·laboració. Parlar de revisions de codi i dissenys de sistemes ens ajuda a tots a produir un millor codi i a ser millors desenvolupadors.

Comerç de Wolverine
Comerç de Wolverine

A Wolverine Trading, els enginyers encapsulen la gestió de tota la vida mitjançant l’idioma “Resource Acquisition Is Initialization (RAII)”. En prioritzar l’adquisició de recursos sobre la inicialització, l’enginyer de programari Chris White va dir que la gran base de codis de l’empresa fintech és molt menys propensa a les fuites de recursos difícils de diagnosticar.

Primer, explica’ns una mica com el teu equip utilitza C++ en el seu treball.

Wolverine Execution Services (WEX), una filial de Wolverine Trading, utilitza C++ per a totes les aplicacions de fons implicades en l’encaminament de les operacions dels clients i el lliurament de dades de mercat en temps real. El rendiment és primordial en aquestes àrees del nostre negoci i C++ ofereix la possibilitat d’ajustar el nostre programari en conseqüència.

El nostre servidor comercial actua com un centre central on els clients es connecten amb nosaltres mitjançant el nostre client comercial emblemàtic: la plataforma de comerç WEX (WTP). Diverses aplicacions de fons C++ ofereixen serveis als clients a través d’aquest centre, com ara les que implementen protocols de missatgeria per comunicar-se amb borses de valors i altres llocs de negociació.

La responsabilitat principal del servidor comercial és gestionar l’encaminament del trànsit sensible al temps d’anada i tornada entre aquestes parts connectades. Cada flux de trànsit es valida en temps real, es registra en arxius persistents i es processa en paral·lel als altres. Tenint en compte les necessitats de rendiment i escalabilitat d’aquest component del sistema, és un gran exemple d’una àrea on utilitzem C++ al màxim.

Ampliem amb precisió la vida útil dels objectes i la utilització dels recursos.”

Què’És la millor pràctica més important que seguiu quan programeu en C++?

Analitzem amb precisió la vida útil dels objectes i la utilització dels recursos. Sovint és millor adquirir recursos el més tard possible i alliberar-los el més aviat possible. A més, utilitzar l’idioma RAII per encapsular la gestió de recursos pot fer que el codi sigui més segur. Seguir aquestes pràctiques es tradueix en un programari eficient i sense fuites.

Al nostre servidor de comerç central, l’abast del bloqueig i el desbloqueig dels programes d’objectes d’exclusió mútua (mutex) és fonamental per atendre el trànsit dels clients simultàniament a molts fils amb una contenció mínima. En encapsular la gestió de tota la vida mitjançant RAII, la nostra gran base de codi és molt menys propensa a fuites de recursos difícils de diagnosticar derivades de retorns primerencs, excepcions i errors que es poden passar fàcilment per alt.

Molts objectes C++ estàndard, com ara bloquejos amb àmbit i punters intel·ligents, es basen en aquests principis. Per tant, sovint ens referim a aquests paradigmes familiars quan dissenyem les nostres pròpies eines. Les funcions modernes de C++, com ara lambdas i la semàntica de moviment, complementen aquestes pràctiques, fent que ens sigui més fàcil que mai gestionar de manera estricta la vida útil dels objectes sense sacrificar la llegibilitat del codi.

Amb el llançament de C++20, quines noves funcions us entusiasmen més?

Amb el llançament de C++20, estic molt emocionat amb les biblioteques Range i Calendar, i més enllà de C++20, el marc de xarxes/executors. Les extensions d’interval fan un llarg camí per fer que el codi sigui més llegible i més fàcil d’escriure sense errors. La lògica d’iteració que els desenvolupadors estan escrivint dia rere dia s’encapsularà millor. La biblioteca de calendari omplirà un buit de llarga data a les eines estàndard, fent que les construccions de data i hora siguin més fàcilment accessibles. La lògica del calendari s’utilitza en moltes facetes del nostre sector, com ara el seguiment de l’historial comercial i la gestió de les dates de venciment dels contractes.

Més endavant, el marc estandarditzat de Networking/Executors substituirà moltes construccions de baix nivell que hem hagut d’escriure nosaltres mateixos o bé en les quals confiem de biblioteques de tercers. L’estàndard és excel·lent per elevar les implementacions existents perquè siguin més netes i eficients, de manera que esperem integrar aquestes noves funcions a mesura que estiguin disponibles.

Leave a Comment

Your email address will not be published. Required fields are marked *