C++ och dess framtid att programmera minnessäkert - Hur går utvecklingen?

Permalänk
Medlem
Skrivet av mc68000:

En lärdom jag har haft med mig är att om man har med mycket IO att göra så lönar det sig inte att parallellisera mer än vad IO-kanalen orkar med, det blir bara en negativ utveckling med ökande latense r från operativet. Visst kan man gödsla med pengar på hårdvara för sådant, men det är oftast ekonomiskt ohållbart.

Samma lärdom, mycket svårt att parallellisera så det görs inte alls med IO då det blir en flaskhals.

Skrivet av mc68000:

Om du gett en utvecklare en uppgift att göra en fil-lösning och hen hanterar filen helt i minnet så har du inte berättat tillräckligt för att hen skall lyckas med sitt uppdrag sett vad projektet kräver. Hen har gjort sitt jobb och löst problemet på bästa sätt enligt de premisser hen blivit presenterad. Exakt det som framkommit i denna tråd. Det är dåligt ledarskap och leder bara till misslyckade projekt som vi så ofta läser om i etermedia.

Visserligen så säger man inte bara fil-lösning men jag skulle allt fråga hur vederbörande tänkte om lösningen är hanterad i minnet. I aktuellt fall är det ändå tydligt att det handlar om flera filer (till och med). Skulle programmet krascha och filen därför går sönder.
Det fungerar inte för mig i alla fall om någon hade löst det på det viset.

Möjligen acceptabelt om det handlar om konsultjobb och konsulten säger att hanteringen med att hela tiden synka med disk är dyrare för det tar längre tid och därför valt minnet. Fast även då blir det en diskussion för quick and dirty = dyrt. Halvfärdiga lösningar är ingen hitt.

Jag kan inte se hur det skulle vara ok med minneshantering för filer.

Skrivet av mc68000:

Utöver kvarvarande okända parameter som du ännu inte berätta om så blir jag osäker på hur filerna används? Är det indata till körningen som är 100 GB och det reducerade slutresultatet som lagras i "arkivet". Eller pratar vi om okända indata som resulterar i arkiverade filer om 100 GB ? Körtiden per 100 GB vore intressant att veta. Någon typ av benchmark eller löpande tidsloggning har ni väl ändå i er verksamhet? Sådana prestandasiffror i driften tar ju en promilles promille att ta fram löpande och borde sparas med resultatfilen.

Simuleringsdata, det är data från simuleringar som sedan används för att beräkna och dra slutsatser från. Simuleringar kan ställas in så de är mer eller mindre exakta och vad som avgör där är hur mycket data man mäktar med och kostnader för datorer.

Skrivet av mc68000:

EDIT: I mitt mindset så tänker jag mig att vi på något sätt gör beräkningar på de inblandade filerna, men det kanske bara handlar om att skyffla data från en punkt till en annan?

Det är en process i flera steg för att få ut något vettigt. Och det komprimeras i varje steg. De första data som genereras är mer för backup tills man få fram slutliga siffror och eventuellt en låtit det gå en tid.

Permalänk
Medlem
Skrivet av klk:

Samma lärdom, mycket svårt att parallellisera så det görs inte alls med IO då det blir en flaskhals.

Visserligen så säger man inte bara fil-lösning men jag skulle allt fråga hur vederbörande tänkte om lösningen är hanterad i minnet. I aktuellt fall är det ändå tydligt att det handlar om flera filer (till och med). Skulle programmet krascha och filen därför går sönder.
Det fungerar inte för mig i alla fall om någon hade löst det på det viset.

Möjligen acceptabelt om det handlar om konsultjobb och konsulten säger att hanteringen med att hela tiden synka med disk är dyrare för det tar längre tid och därför valt minnet. Fast även då blir det en diskussion för quick and dirty = dyrt. Halvfärdiga lösningar är ingen hitt.

Jag kan inte se hur det skulle vara ok med minneshantering för filer.

Simuleringsdata, det är data från simuleringar som sedan används för att beräkna och dra slutsatser från. Simuleringar kan ställas in så de är mer eller mindre exakta och vad som avgör där är hur mycket data man mäktar med och kostnader för datorer.

Nej, sedan vi blev presenterade av filstorleken så är det ingen hit med minneslagring, men innan dess tänkte vi ju oss på sin höjd några MB.

Vad är det för applikation som inte har fallback om en körning blir liggandes mitt i, det måste väl ändå gå att starta om från senaste stabila punkt? Att indata helt plötsligt får formateringar som är ohanterliga är väl ändå något man måste räkna med! Särskilt om indata baserar sig på mänsklig inblandning, vilket det alltid gör, indirekt (buggar), även när indata är maskingenererat!

