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

Permalänk
Medlem
Skrivet av serafim:

Sökbar? Det är naturligtvis inte lätt för en enda person att utan hjälpmedel hålla reda på programkod oavsett storlek men med bra hjälpmedel, vettigt kommenterad kod, bra tester osv är det inga problem med en stor kodbas.

Läs det du skrev där igen och fundera på hur väl det stämmer. Är det inga problem med stor kodbas? Spelar mängden inte någon roll så länge den är väldokumenterad.
Hur hittar du i +1000 filer, är det inte svårare än om det är 10

Enligt mig går det inte att ta någon på allvar om den hystar ur sig sådant

Tvärtom så om man inte tänkt till ordentligt ökar problemen logaritimiskt, att dubbla mängden kan innbära bra mycket mer än dubbelt

Permalänk
Medlem
Skrivet av Yoshman:

Nu är Windows closed source, men de uppskattningar som finns på antal rader kernel-kod är långt mindre än dagens Linux-kärna.

Pratar du kärnan är den inte mindre eller så har linux rätt kass kod för att då har de producerat mycket kod för mindre funktionalitet.
Som vi konstaterat har Windows en hel del extra och släpa på, vissa saker är mycket bra men de har också annat som de nog ångrar

Permalänk
Medlem
Skrivet av klk:

Läs det du skrev där igen och fundera på hur väl det stämmer. Är det inga problem med stor kodbas? Spelar mängden inte någon roll så länge den är väldokumenterad.
Hur hittar du i +1000 filer, är det inte svårare än om det är 10

Enligt mig går det inte att ta någon på allvar om den hystar ur sig sådant

Tvärtom så om man inte tänkt till ordentligt ökar problemen logaritimiskt, att dubbla mängden kan innbära bra mycket mer än dubbelt

Återigen visar du att du svänger dig med uttryck som du inte begriper. Om något är logaritmiskt så betyder det att problemen minskar ju större koden blir. Det du antagligen är ute efter är exponentiell ökning (inversen av logaritmisk) men även där beror ökningshastigheten på basen, Är exponenten 2 kommer en ökning av kodbasen med 2 innebära att problemen (om vi utgår från att de finns) potentiellt ökar till 4 gånger flera.
Men det är ett underligt mått i samband med programkod, det används mest när man talar om komplexitet, framför allt när det gäller minneskomplexitet eller programkörtid, oftast i jämförelser mellan olika implementationer.

Det här börjar bli löjligt. För varje gång det visar sig att du har fel eller inte lyckas visa vad du menar så hittar du en annan vinkling för att fortsätta pladdret.

Korrigerade och rättade stavfel
Permalänk
Medlem
Skrivet av serafim:

Återigen visar du att du svänger dig med uttryck som du inte begriper. Om något är logaritmiskt så betyder det att problemen minskar ju större koden blir. Det du antagligen är ute efter är exponentiell ökning (inversen av logaritmisk) men även där beror ökningshastigheten på basen, Är exponenten 2 kommer en ökning av kodbasen med 2 innebära att problemen (om vi utgår från att de finns) potentiellt ökar till 4 gånger flera.

Sorry, jag skrev fel i hastigheten men jag tror du förstod vad jag menade

Skrivet av serafim:

Men det är ett underligt mått i samband med programkod, det används mest när man talar om komplexitet, framför allt när det gäller minneskomplexitet eller programkörtid, oftast i jämförelser mellan olika implementationer.

Det här börjar bli löjligt. För varje gång det visar sig att du har fel eller inte lyckas visa vad du menar så hittar du en annan vinkling för att fortsätta pladdret.

Gjorde en snabb beräknign på det ni arbtade och ni ligger på 1 person på drygt 6000 rader produktions kod. Du nämnde att ni var 25 i teamet, 360 000 rader kod varav 60% var testkod. Det är inte effektivt eller så har ni mycket svår domän.

10 000 rader produktionskod per år kan vilken programmerare som helst nå med bra teknik och det är en bra miljö och jobba i

Att det är "löjligt" eller någon anser att det är felaktig i ett område där det knappt existerar något rätt eller fel, vi jobbar med subjektivt område. Massor av projekt kraschar.

Det är vanligt att programmerare slår varandra i huvudet

Jag pratar om en teknik, den fungerar för en hel del. Vill man inte så skippa, personligen tycker jag alltid det är intressant om någon presenterar lösningar som kan göra något bättre.

Permalänk
Medlem
Skrivet av klk:

Pratar du kärnan är den inte mindre eller så har linux rätt kass kod för att då har de producerat mycket kod för mindre funktionalitet.
Som vi konstaterat har Windows en hel del extra och släpa på, vissa saker är mycket bra men de har också annat som de nog ångrar

