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

Permalänk
Medlem
Skrivet av klk:

Och hade samma kod skrivits i java eller kanske python hade den varit ännu enklare. Så varför går inte alla över till python där man knappt behöver vara programmerare för att skriva kod?

Det var ju ett ganska barnsligt argument. Du bad om ett exempel i Rust och @Yoshman gav dig ett exempel i Rust. Han skrev väl även om ett av dina exempel i C++?

Nu talar du nedlåtande om folk som kodar Python och det är svårt att avgöra om du är okunnig eller trollar. Varför tror du inte att man behöver vara programmerare för att skriva Python? Du känner kanske inte till att Python är största språket för maskininlärning? För att gå tillbaka till ditt argument om att göra komplicerade beräkningar och optimera för GPU-offloading så tror jag att den kategorin av Python-utvecklare per din definition är mer programmerare än vad du och jag är...

Permalänk
Medlem
Skrivet av klk:

Fråga: Om en utvecklare inte använder debuggern. Utvecklaren har kanske producerat 1000 rader kod under en vecka, hur vet utvecklaren att koden fungerar? Skulle du känna dig säker på att det är kvalitet i koden om du vet att utvecklaren inte använder en debugger?

Jag skulle ABSOLUT inte lite på att en utvecklares kod fungerar om personen sagt att hen studerat koden i debuggern. Jag vill ha tester för att verifiera att koden gör det som den ska, det är industristandarden.

Om du tycker annorlunda så uppmuntrar jag dig att säga att du föredrar debuggern över testning för kvalitetssäkring vid nästa arbetsintervju.

Skrivet av klk:

Och jag kan inte låta bli att nämna det.... Vi sitter just nu och skriver i en tråd som handlar om att C++ inte är säkert för att det går att manipulera minnet och hur mycket bättre rust är för det där inte går samtidigt försvarar du utvecklare som låter bli att använda en debugger.

Det är vad jag kallar för "att sila mygg och svälja kameler"

Just nu sitter vi och diskuterar OT-nonsens som du envisas med även om jag har bett dig flera inlägg att flytta detta till en annan tråd.

Permalänk
Medlem
Skrivet av orp:

Nu talar du nedlåtande om folk som kodar Python och det är svårt att avgöra om du är okunnig eller trollar. Varför tror du inte att man behöver vara programmerare för att skriva Python?

Jag frågade varför inte alla skriver i python, den koden är lättare att läsa (håller med). Hur är det nedlåtande?

Permalänk
Medlem
Skrivet av klk:

Jag frågade varför inte alla skriver i python, den koden är lättare att läsa (håller med). Hur är det nedlåtande?

Nu ljuger du också ... du skrev: "Och hade samma kod skrivits i java eller kanske python hade den varit ännu enklare. Så varför går inte alla över till python där man knappt behöver vara programmerare för att skriva kod?".

Att anta att man knappt behöver vara programmerare för att skriva Python är nedlåtande och okunnigt.

Permalänk
Medlem
Skrivet av orp:

Nu ljuger du också ... du skrev: "Och hade samma kod skrivits i java eller kanske python hade den varit ännu enklare. Så varför går inte alla över till python där man knappt behöver vara programmerare för att skriva kod?".

Att anta att man knappt behöver vara programmerare för att skriva Python är nedlåtande och okunnigt.

Ok, jag fattade faktiskt inte att detta kunde uppfattas som negativt. Och det vet väl alla att Python används för att det är enkelt eller får man inte säga det?
Är ni så känsliga på jobbet med

Hur diskuterar ni teknik och man inte får säga att något är bättre eller sämre än något annat

Permalänk
Medlem
Skrivet av orp:

Jag skulle ABSOLUT inte lite på att en utvecklares kod fungerar om personen sagt att hen studerat koden i debuggern. Jag vill ha tester för att verifiera att koden gör det som den ska, det är industristandarden.

Om du tycker annorlunda så uppmuntrar jag dig att säga att du föredrar debuggern över testning för kvalitetssäkring vid nästa arbetsintervju.

Enligt mig är inte tester tillräckligt, det är för dåligt. Mest en teknik för de som inte lärt sig bättre sätt att kvalitetssäkra koden

Men jag håller med om att detta är något man skall hålla tyst om på intervju för det kräver en längre diskussion om teknik och hur man producerar bra kod, inte många som intervjuar som ens förstår det

Permalänk
Medlem
Skrivet av klk:

Ok, jag fattade faktiskt inte att detta kunde uppfattas som negativt. Och det vet väl alla att Python används för att det är enkelt eller får man inte säga det?
Är ni så känsliga på jobbet med

Det handlar inte om att vara känslig, det handlar om att du uttrycker dig dumt och därför säger jag till dig att det är dumt. Är du känslig som inte klarar av proportionellt kritik till dina handlingar?

Du får säga att du tycker saker är bättre och sämre men att konstant hävda dig som bättre än dina med människor är jäkligt okarismatiskt.

Skrivet av klk:

Hur diskuterar ni teknik och man inte får säga att något är bättre eller sämre än något annat

Genom att underbygga argumenten med fakta och inte fördomar... och sedan har man en konstruktiv diskussion om ämnet.

Permalänk
Medlem
Skrivet av orp:

Du får säga att du tycker saker är bättre och sämre men att konstant hävda dig som bättre än dina med människor är jäkligt okarismatiskt.

Du menar skryt, det är förbjudet inom programmering? Där är alla lika, spelar ingen roll om man programmerat i över 30 år eller kört i några månader.

Personligen gillar jag om någon berättar att jag gör något dåligt eller jag slarvat, det är då jag lär mig. Klarar man inte sådan kritik kommer man aldrig bli bättre
"kärringfasoner" att inte palla kritik

Permalänk
Medlem
Skrivet av klk:

Du menar skryt, det är förbjudet inom programmering? Där är alla lika, spelar ingen roll om man programmerat i över 30 år eller kört i några månader.

Jag är OK med skryt men då får man faktiskt backa det också ...

Permalänk
Medlem
Skrivet av klk:

Enligt mig är inte tester tillräckligt, det är för dåligt. Mest en teknik för de som inte lärt sig bättre sätt att kvalitetssäkra koden

Då är man dålig på att skriva tester enligt mig. Testning är nästan synonymt med kvalitetssäkring idag.

Permalänk
Medlem
Skrivet av orp:

Då är man dålig på att skriva tester enligt mig. Testning är nästan synonymt med kvalitetssäkring idag.

Har inte med det att göra men det är OT här eller en hel vetenskap för sig.

Tester tror jag mest blivit populära för det är något som går hem hos ledning, de "förstår" sådant medan andra tekniker är svårare.

Tester (framförallt unit tester) är som att hälla sirap i projekt, allt går så mycket långsammare. I framförallt C++ går det att kombinera med bättre tekniker.

Jag menar alltså inte att man inte skall testa kod, men att skriva "extra" saker som orsakar beroenden och inte tar allt är alldeles för osäkert.

Jag har aldrig sett en utvecklare som är så duktig att de klarar att skriva tester på rimlig tid som tar det mesta

Permalänk
Medlem
Skrivet av klk:

Har inte med det att göra men det ...

Det har exakt med det att göra.

Skrivet av klk:

... är OT här eller en hel vetenskap för sig.

Just how you like it ... och nej det är inte en hel vetenskap.

Skrivet av klk:

Tester tror jag mest blivit populära för det är något som går hem hos ledning, de "förstår" sådant medan andra tekniker är svårare.

Nope det är för att en vettig arbetsgivare inte vill betala för att du ska sitta och glo i debuggern istället för att jobba och att glo i debuggern skalar inte som kvalitetssäkring i en större kodbas (sådana som du brukar gilla att referera till). Man vill automatisera kvalitetssäkringen för att spara tid (och pengar) och få deterministiska resultat. Att du ska kolla i en debugger är inte deterministiskt, inte ens ditt resonemang i tråden har varit deterministiskt...

Skrivet av klk:

Tester (framförallt unit tester) är som att hälla sirap i projekt, allt går så mycket långsammare. I framförallt C++ går det att kombinera med bättre tekniker.

Jag menar alltså inte att man inte skall testa kod, men att skriva "extra" saker som orsakar beroenden och inte tar allt är alldeles för osäkert.

Jag har aldrig sett en utvecklare som är så duktig att de klarar att skriva tester på rimlig tid som tar det mesta

Låter som skill-issue ärligt talat. Tanken med unit-tester är att isolera beteende inte introducera något nytt. Om du syftar på att använda ett test-ramverk med "att introducera beroende" så hacka ihop ett eget då med asserter.

Permalänk
Medlem