Denna kan säkert överraska dig. Han pratar om operationstider om 2-3 minuter..
How to analyse 100s of GBs of data on your laptop with Python: In this article I will show you a new approach: a faster, more secure, and just overall more convenient way to do data science using data of almost arbitrary size, as long as it can fit on the hard-drive of your laptop, desktop or server.
https://vaex.io/blog/how-to-analyse-100s-of-gbs-of-data-on-yo...

Permalänk
Medlem
Skrivet av mc68000:

Nej, sedan vi blev presenterade av filstorleken så är det ingen hit med minneslagring, men innan dess tänkte vi ju oss på sin höjd några MB.

Enligt mig spelar inte det någon roll, inte ens om det bara rört sig om några tusen bytes.
Att filen går sönder om programmet kraschar är tillräckligt.

Som utvecklare måste man tänka på edge cases. Kod som inte hanterar sådant och så smäller det i produktion, det måste utvecklare lära sig och anpassa koden för. Mycket dyra buggar

Skrivet av mc68000:

Vad är det för applikation som inte har fallback om en körning blir liggandes mitt i, det måste väl ändå gå att starta om från senaste stabila punkt? Att indata helt plötsligt får formateringar som är ohanterliga är väl ändå något man måste räkna med! Särskilt om indata baserar sig på mänsklig inblandning, vilket det alltid gör, indirekt (buggar), även när indata är maskingenererat!

Precis och därför kan man inte ha saker i minnet

Skrivet av mc68000:

Denna kan säkert överraska dig. Han pratar om operationstider om 2-3 minuter..
How to analyse 100s of GBs of data on your laptop with Python: In this article I will show you a new approach: a faster, more secure, and just overall more convenient way to do data science using data of almost arbitrary size, as long as it can fit on the hard-drive of your laptop, desktop or server.
https://vaex.io/blog/how-to-analyse-100s-of-gbs-of-data-on-yo...

Hur lång tid något tar beror ju helt på vad de gör och hur snabb hårdvaran är. Är det data som bara behöver gås igenom en gång så självklart går det snabbare än om man man gör det 20 gånger ( vi gör mer än det ).

EDIT: Det verkar som att vaex inte läser all data och presenterar en analys av ett specifikt fall, det verkar vara optimerat för det fallet.

Permalänk
Medlem
Skrivet av klk:

Enligt mig spelar inte det någon roll, inte ens om det bara rört sig om några tusen bytes.
Att filen går sönder om programmet kraschar är tillräckligt.

Som utvecklare måste man tänka på edge cases. Kod som inte hanterar sådant och så smäller det i produktion, det måste utvecklare lära sig och anpassa koden för. Mycket dyra buggar

Precis och därför kan man inte ha saker i minnet

Hur lång tid något tar beror ju helt på vad de gör och hur snabb hårdvaran är. Är det data som bara behöver gås igenom en gång så självklart går det snabbare än om man man gör det 20 gånger ( vi gör mer än det ).

Vad är det som kan gå sönder om programmet stannar mitt i en körning? Du har väl senaste indatafilen lagrad på disk? Eller pratar vi om så långa körningar att en återstart för en enskild fil blir problematisk? (Långa körtider, som du inte nämnt? Fler än 20 pass igenom indatafilen som kröp fram nu..)

Om du gör 20+ pass genom indatafiler på 10+GB så motsvarar det ju den dåliga minneshanteringen du pratade om långt tidigare. Återkommande icke lokala referenser är ju döden för vilken datorverksamhet som helst. Du skrev tidigare att det görs en viss minimering av data i varje steg, är det dessa 20 pass?

Permalänk
Medlem
Skrivet av mc68000:

Vad är det som kan gå sönder om programmet stannar mitt i en körning?

Tänkte specifikt på lösningen att ha en fil som innehåller flera andra filer. Om den filen hålls internt i minnet och programmet kraschar så är också den förstörd.

Just nu genererar vi många filer (och en del annat) så vi kan återuppta där vi slutade men det är för att vi sparat ner information för varje steg som körs

Permalänk
Medlem
Skrivet av klk:

Tänkte specifikt på lösningen att ha en fil som innehåller flera andra filer. Om den filen hålls internt i minnet och programmet kraschar så är också den förstörd.

Just nu genererar vi många filer (och en del annat) så vi kan återuppta där vi slutade men det är för att vi sparat ner information för varje steg som körs

Om den filen ligger på disk, och programmet kraschar medan det uppdaterar filen så är den också förstörd. Jobba med den i minnet gör inte det hela särskilt mycket opålitligare.
Det finns ju sätt att hantera sådant, men då börjar vi prata riktig databasmotor som måste göra en massa jobb för att databasen inte skall kunna förstöras bara för att ett program kraschade vid fel tillfälle.

Permalänk
Medlem
Skrivet av Erik_T:

Om den filen ligger på disk, och programmet kraschar medan det uppdaterar filen så är den också förstörd. Jobba med den i minnet gör inte det hela särskilt mycket opålitligare.