Nej, Windowskärnan är programmerat i (en förenklad version) av C++ mens Linuxkärnan är programmerad i C med stort fokus på hastighet, vilket brukar betyda större kodbas. Men jag tror att @Yoshman har fel. Man tror att windows-11-kärnan är ungefär 50 000 000 rader kod mens Linux-kärnan (version 6.14) är drygt 40 000 000 rader kod. Sen kan jag ha fel eftersom senaste Linux-kärnan är 6.16.3 och storleken i rader kod för windows-11-kärnan är en gissning om än en hygglig sådan.

Permalänk
Medlem
Skrivet av serafim:

Nej, Windowskärnan är programmerat i (en förenklad version) av C++ mens Linuxkärnan är programmerad i C med stort fokus på hastighet, vilket brukar betyda större kodbas.

Det var mer än jag kände till, vet du när de bytte för den var från början kodad i C (windows alltså)

Permalänk
Medlem

@serafim @klk Flera referenser jag har hittat nämner uteslutande C och ASM för själva kärnan. Denna video av Raymond Chen förklarar det bäst.
https://learn.microsoft.com/en-us/shows/one-dev-minute/one-de...

Även David Delaune lutar åt det hållet även om han inte explicit nämner kärnan i sig. (Vilket för Windows del kan vara svår att avgränsa då det är så pass integrerat med UI.) Skrivet 2023.

Citat:

I worked on Windows 10, the majority of the operating system is written in C99. With a small amount written in C++. I don't think any part of the actual OS is using C#, maybe a few userland tools.

I do think there will be more Rust code added in Windows 11, it's all about that memory safety.

Sen angående sökning i stora kodbaser så bör väl koden struktureras upp och placeras i separata kataloger så att man redan från början har ett hum om var man skall börja leta. När jag dyker i linux-kärnan eller som just nu Firefox (ca 10 M rader kod, inkl kommentarer, exklusive include-filer, grovt räknat!) så finns det jag letar efter väl samlat i ett par delkataloger. Letar jag vidare efter procedurer eller variabler så stannar ju sökningarna inom dessa kataloger med hjälp av "grep | less".

Det som brukar hjälpa mig är att skapa en call-graph över applikationen, då får man en översikt över hur det hela hänger ihop.

klk: När du jobbar med HN är inte ägarskapet (ursprung) viktigare än typen? Jag skulle kunna tänka mig att om man har flera externa variabler (globaler) så kan man t.ex. namnge dem som eCustomer eller gCustomer. I mina småhack så namnger jag lokala procedurer som app_* och om de kommer från något externt bibliotek (bench.a) som bnc_* exempelvis. Aldrig någon tvekan om var jag hittar källkoden då.

Permalänk
Medlem
Skrivet av mc68000:

klk: När du jobbar med HN är inte ägarskapet (ursprung) viktigare än typen? Jag skulle kunna tänka mig att om man har flera externa variabler (globaler) så kan man t.ex. namnge dem som eCustomer eller gCustomer. I mina småhack så namnger jag lokala procedurer som app_* och om de kommer från något externt bibliotek (bench.a) som bnc_* exempelvis. Aldrig någon tvekan om var jag hittar källkoden då.

Ägarskapet är också viktigt men "min" lösning där är att skriva det efter variabeln. Ägarskapet är inte så viktigt för läshastighet (skanna kod) men däremot mycket viktigt för att förstå koden.

Tar jag ditt exempel så hade jag skrivit så här: customer_e eller customer_g om det är ett objekt som heter Customer.
Hade det varit static members i en klass, kanske static lokal variabel så kommer variabeln eller metoden avslutas med *_s. Det viktiga är inte att det just är ett s eller vad man nu väljer men att jag lätt kan se om det är en medlemsmetod eller en free function. Är det en free function vet jag att den inte påverkar något internt i objektet.

Ifall en variabel eller annat avslutas med _ använder jag det som att det kan vara precis vad som helst, att man måste granska koden. Smidigt när man gör små metoder där det bara är onödigt att kladda ner koden. Kanske överlagrade enrads-metoder mm

Min lilla styleguide (om jag får välja)

Dold text
Permalänk
Medlem
Skrivet av mc68000:

Sen angående sökning i stora kodbaser så bör väl koden struktureras upp och placeras i separata kataloger så att man redan från början har ett hum om var man skall börja leta. När jag dyker i linux-kärnan eller som just nu Firefox (ca 10 M rader kod, inkl kommentarer, exklusive include-filer, grovt räknat!) så finns det jag letar efter väl samlat i ett par delkataloger. Letar jag vidare efter procedurer eller variabler så stannar ju sökningarna inom dessa kataloger med hjälp av "grep | less".

Det är _också_ mycket viktigt. En sak där när jag pratat om repon och visat är det vanligt att inte alla har förståelse för att om man har som mål att koden skall kunna växa också behöver tänka på filstrukturen från början. Då kan man lätt åka på kritik för att det är onödigt komplicerat.

De som en gång tvingats jobba om filerna för att de placerats fel förstår däremot.
Har tvingats storstäda en gång, det tog tid