@orp Jag skrev inte att man inte skall testa kod och jag skrev inte att debuggern ersätter testning av kod (bara så inte andra missuppfattar om det nu är någon som orkar läsa det här).
Du behöver inte svara tråden är kladdig nog ändå

Permalänk

Jodå, somliga av oss orkar fortfarande läsa

Först kom detta:

Skrivet av klk:

Enligt mig är inte tester tillräckligt, det är för dåligt. Mest en teknik för de som inte lärt sig bättre sätt att kvalitetssäkra koden

Sedan skriver du:

Skrivet av klk:

Jag skrev inte att man inte skall testa kod och jag skrev inte att debuggern ersätter testning av kod (bara så inte andra missuppfattar om det nu är någon som orkar läsa det här).

Nu är vi långt OT, men jag blir nyfiken på hur du kvalitétsäkrar koden utan att skriva tester. Själv är jag stor anhängare av TDD-liknande modeller. Jag är långt ifrån bokstavstrogen, men att ha massor med små testfall som testar isolerade delar av programmet (tester som går fort att köra, gärna automatiskt i samband med att man bygger sitt program) är ett bra stöd. Skulle man råka ha sönder något av den existerande funktionaliteten när man lägger till ny kod så upptäcker man det direkt.

Hur säkrar du din kod?

Permalänk
Medlem
Skrivet av klk:

Fråga: Om en utvecklare inte använder debuggern. Utvecklaren har kanske producerat 1000 rader kod under en vecka, hur vet utvecklaren att koden fungerar? Skulle du känna dig säker på att det är kvalitet i koden om du vet att utvecklaren inte använder en debugger?

En debugger används inte för att upptäcka buggar, eller för att visa att koden fungerar. Det har man tester till.
Hur vet man att kod fungerar korrekt om man inte testat den? Det vet man inte.

En debugger använder man efter att man konstaterat förekomsten av en bug, för att hitta och fixa buggen. Det går oftast alldeles utmärkt att göra även utan en debugger, men en bra debugger kan onekligen förenkla processen.

En debugger hjälper dig inte att skriva bra kod, eller att undvika buggar. Den hjälper dig bara att fixa buggar i efterhand.

Permalänk
Datavetare
Skrivet av klk:

För mig är debuggern det helt avgörande när jag väljer miljö att utveckla i. Det finns en del som skriver C++ kod och inte använder debuggern, istället skriver de ut värden och kompilerar om. Det går ju bara bort på 0.1 sekund. Den typen av utveckling fungerar inte mer än om man möjligen sitter med små skol eller hobbyprojekt. En gissning är att de lärt sig koda på universitet eller liknande och där är det inte så noga hur kod skrivs, mer att de lyckas lösa något.

Fast du verkar ju sitta med Windows givet att Visual Studio inte finns till något annat OS. Det är väl ändå "knatteligan"?

Ok, inte helt seriöst men inte heller helt oseriöst. De riktigt "tunga" sakerna görs primärt på Linux idag, Visual Studio har absolut en rad kvalitéer även om jag tycker det primärt gäller C# idag, på C++ sidan är det passerat av t.ex. Rider (inte minst om man håller på med spelutveckling i C++, framförallt om det råkar vara UnrealEngine) samt definitivt rejält akterseglat av miljöer där man fullt ut kan använda GDB/LLDB (som t.ex. VS Code, men även Vim, Emacs etc).

Orsaken: sitter man i riktigt stora projekt, t.ex. OS-kärnor eller vissa embedded-system är möjligheten att kunna ha projektanpassade skript ovärdeligt. Saker man kan göra med script (både GDB och LLVM skriptas numera med Python) är emulering av kommandon som "ps", går att lägga triggers som t.ex. gör exakt det du "emulerar" med (skräp)kod i slutresultatet etc.

Så ja, sitter med VS Code (men har även Rider). Använder i praktiken enbart Windows för spelutveckling, och Visual Studio om denna spelutveckling görs med C# (annars Rider). Exemplet kördes på VS Code, som jag föredrar över XCode för allt utom Swift/Metal-programmering...

Skrivet av klk:

Inom frontend är det än vanligare att inte använda debuggern i browsern exempelvis, typiskt för utvecklare som kör react eller annat ramverk. När de inte använder debuggern så räkna med att det blir många buggar som behöver fixas.