Sannolikheten att programmet kraschar vid den typen av operation är extremt liten. Ingen komplicerad operation och det är operativsystemet som skriver.

Skrivet av Erik_T:

Det finns ju sätt att hantera sådant, men då börjar vi prata riktig databasmotor som måste göra en massa jobb för att databasen inte skall kunna förstöras bara för att ett program kraschade vid fel tillfälle.

Ja det finns men om man tar genvägar för lösningen kan jag garantera att det inte kommer att kapslas in för att hantera krascher. Ett program kan ju krascha för vad som helst. Enda lösningen är att hela tiden skriva och då är det lika bra att köra data direkt till disk

Permalänk
Datavetare
Skrivet av klk:

Sannolikheten att programmet kraschar vid den typen av operation är extremt liten. Ingen komplicerad operation och det är operativsystemet som skriver.

Ja det finns men om man tar genvägar för lösningen kan jag garantera att det inte kommer att kapslas in för att hantera krascher. Ett program kan ju krascha för vad som helst. Enda lösningen är att hela tiden skriva och då är det lika bra att köra data direkt till disk

Bara en fråga: givet att det handlar om få gigantiska filer, varför ens hålla på med ett eget ihoptragglat "tar-format"? Vore det inte bättre att använda en katalog och helt normala filoperationer?

Gör man något "custom" bör man rimligen ha något hyfsat udda användarfall, t.ex. extrema prestandakrav. Annars lär man bara skapa problem som egentligen inte finns. Här verkar det nu allt mer se ut att vara rätt normal fil I/O-hantering, av relativt stora filer.

Och hur du än vrider och vänder på det kvarstår att OS, av prestandaskäl, aggressivt cache:ar både disk-data och disk-meta-data i RAM. Att ta höjd får att programvara är så vinglig att man inte vågar använda RAM så är det nog stabiliteten i programvaran som borde vara prio#1.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Bara en fråga: givet att det handlar om få gigantiska filer, varför ens hålla på med ett eget ihoptragglat "tar-format"? Vore det inte bättre att använda en katalog och helt normala filoperationer?

Det här har jag också undrat sedan koden postades. O(n)-sökoperationen är uppenbarligen en begränsning som är anpassat till ett specifikt användningsall, likaså filnamn-längder - API:et är därmed inte speciellt generiskt. Likaså den obefintliga portabiliteten (endianness på metadatat och antagligen nyttodatat).

Eftersom portabiliteten är oväsentlig så hade min första test varit att sätta upp en loop device med lämpligt filsystem, om man nu tvunget måste hålla ihop filerna i en klump. Inget har ju sagts om krav på OS... Ett API runt att hantera loop skulle nog som mest bli en fjärdedel av koden, om man nu inte kan hitta ett som är avlusat och färdigt. Det ger ju också möjligheten till att använda precis hela verktygslådan som man kan använda på riktiga filer, typ mmap().

Det finns inget att skämmas över att använda sitt eget oportabla binära icke-endianness-hanterade filformat, jag jobbar dagligen i en (ärvd) sådan lösning i C. Men man måste förstå vad det innebär för begränsningar och att det kanske inte är Guds Gåva till Programmeraren.

Permalänk
Medlem
Skrivet av klk:

Tänkte specifikt på lösningen att ha en fil som innehåller flera andra filer. Om den filen hålls internt i minnet och programmet kraschar så är också den förstörd.

Just nu genererar vi många filer (och en del annat) så vi kan återuppta där vi slutade men det är för att vi sparat ner information för varje steg som körs

Vad är egentligen vitsen med att packa filer i ett arkivformat när de är så stora? Du får väl upp tillräckligt med sekventiell prestanda med dem direkt på disken. Varför inte bara skapa en katalog och låta filsystemet (som kan tunas) ta hand om det? Då läser/skriver du bara filen du jobbar med, inte hela arkivet varje gång du skall uppdatera något? Jag hoppas ni inte har tusentals filer i en och samma katalog?

Det hela låter för mig som att det är någon uråldrig robust lösning där man inte kan röra på indata-formatet på minsta sätt för att göra saker smartare på moderna plattformar. Finansvärlden, nej stämmer inte med att behöva gå tillbaka i filen flera gånger. Telecom, nej sms och mejl är småfiler i köeerna, jag har sett båda dessa från sina sämsta sidor. (När det stått still!). Core-beräkningar från en reaktorhärd, tveksamt. En råfil för paketförmedling (post) skulle det kunna vara om man måste gå tillbaka historiskt och leta upp färdvägen för att sortera upp den per försändelse?

Om jag skulle gissa bland allt detta så känns Telekom::trafikdata som det närmaste jag kan tänka mig.
Någonstans runt 30 miljoner samtal/dag i Sverige? Men det förklarar ju inte varför man måste gå igenom filen 20+ gånger!

Permalänk
Medlem
Skrivet av mc68000:

Vad är egentligen vitsen med att packa filer i ett arkivformat när de är så stora? Du får väl upp tillräckligt med sekventiell prestanda med dem direkt på disken. Varför inte bara skapa en katalog och låta filsystemet (som kan tunas) ta hand om det? Då läser/skriver du bara filen du jobbar med, inte hela arkivet varje gång du skall uppdatera något? Jag hoppas ni inte har tusentals filer i en och samma katalog?

Har du jobbat med cloudlösningar?
Det här har inte med prestanda eller något sådant att göra utan administration. Att få ner antalet filer gör det smidigare att jobba med informationen. Det hela håller också samman bättre. missas en fil eller något annat som gör att något glöms bort och det ligger utspritt ökar risken för att inte kunna återskapa om det skulle vara så att det är fel i beräkningar eller annat.

Beräkningar och annat görs ibland om eller annat läggs till och då händer det att man återanvänder data men det kan också vara buggar.

Skrivet av mc68000:

Telecom, nej sms och mejl är småfiler i köeerna, jag har sett båda dessa från sina sämsta sidor. (När det stått still!). Core-beräkningar från en reaktorhärd, tveksamt. En råfil för paketförmedling (post) skulle det kunna vara om man måste gå tillbaka historiskt och leta upp färdvägen för att sortera upp den per försändelse?

Om jag skulle gissa bland allt detta så känns Telekom::trafikdata som det närmaste jag kan tänka mig.
Någonstans runt 30 miljoner samtal/dag i Sverige? Men det förklarar ju inte varför man måste gå igenom filen 20+ gånger!

Pröva Google cloud eller AWS och kvantfysik

Permalänk
Medlem
Skrivet av Yoshman:

Bara en fråga: givet att det handlar om få gigantiska filer, varför ens hålla på med ett eget ihoptragglat "tar-format"? Vore det inte bättre att använda en katalog och helt normala filoperationer?

Vänta till du får bråka med användargränssnitten på google cloud eller AWS, då är du tacksam över om det bara är en fil du skall tanka ner eller flytta
Annat som underlättas och en sådan här lösning kan också fungera i flera typer av operationer, inte så att det behövs nu men lösningen är användbar

Och det går ju också att zippa hela filen som har andra filer i sig.

Permalänk
Medlem
Skrivet av klk:

Har du jobbat med cloudlösningar?
Det här har inte med prestanda eller något sådant att göra utan administration. Att få ner antalet filer gör det smidigare att jobba med informationen. Det hela håller också samman bättre. missas en fil eller något annat som gör att något glöms bort och det ligger utspritt ökar risken för att inte kunna återskapa om det skulle vara så att det är fel i beräkningar eller annat.

Beräkningar och annat görs ibland om eller annat läggs till och då händer det att man återanvänder data men det kan också vara buggar.

Pröva Google cloud eller AWS och kvantfysik

Cloud fanns inte när jag var aktiv, så jag förstår inte skillnaden mellan att en nätverkssladd går till AWS, eller om den går ner till datahallen i källaren. (Till vinden i Holland, för att undvika eventuella översvämningar!)

Permalänk
Medlem

Jag har självsanerat 60% av det jag velat skriva under dagen, men kontentan är väl att vi nu efter två sidor vet lite mera om vad du kämpar med.
OK, dåliga användarinterface till externa datorer är en faktor som jag kan förstå. Menar du att det inte finns tillgång till kommandoskal till de där cloud-sakerna? Att varje påverkan av dessa blir som via en getter/setter funktion om man skall dra en C++ analogi.

Permalänk
Medlem
Skrivet av mc68000:

Jag har självsanerat 60% av det jag velat skriva under dagen, men kontentan är väl att vi nu efter två sidor vet lite mera om vad du kämpar med.
OK, dåliga användarinterface till externa datorer är en faktor som jag kan förstå. Menar du att det inte finns tillgång till kommandoskal till de där cloud-sakerna? Att varje påverkan av dessa blir som via en getter/setter funktion om man skall dra en C++ analogi.

Det finns om man installerat verktygen på sin dator. Själv har jag 4 olika datorer som jag använder vid utveckling, 2 som går kanske 90% (en stationär hemma och en portabel som fungerar som arbetsdator), ibland kör jag på någon av de andra.
Förutom det så är det flera olika operativsystem. På arbetsdatorn kör jag windows och två olika ubuntu varianter. De olika cloudlösningarna är ibland sena med att uppdatera olika distros och därför behöver man hela tiden kunna kompilera för äldre varianter och testa där med. För att testa lokalt behövs det flyttas om en del.