??? Är inte speciellt van front-end programmerare, men de få gånger jag pillat med React eller annan front-end var en av de första sakerna kollegor visade just hur man debuggar m.h.a. Chromes inbyggda debugger (som var/är långt mer avancerad än vad jag hade gissat).

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:

Fast du verkar ju sitta med Windows givet att Visual Studio inte finns till något annat OS. Det är väl ändå "knatteligan"?

Har du hört talas om WSL?

Windows och C++ har aldrig varit knatteliga, det är nästan uteslutande där du ser de största projekten (självklart finns det mycket skräp också eftersom den miljön varit så extremt dominerande)

Windows är överlägset idag för utveckling. Dels tar visual studio mer och man kan köra flera olika linux versioner förutom att man också kan testa på ARM. Har både ARM version den vanliga x86.
VS Code i Linux (apple egentligen som verkar vara standard bland studenter) hittar inte lika mycket problem när det kommer till detaljer. Har några gånger tagit in mjukvara utvecklad på linux och refaktorerat till så det går att köra på windows, det är ofta man hittar saker som inte upptäcks in linux.

Och skriver mjukvara för HPC cluster, vi använder både Google Cloud och AWS

Skrivet av Yoshman:

Rider (inte minst om man håller på med spelutveckling i C++, framförallt om det råkar vara UnrealEngine) samt definitivt rejält akterseglat av miljöer där man fullt ut kan använda GDB/LLDB (som t.ex. VS Code, men även Vim, Emacs etc).

Av det jag sett från spelutvecklare så är det rätt sopig kod, väldigt mycket "så hör jag gör och jag skiter i hur andra kodar". Intresset för programmering är mindre, det viktiga är spelet

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Nu är vi långt OT, men jag blir nyfiken på hur du kvalitétsäkrar koden utan att skriva tester. Själv är jag stor anhängare av TDD-liknande modeller. Jag är långt ifrån bokstavstrogen, men att ha massor med små testfall som testar isolerade delar av programmet (tester som går fort att köra, gärna automatiskt i samband med att man bygger sitt program) är ett bra stöd. Skulle man råka ha sönder något av den existerande funktionaliteten när man lägger till ny kod så upptäcker man det direkt.

Hur säkrar du din kod?

Tänkte starta en egen tråd om det men det blir nog i helgen (eller nästa vecka). Och "alla" kommer hata mig där också

Att inte följa "flocken" i programmering idag är otroligt känsligt

Permalänk
Medlem
Skrivet av Yoshman:

Rider (inte minst om man håller på med spelutveckling i C++, framförallt om det råkar vara UnrealEngine) samt definitivt rejält akterseglat av miljöer där man fullt ut kan använda GDB/LLDB (som t.ex. VS Code, men även Vim, Emacs etc).

Är inte rider utvecklat i Java? Det tar jag inte i med tång. Java är det sämsta som hänt inom programmering, orsakat enorm skada och är kanske huvudorsaken till varför utveckling gått tillbaka från 2010 ungefär. De bästa är de som lärde sig mellan 1990 - 2005.

Permalänk
Medlem
Skrivet av klk:

Och "alla" kommer hata mig där också

Det är ingen som hatar dig, du verkar bara ha en oerhört grandios självbild.
Och jag tror att den erfarenheten dom flesta har av människor med grandios självbild och ett återkommande behov av att hävda sig själv, är att den självupplevda bilden stämmer dåligt överens med verkligheten.

Permalänk
Medlem
Skrivet av Xeonist:

Det är ingen som hatar dig, du verkar bara ha en oerhört grandios självbild.
Och jag tror att den erfarenheten dom flesta har av människor med grandios självbild och ett återkommande behov av att hävda sig själv, är att den självupplevda bilden stämmer dåligt överens med verkligheten.

De som reagerar så borde nog fundera mera på varför en del lindar in saker och verkar trevliga, de tänker inte på samma sätt som de talar.
Det blir mycket mer effektivt när personer på möten och annat vågar säga vad de tycker och tänker

Men absolut, är fullt medveten om att det är få som pallar

Permalänk
Medlem

Kan flika in ang. frontend utveckling och användning av debugging och ramverk som React då jag jobbat med det i 5+ år nu.
Samtliga mina kollegor på 4 olika arbetsplatser använder debuggern när det behövs, och testerna vi skriver körs enbart i utvecklingsmiljön / pipelines och inkluderas inte produktionskoden och saktar därför inte ner något heller.