Färre filer är enklare, har också planer på att göra någon slags insallationsvariant av det men får ta det när det blir tid. Att själv kunna leka och anpassa koden är smidigt jämfört med att trilskas med bibliotek (vi använder ett för att zippa filer)

Permalänk
Medlem

Nämner att det är mycket typiskt för mig, allt som är extra arbete som kommer upprepas försöker jag i princip alltid arbeta bort eller förenkla. I team jag arbetat brukar jag börja städa även om ingen nämner det. Saker som att fixa till projekt och annat så det blir smidigare att arbeta.

Permalänk
Datavetare
Skrivet av klk:

Pröva Google cloud eller AWS och kvantfysik

Spännande! Kan du ge lite mer bakgrund till vad ni använder kvantfysik till? Du kan vara teknisk om det behövs, gjorde mitt examensarbete på KTH kring filtrering av inhibitorer (det via kvantkemi) som idag är en vanligt metod vid framställning av vaccin.

Skrivet av klk:

Vänta till du får bråka med användargränssnitten på google cloud eller AWS, då är du tacksam över om det bara är en fil du skall tanka ner eller flytta
Annat som underlättas och en sådan här lösning kan också fungera i flera typer av operationer, inte så att det behövs nu men lösningen är användbar

Vad är det för fel på "ls, tar, xz, cp, ..." etc? Är ju bara montera EC2-instanserna (det även med Google Cloud) m.h.a. sshfs. Långsammare än lokalt filaccess, men det är ju inget som ditt hemmasnickrade system hjälper med heller. Nu går att använda standardverktyg.

Att starta, stoppa och hantera EC2-instanser går ju också att scripta med awscli.

Så är inte riktigt med på varför AWS skulle vara en flaskhals. Börja använd VS Code så blir det inte heller något problem att jobba/utveckla/debugga mot EC2 (eller vad som helst som är nåbart via SSH) på ett sätt som känns rätt mycket på samma sätt som att sitta lokalt. Det oavsett om jobbet är med nakna pekare i C++ eller "amatörprogrammering" i Python (det skrivet, här finns fördelar med Rust och Go för de har top-notch "language-servers" mot VC Code, C++ är "OK-ish" medan Python är "riktigt bra")

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Datavetare

Lite on-topic igen. Snubblade över denna
https://cispa.de/en/research/publications/84651-await-a-secon...

"Code reuse attacks exploit legitimate code sequences in a binary to execute malicious actions without introducing new code. Control Flow Integrity (CFI) defenses mitigate these attacks by restricting program execution to valid code paths. However, new programming paradigms, like C++20 coroutines, expose gaps in current CFI protections. We demonstrate that, despite rigorous standardization, C++ coroutines present new vulnerabilities that undermine both coarsegrained and fine-grained CFI defenses. Coroutines, widely used in asynchronous programming, store critical execution data in writable heap memory, making them susceptible to exploitation. "

vilket är relaterat till det jag postade tidigare i tråden då man kan gå runt en del av säkerhetsförbättringarna som kan göras om C++20 coroutines används (de relaterade till "kontrollflödesintegritet")
#20826868

Och givet diskussionen i denna tråd. Vid en första anblick kan man tycka att den attack-typ som beskrivs i rapporten, Coroutine Frame-Oriented Programming (CFOP), borde gå att använda i t.ex. C# async/await mekanism som likt C++20 coroutines också är "stack-less" och håller tillstånd på heap:en (Go är by-design inte påverkat då goroutines använder en stack).

Men C# (och andra som implementerar async/await på liknande sätt) är inte påverkade då man inte har rätt typ av access för att utföra attackerna. I C++ blir tillgång på råa pekare och att man kan hantera heap:en "hur som helst" en säkerhetshål här.

Så tyvärr fortsatt uppförsbacke för C++ om målet är att "programmera minnessäkert".

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Vad är det för fel på "ls, tar, xz, cp, ..." etc?

Inget fel, bra teknik när det passar

Skrivet av Yoshman:

Är ju bara montera EC2-instanserna (det även med Google Cloud) m.h.a. sshfs. Långsammare än lokalt filaccess, men det är ju inget som ditt hemmasnickrade system hjälper med heller. Nu går att använda standardverktyg.

Då har du
- Vendor lock-in, en lösning som behöver mer administration när man byter och skiftar runt
- Att hitta rätt "verktyg" för att sköta lösningen tar tid
- Beroende på hur extra funktionalitet läggs till till blir det ökat arbete
- Extra funktionalitet man saknar kontrollen över, vad händer om det inte sker uppdateringar mm
- Fungerar det för vad som skall göras

Att välja lösning innebär ofta mycket mer än att bara leta och tro att så fort man hittat funktionalitet så är allt löst. Att plocka in kod har alltid kostnader som man bör tänka på.

Tar det två dagar att koda ihop en lösning som kan bakas in och slippa allt annat trassel är det inget att tänka på

Det finns gott om skräckexempel där en mindre frontendlösning och enklare databaslösning är inpackad i så avancerad konfiguration att det krävs hela team för att sköta något som utvecklare kodat ihop på en eller några månader

Permalänk
Datavetare
Skrivet av klk:

Inget fel, bra teknik när det passar

Då har du
- Vendor lock-in, en lösning som behöver mer administration när man byter och skiftar runt
- Att hitta rätt "verktyg" för att sköta lösningen tar tid
- Beroende på hur extra funktionalitet läggs till till blir det ökat arbete
- Extra funktionalitet man saknar kontrollen över, vad händer om det inte sker uppdateringar mm
- Fungerar det för vad som skall göras

Att välja lösning innebär ofta mycket mer än att bara leta och tro att så fort man hittat funktionalitet så är allt löst. Att plocka in kod har alltid kostnader som man bör tänka på.

Tar det två dagar att koda ihop en lösning som kan bakas in och slippa allt annat trassel är det inget att tänka på

sshfs är en standardfunktion i Linux (specifikt FUSE är det, sshfs är en variant som använder FUSE).

sshfs finns även till MacOS, i.e. man kan montera ett delträd via SSH på sin lokala MacOS-maskin. Finns varianter till Windows, har aldrig använt dem så kan inte säga något om det. Men finns ju också WSL2 som standardfunktion i Win10/11, då har man ju sshfs den vägen.

Att göra sig beroende av awscli är en vendor-lockin, men det är ju för att hantera AWS-resurser (och den komplexiteten är just komplexitet, t.ex. Hashicorp gör ju produkter för att hantera denna komplexitet, Terraform). Det du specifikt gör kräver i sig bara standardfunktioner i Linux (för utgår att ni kör Linux-instanser i "molnet").

Handlar det "bara" om att ladda upp/ned filer går det ju att göra enbart med ssh+tar/gzip/bz2/xz. Då kan man även göra saker som att komprimera data "on-the-wire" om man har mer beräkningskraft jämfört med nätverksbandbredd.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk

Grundaren(?) av cURL, Daniel Stenberg, skrev för några dagar sedan inlägg om att skriva säker C-kod för cURL med kort inslag om just minnessäkerhet, så nästan enligt trådämnet? Kanske han till och med smygläser denna tråd till och från?!

Mvh,
WKF.

Visa signatur

(V)ulnerabilities
(I)n
(B)asically
(E)verything
Programming

Permalänk
Datavetare

En annan sak som hänt i dagarna är inte direkt relaterat till C++ och minnessäkerhet, men definitivt relaterat till flera saker som diskuterats i denna tråd runt vad som eventuellt gör C++ unikt.

Nvidia har precis lanserat stöd för att skriva CUDA-kernels i Python!
https://thenewstack.io/nvidia-finally-adds-native-python-supp...
https://developer.nvidia.com/cuda-python

En viktig orsak är att de ser stora begränsningar i hur pass populärt något kan bli idag om det bara finns till C och C++. Totala antalet programmerare växer fortfarande mycket snabbt, på senare tid är det Afrika, Sydamerika och Asien tillväxten är störst.