Och som flera påpekat innan så är testerna garantin på att koden är korrekt, inte debuggern. Debuggern används för att lista ut VARFÖR något går snett, men testerna är vad som säger att koden är korrekt.

Så då kan det argumentet släppas.

Permalänk
Medlem
Skrivet av klk:

Men absolut, är fullt medveten om att det är få som pallar

Jag (och alla andra här, tror jag, även om man aldrig ska göra sig till talesman för andra) pallar.

Men du gör samma sak igen, du är så fantastisk och alla som kritiserar gör det enbart för att dom (enligt dig) inte når upp till din nivå.

Permalänk
Medlem
Skrivet av Xeonist:

Jag (och alla andra här, tror jag, även om man aldrig ska göra sig till talesman för andra) pallar.

Men du gör samma sak igen, du är så fantastisk och alla som kritiserar gör det enbart för att dom (enligt dig) inte når upp till din nivå.

När jag skriver "pallar" så handlar det om att vara saklig. Inte gå över till en känslomässig diskussion. Det är vad jag menar med att inte palla.
Självklart kan alla läsa text och svara men alla kan inte vara sakliga.

Dessutom är vi på internet och då blir det lätt missförstånd. De allra flesta ger sig aldrig in i diskussion om de har annorlunda kunskap

Permalänk
Medlem
Skrivet av martengooz:

Samtliga mina kollegor på 4 olika arbetsplatser använder debuggern när det behövs, och testerna vi skriver körs enbart i utvecklingsmiljön / pipelines och inkluderas inte produktionskoden och saktar därför inte ner något heller.
...
Så då kan det argumentet släppas.

Ok, så alla i react debuggar koden?
Du skriver att du debuggar koden när det "behövs", det kallar inte jag för debugga. Skrivs kod behöver man gå igenom efteråt och det görs med debuggern.

Skriver en utvecklare några hundra rader kod och provkör och det då råkar fungera samt checkar in. Det där är enligt mig slarvigt och den typen av utvecklare brukar ha återkommande problem med att saker inte fungerar.

Jag kanske är extrem med debuggern men kör jag så debuggar jag hela tiden. Debuggern går ständigt varm

Med det sagt så deklarativ kod (som react är) har inte alls samma behov eftersom den typen av kod använder annan kod där funktionalitet är och sådan kod är sällan lätt att läsa.
Också svårare att debugga händelsestyrd kod, tänker då på att gå igenom för att se hur det man skrivit fungerar

Permalänk
Datavetare

C har nu också fått ett förslag i samma anda som Safe-C++ förslaget, TrapC. Angreppssättet är ett annat och efter att läst både Safe-C++ och TrapC får helt klart TrapC min röst.

Register har en artikel om detta från november
https://www.theregister.com/2024/11/12/trapc_memory_safe_fork...
TrapC blev aktuellt igen då förslaget släpptes igår.

Safe-C++ sätter bakåtkompatibilitet som prio#1, vilket givet att just "legacy" är en allt större anledning för någon att använda språket initialt känns fullt rimligt. Problemet är att slutresultatet blir något som inte alls ser ut som C++, om detta accepteras in i ISO-C++ blir det ännu en förändring som rätt fundamentalt förändrar hur man bör skriva C++.

TrapC introducerar några enstaka "breaking changes", men det spännande är att genom att göra det får man ett resultat som helt fixar problem som "use-after-free" (en av de absolut vanligaste orsakerna till säkerhetbuggar i C och C++, något som C++ i teorin löst från C++11 om man släpper användning av "nakna" pekare) och buffer-overrun (en annan otroligt vanlig bug som C++11 inte fixar lika transparent som TrapC).

Detta är ett smakprov på TrapC som inte har minnesläcka, vilket "vanlig C" skulle ha