C och C++ är inte speciellt populärt i dessa grupper. Samtidigt växer Pythons popularitet väldigt snabbt, det har nu även passerat JS som mest använda språk på github (d.v.s. det är #1 där).

Så hur är det relevant här? Att skriva CUDA-kernels gör man primärt för att få upp prestanda rejält, något "vanliga" Python inte direkt är känt för att vara jätte bra på. Vidare kräver effektiv användning av GPU förståelse för "host memory", "global device memory", "shared memory" och "local memory". Det är något man behöver hantera explicit i CUDA och det är exponerat även i Python.

I just detta fall tror jag faktiskt det kan bli riktigt bra med Python. Vissa användningar av Python list-comprehension är en väldigt bra match i hur man vill jobba med GPGPU för att det ska bli effektiv. Och om det blir bra kan rätt mycket exakt samma teknik användas för att då kraftigt SIMD-optimera Python kod (GPUer är rätt mycket väldigt breda SIMD maskiner).

För att ta ett enkelt konkret exempel på hur en CUDA-kernel kan se ut
https://nyu-cds.github.io/python-numba/05-cuda/

from __future__ import division from numba import cuda import numpy import math # CUDA kernel @cuda.jit def add_one_kernel(io_array): pos = cuda.grid(1) if pos < io_array.size: io_array[pos] += 1 # Host code data = numpy.ones(256) threadsperblock = 256 blockspergrid = math.ceil(data.shape[0] / threadsperblock) # Launch kernel add_one_kernel[blockspergrid, threadsperblock](data) print(data)

Och detta är motsvarande "vanliga" CUDA, misstänker att det inte finns någon prestandaskillnad i GPGPU-kernel (PyTorch gör liknande saker "under huven" och ger extremt effektiva GPU-kernels trots att man skriver logiken i Python)

#include <stdio.h> #include <cuda_runtime.h> // CUDA kernel in C __global__ void add_one_kernel(float *io_array, int size) { int pos = blockIdx.x * blockDim.x + threadIdx.x; if (pos < size) { io_array[pos] += 1.0f; } } int main() { const int N = 256; // Allocate host memory size_t size = N * sizeof(float); float *h_data = (float*)malloc(size); for (int i = 0; i < N; ++i) { h_data[i] = 1.0f; } // Allocate device memory and move from host to device float *d_data; cudaMalloc((void**)&d_data, size); cudaMemcpy(d_data, h_data, size, cudaMemcpyHostToDevice); int threadsPerBlock = 256; int blocksPerGrid = (N + threadsPerBlock - 1) / threadsPerBlock; // Launch kernel add_one_kernel<<<blocksPerGrid, threadsPerBlock>>>(d_data, N); cudaMemcpy(h_data, d_data, size, cudaMemcpyDeviceToHost); // Print result for (int i = 0; i < N; ++i) { printf("%.1f ", h_data[i]); } printf("\n"); // Cleanup cudaFree(d_data); free(h_data); return 0; }

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

En viktig orsak är att de ser stora begränsningar i hur pass populärt något kan bli idag om det bara finns till C och C++. Totala antalet programmerare växer fortfarande mycket snabbt, på senare tid är det Afrika, Sydamerika och Asien tillväxten är störst.

Vet om att de flesta här inte håller med men python är inte programmering. Python är att beskriva vad man önskar och försöka lära sig bibliotek som har funktionaliteten man önskar. Ett verktyg.
Python konkurrerar med andra språk som är främst deklarativa.

En python utvecklare som diskuterar kodlösningar med C eller C++ programmerare går inte. Två helt olika yrken

Ja.., det finns gott om C och C++ programmerare (framförallt C++) som skriver kod som python gör, de bör byta språk

Permalänk
Medlem
Skrivet av klk:

Vet om att de flesta här inte håller med men python är inte programmering.

Korrekt eftersom Python är ett programmeringsspråk. Om Python inte är programmering så är inte C++ programmering.

Skrivet av klk:

Python konkurrerar med andra språk som är främst deklarativa.

Python är ett imperativt språk och konkurrerar inte med andra språk. Det är ett språk och inte ett företag. Lite som att säga att svenska konkurrerar med spanska ... Vad innebär det ens?

Skrivet av klk:

En python utvecklare som diskuterar kodlösningar med C eller C++ programmerare går inte. Två helt olika yrken

Jag kodar C och har haft givande diskussioner med en kund som enbart ville ha en lösning i Python eftersom det var deras gemensamma kompetens i teamet som skulle ta emot leveransen. Det fungerade fint så detta låter som ett "you problem".

Skrivet av klk:

Ja.., det finns gott om C och C++ programmerare (framförallt C++) som skriver kod som python gör, de bör byta språk

Nu snackar du i nattluvan igen...

Permalänk
Medlem
Skrivet av orp:

Jag kodar C och har haft givande diskussioner med en kund som enbart ville ha en lösning i Python eftersom det var deras gemensamma kompetens i teamet som skulle ta emot leveransen. Det fungerade fint så detta låter som ett "you problem".

Exakt. Python kodare klarar inte C eller C++ för det är två olika saker

Vansinne att skriva C++ kod som python kodare brukar skriva den
Och tvärtom brukar det inte tillhöra intresset för C/C++ kodare att plugga på bibliotek

Permalänk
Medlem
Skrivet av klk:

Exakt. Python kodare klarar inte C eller C++ för det är två olika saker

Vansinne att skriva C++ kod som python kodare brukar skriva den
Och tvärtom brukar det inte tillhöra intresset för C/C++ kodare att plugga på bibliotek

Nu gör du en vild tolkning...

Kunden säger att dom har en delat kompetens inom teamet gällande Python och några kodar C++, några kodar C#, några kodar Ruby men den gemensamma nämnaren är Python. Dom vill att alla i teamet ska kunna hjälpas åt med underhåll.

Du skrev att C-utvecklare och Python-utvecklare inte kan diskutera kod. Jag är C-utvecklare och kunden är i huvudsak Python-utvecklare. Vi kunder diskutera kod. Det bevisar att ditt påstående är felaktigt.

I deras team finns folk som i huvudsak kodar Python och C++ sekundärt. Utvecklare tappar inte magiskt 80 IQ för att man i huvudsak kodar Python och blir helt oförmögen att kunna skriva/förstå annan kod. Kundens Python/C++-utvecklare skriver väldigt mycket bättre C++ än vad jag gör som C-utvecklare. För att i C++ använder man bibliotek i större utsträckning än i C.

Permalänk
Medlem
Skrivet av orp:

I deras team finns folk som i huvudsak kodar Python och C++ sekundärt. Utvecklare tappar inte magiskt 80 IQ för att man i huvudsak kodar Python och blir helt oförmögen att kunna skriva/förstå annan kod

Det är du som hänger upp dig på IQ eller tror detta är en intelligensfråga.

Vi lever i en komplex värld, man måste välja vad man fokuserar på. Alla kan inte bli duktiga i allt. Python väljs normalt för att man måste få något gjort av datorn men inte vill grotta ner sig i detaljer eller tänka återanvändbar kod, arkitektur, hårdvara, operativsystem och annat.

Samtidigt som att det är idiotisk och skriva hårdkodade lösningar i C++

Permalänk
Medlem
Skrivet av klk:

Det är du som hänger upp dig på IQ eller tror detta är en intelligensfråga.

Jag drog in IQ för att överdriva det som jag tycker är tramsigt med ditt påstående. De flesta utvecklare kodar mer än ett språk och det är korkat att påstå att en person som utvecklar Python i huvudsak inte skulle kunna förstå sig på ett annat språk. Jag har bevisligen observerat Python-utvecklare som förstår sig på C++.

Skrivet av klk:

Vi lever i en komplex värld, man måste välja vad man fokuserar på. Alla kan inte bli duktiga i allt.

Nej man behöver inte bli duktig på allt men att kunna två språk är inte ovanligt och varken Python eller C++ är ovanliga språk, dvs sannolikheten är inte noll och sannolikheten är inte låg att utvecklare kan dess språken.

Skrivet av klk:

Python väljs normalt för att man måste få något gjort av datorn men inte vill grotta ner sig i detaljer eller skriva återanvändbar kod, arkitektur och annat.

"Utan att grotta ner sig i detaljer", visst man behöver inte allokera och frigöra minne men man blir ju inte helt bort-abstraherad från att det finns CPU- och minnesbegränsningar och man vinner ju fortfarande på att känna till saker om filsystem, nätverk osv.

"...eller skriva återanvändbar kod, arkitektur och annat.", detta skriker också okunskap från din sida. Varför skulle generella kodningstekniker inte vara viktiga för Python?! Om nu Python är så ineffektivt enligt dig, skulle inte återanvändning av kod och arkitektur spela en ännu viktigare roll för Python-utvecklare?

Skrivet av klk:

Samtidigt som att det är idiotisk och skriva hårdkodade lösningar i C++

Vad betyder "hårdkodade lösningar" enl. dig? Konstanter är hårdkodade och jag såg en hel del konstanter i din kod så bevisligen använder du dig av hårdkodning.

Permalänk
Medlem
Skrivet av orp:

Vad betyder "hårdkodade lösningar" enl. dig? Konstanter är hårdkodade och jag såg en hel del konstanter i din kod så bevisligen använder du dig av hårdkodning.

En gång i tiden delade man upp språk i 1G, 2G, 3G, 4G, Siffrorna representerar abstraktionsnivåer. Finns kanske till och med 5G.
Abstraktionsnivå avgör en del av var arbete läggs för att komma i mål.

Hårdkodad = Kod som inte går att återanvända, oflexibel lösning men som måste till för att till slut lösa specifika problem i domänen.

Prata abstraktionsnivå med utvecklare i språk som framförallt handlar om att använda färdigskriven kod är inte ett prioriterat område, ligger inte sfärens intresse. Samma område i C++ och det är nästan det enda man tänker på.

Permalänk
Medlem
Skrivet av klk:

En gång i tiden delade man upp språk i 1G, 2G, 3G, 4G, Siffrorna representerar abstraktionsnivåer. Finns kanske till och med 5G.
Abstraktionsnivå avgör en del av var arbete läggs för att komma i mål.

Har aldrig hört talas om språk generationer och känns ganska godtyckligt. Oavsett så fick jag läsa på det lite och vad tror du jag hittade? Både C++ och Python tillhör 3GL

https://en.wikipedia.org/wiki/Programming_language_generation...

Skrivet av klk:

Hårdkodad = Kod som inte går att återanvända, oflexibel lösning men som måste till för att till slut lösa specifika problem i domänen.

Ser du konstanter som hårdkodning?

Skrivet av klk:

Prata abstraktionsnivå med utvecklare i språk som framförallt handlar om att använda färdigskriven kod är inte ett prioriterat område, ligger inte sfärens intresse. Samma område i C++ och det är nästan det enda man tänker på.

Kan du ge ett exempel på sådana abstraktionsnivåer för det känns som vi har olika definition av abstraktionsnivå också?
Enl. generationerna så har C++ och Python tillräckligt lika abstraktionsnivåer för att placeras i samma generation.