char* strcat(char* to,const char* from) { string s = to; s += from; // realloc with copy-append if needed, no segfault return s; // returning local ok in TrapC, no segfault, no leak }

free() är i praktiken en no-op i TrapC, minneshanteringen är rätt mycket tagen från Rust (bygger på RAII). Saker likt detta gör att majoriteten av all existerande C kod kompilerar direkt i TrapC!

int main() { int* p = malloc(sizeof(int)); free(p); // TrapC ignores free, p not freed yet *p = 10; // UB in C, no problem in TrapC return 0; // Leaving scope, TrapC now frees p automatically }

Vidare fixar man en annan väldigt vanlig C bug i stränghantering, '\0' stöds men strängar, likt alla pekar-typer, innehåller RTTI samt vet sin längd. Så i TrapC är T* i praktiken std::vector<T>, vilket är det nyktra sättet att hantera minnesareor när möjligt.

Och för att gå tillbaka till ursprungliga frågeställningen i tråden: läser man inledningen till både Safe-C++ och TrapC dokumenten verkar båda "lägren" inse att man måste göra något. För allt fler organisationer drar nu öron åt sig kring de säkerhetsproblem C och C++ plågas av, samtidigt som man nu också fått "bevis" på att det var ett problem som kunde lösas inom ramen av att behålla de kritiska delarna i C och C++, nämligen förutsägbar minneshantering, zero-cost-abstractions men ändå automatisk upptäckt av alla/nästan alla minnesproblem (i.e. det kompilerar inte alt. det upptäcks runtime så programmet kan avslutas).

Är det något C++ behöver är det något likt TrapC, i.e. något som ser ut som C++ och där nästan all existerande C++ bygger direkt (och resten kan fixas relativt enkelt), men som tillåts innehålla enstaka "breaking changes". En uppenbar "breaking change" som behövs är att dessa säkerhetsgarantier måste vara opt-out (likt Rust "unsafe"), vilket är fallet i TrapC. Inte opt-in, vilket är fallet i Safe-C++.

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 klk:

Ok, så alla i react debuggar koden?
Du skriver att du debuggar koden när det "behövs", det kallar inte jag för debugga. Skrivs kod behöver man gå igenom efteråt och det görs med debuggern.

Det här låter snarare som att du är väldigt novis utvecklare och antingen:
* inte är så säker på vad din kod du skriver faktiskt gör
* inte skriver tillräckligt många / bra tester
* skriver generellt oläslig kod
* har väldigt kort uppmärksamhetsspann

Skrivet av klk:

Skriver en utvecklare några hundra rader kod och provkör och det då råkar fungera samt checkar in. Det där är enligt mig slarvigt och den typen av utvecklare brukar ha återkommande problem med att saker inte fungerar.

Skriver en utvecklare några hundra rader regelbundet för en feature från första början så har de nog inte brutit ner problemet ordentligt och borde tänka om. Men oavsett så förespråkar vi alla att man ska skriva just tester för den kod man checkar in som kan bevisa korrektheten i koden. Hade en utvecklare skickat in 100+ rader kod och sagt ”trust me bro, jag har debuggat den”, men inte skrivit några tester, då hade jag nekat den koden oavsett hur korrekt den ser ut.

Att skriva tester som körs vid varje incheckning av kod är en förutsättning att koden fortsätter vara underhållsbar och korrekt även när koden ändras med tiden.

Skrivet av klk:

Med det sagt så deklarativ kod (som react är) har inte alls samma behov eftersom den typen av kod använder annan kod där funktionalitet är och sådan kod är sällan lätt att läsa.
Också svårare att debugga händelsestyrd kod, tänker då på att gå igenom för att se hur det man skrivit fungerar

Det här låter också som att du saknar förståelse för ramverken och hur den fungerar snarare än något generellt för deklarativ kod.

Permalänk
Medlem
Skrivet av martengooz:

Det här låter snarare som att du är väldigt novis utvecklare och antingen:
* inte är så säker på vad din kod du skriver faktiskt gör
* inte skriver tillräckligt många / bra tester
* skriver generellt oläslig kod
* har väldigt kort uppmärksamhetsspann

Hur kan man veta om man är novis eller inte, finns det något mått på det. Kanske antal buggar som återkommer i kod från olika utvecklare eller något annat?
Kan jag skriva bättre kod utan verktyg vore det super, ständigt på jakt efter sådant.

Skrivet av martengooz:

Hade en utvecklare skickat in 100+ rader kod och sagt ”trust me bro, jag har debuggat den”, men inte skrivit några tester, då hade jag nekat den koden oavsett hur korrekt den ser ut.

Hur tänker du kring återanvändbar kod, kod som körs på många ställen.
Ett exempel för att beskriva vad jag menar och eftersom vi pratar C/C++
stl i C++ har std::string. std::string är vanligt att använda sig av. Eftersom std::string används överallt, är det lika viktigt att skriva tester för den och hur mycket tester bör man isåfall skriva?

Tänker då på annan utvecklare som skriver sådan här återanvändbar kod

Permalänk
Medlem
Skrivet av Yoshman:

C har nu också fått ett förslag i samma anda som Safe-C++ förslaget

C och C++ har två principer och dessa har jag tolkat som att det inte går att rubba, knappt någon van C eller C++ programmerare hade accepterat det
- Språket får inte ljuga vilket innebär att en kompilator inte får lov att lägga in "extra" maskinkodsinstruktioner. Kod skriven i C eller C++ måste alltid generera optimal maskinkod, får inte innehålla extra saker.
- C och C++ kan inte lämna öppningar för andra språk som potentiellt kan generera snabbare kod

De flesta nya förslag för säker C eller säker C++ fungerar därför inte. Vad jag vet så innehåller det mesta där någon form av extra saker som kompileras in i koden.

Skulle de få för sig att rubba dessa två ovanstående princip kommer det bli flykt från C och C++.
C och C++ väljs inte för att de är enkla utan för att de är "verktyg" för att åstadkomma något där man behöver maximal frihet

Permalänk
Datavetare
Skrivet av klk:

C och C++ har två principer och dessa har jag tolkat som att det inte går att rubba, knappt någon van C eller C++ programmerare hade accepterat det
- Språket får inte ljuga vilket innebär att en kompilator inte får lov att lägga in "extra" maskinkodsinstruktioner. Kod skriven i C eller C++ måste alltid generera optimal maskinkod, får inte innehålla extra saker.
- C och C++ kan inte lämna öppningar för andra språk som potentiellt kan generera snabbare kod

De flesta nya förslag för säker C eller säker C++ fungerar därför inte. Vad jag vet så innehåller det mesta där någon form av extra saker som kompileras in i koden.

Skulle de få för sig att rubba dessa två ovanstående princip kommer det bli flykt från C och C++.
C och C++ väljs inte för att de är enkla utan för att de är "verktyg" för att åstadkomma något där man behöver maximal frihet

?????

Foo a = Foo{1} << "2" << (Foo)3;

detta går att kompilera med pre-C++11. Hur många anrop görs på denna rad, explicit och implicita?

C++ är ett train-wreck om man "vill", inget i Safe-C++ ändrar det mer än att om man följer Safe-C++ så vet man i alla fall att om något händer som man inte tänkte på så orsakar det i alla fall inte säkerhetshål.

Begriper inte riktigt din filosofi. Å ena sidan pushar du för intellisense och andra "magiska" verktyg. Å andra sidan är du helt emot i stort sätt allt som lagts till C++ sedan C++11, du promotar den stil som Herb/Bjarne kallar "your fathers C++"

Efter C++11 är det rätt mycket konsensus att "nakna pekare" är dålig kod, man ska inte längre skriva så för det extremt error prone.

Du vill ha bloat/overhead av hungarian-notation, något som kan vara vettigt om man jobbar med ett dynamiskt typat språk och i viss mån kan vara vettigt i C när det används som väldigt svagt statiskt typat språk (en breaking change mellan C++ och C är att allt implicit kan cast:as till/från void* i C, men inte i C++).

För statiskt starkt typade språk, likt C++, Rust, Go, m.fl. håller jag med kritikerna av hungarian-notation. Kanske inte riktigt på nivån hos Linus Torvalds dock...

"Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged—the compiler knows the types anyway and can check those, and it only confuses the programmer."

Om hastighet var enda orsaken folk använde C eller C++ så hade båda "förlorat" redan.

Fortran används än idag i vissa HPC-applikation då dess design medför att dess kompilator kan göra en del optimeringar som inte är möjliga för C och C++.

Likaså finns fall där Rust kompilatorn kan göra optimeringar som inte C och C++ kan. Inte alls osannolikt att det är en del i förklaringen till det @Ingetledigtnamn postade ovan om zlib omskrivet i Rust är snabbare än C versionen
#20783960

En kritisk sak i C och C++ (som även Rust har) är att allt som händer är deterministiskt. DET är en killer-feature, en killer-feature som varje sig Safe-C++ eller TrapC ändrar på.

Vad båda dessa förslag däremot "fixar" är att justera språket så en väldigt vanlig klass av problem, som är rätt unikt för just dessa två språk, kan automatiskt (vilket är långt bättre än att hoppas att programmerarna aldrig gör buggar) upptäckas endera vid kompilering (att föredra, ingen når dock nivån Rust har som i detta steg även upptäcker data-race) eller vid runtime.

Visa signatur

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