Vinnaren i pepparkakshustävlingen!
  • 3
  • 4
2016-08-14, 19:57
  #37
Medlem
Diamondgrits avatar
Citat:
Ursprungligen postat av WbZV
Viss färdig objektkod behövs för att implementera C++-standarden. Jag menar inte att den bokstavligen behöver ligga i filen libc.so, men någonstans brukar man behöva tillföra global objektkod.

Antingen väljer du bort inbyggda delar av C++ som exceptions, new och delete, eller så länkar din kompilator med färdig objektkod när du länkar fristående program. I det senare fallet så tillhandahåller kompilatorn bibliotekskoden istället för systemet. Men principen är samma.

I ett C-program kan du i princip använda alla inbyggda konstruktioner utan att vara beroende av extern kod. Anrop till malloc och free är explicita biblioteksanrop, som inte behöver vara implementerade.
Om du menar att du kan skriva en egen malloc så är det naturligtvis så. Kan du skriva en egen exit()? Nä, och motsvarande kod (för att rensa upp och sätta returvärde till systemet) måste köras när main är klar ändå.

Kompilatorn tillhandahåller alltid en viss del systemkod. Det är märkligt att räkna med viss kod och inte annan.
Citera
2016-08-14, 22:05
  #38
Medlem
Citat:
Ursprungligen postat av Diamondgrit
Om du menar att du kan skriva en egen malloc så är det naturligtvis så. Kan du skriva en egen exit()? Nä, och motsvarande kod (för att rensa upp och sätta returvärde till systemet) måste köras när main är klar ändå.

Kompilatorn tillhandahåller alltid en viss del systemkod. Det är märkligt att räkna med viss kod och inte annan.
Jag förstår hur du menar. Och för ett helt fristående program som äger hårdvaran, så måste man förstås länka med en kodsnutt där första instruktionen anropar main i programmet. Och då kan man naturligtvis också länka med rutiner för minneshantering som definierar malloc och free.

Men antag att du skall skriva en drivrutin som laddas av kärnan. Då är den inte mer fristående än att den måste kunna samexistera med andra drivrutiner. Den använder inte main som entry-point utan något annat som kärnan specificerar. Den kan heller inte länka med egen minneshantering eftersom minnet är en global resurs. För att dela minne måste man således använda systemet kmalloc ohc kfree, eller vad de nu kan heta i det aktuella systemet. Och har de inte samma semantik som vanliga malloc och free, så går det inte heller att wrappa new och delete runt dessa.

Jag skall inte påstå att det inte går att skriva utökningar av kärnan i C++. Anstränger man sig tillräckligt och nöjer sig med en delmängd av språket så kan man säkert få till det. Men eftersom de flesta som kan programmera C++ också kan programmera C, så föredrar nog många att ändå använda C som kan användas rakt av utan några konstigheter.
Citera
2016-08-15, 10:08
  #39
Medlem
Citat:
Ursprungligen postat av FaderBerg
Det har han inte. Subsurfaces maintainer, Dirk Hohndel, har dock gjort det.

Om man tittar på Dirks anförande Gtk to Qt - a strange journey [linux.conf.au 2014] så förefaller det som Linus och Dirk både föredrog Qt framför GTK.

Har du några andra uppgifter, försöker Dirk vilseleda oss?
Har Linus skapat några nya projekt efter Subsurface där han använder GTK?
Citera
2016-08-15, 12:07
  #40
Medlem
Diamondgrits avatar
Citat:
Ursprungligen postat av WbZV
Jag förstår hur du menar. Och för ett helt fristående program som äger hårdvaran, så måste man förstås länka med en kodsnutt där första instruktionen anropar main i programmet. Och då kan man naturligtvis också länka med rutiner för minneshantering som definierar malloc och free.

Men antag att du skall skriva en drivrutin som laddas av kärnan. Då är den inte mer fristående än att den måste kunna samexistera med andra drivrutiner. Den använder inte main som entry-point utan något annat som kärnan specificerar. Den kan heller inte länka med egen minneshantering eftersom minnet är en global resurs. För att dela minne måste man således använda systemet kmalloc ohc kfree, eller vad de nu kan heta i det aktuella systemet. Och har de inte samma semantik som vanliga malloc och free, så går det inte heller att wrappa new och delete runt dessa.

Jag skall inte påstå att det inte går att skriva utökningar av kärnan i C++. Anstränger man sig tillräckligt och nöjer sig med en delmängd av språket så kan man säkert få till det. Men eftersom de flesta som kan programmera C++ också kan programmera C, så föredrar nog många att ändå använda C som kan användas rakt av utan några konstigheter.
Jag håller helt med. Förutom på en punkt: om du kan göra en malloc som använder systemanropen kan du göra en new som också gör det. Eller så kan du, naturligtvis, använda malloc (eller systemanropet) från C++. Som sagt resten håller jag med om.
Citera
2016-08-15, 13:23
  #41
Medlem
Citat:
Ursprungligen postat av Taiyou
Om man tittar på Dirks anförande Gtk to Qt - a strange journey [linux.conf.au 2014] så förefaller det som Linus och Dirk både föredrog Qt framför GTK.

Har du några andra uppgifter, försöker Dirk vilseleda oss?
Nej. Texten i länken till ditt första inlägg angående så uppfattar jag det som om maintainern Dirk (förmodligen i viss samråd med övriga deltagare i projektet, naturligtvis) valde Qt. Videon orkar jag inte se. Men säger han ordagrant att Linus var med i beslutet, så får jag väl backa. Jag är dock ganska säker på att Torvalds skiter i vilket utav dem som används, faktiskt.
Du får det ju att låta som om det är Torvalds allena som gjort migreringen efter resignation till C++:s överlägsenhet. Det kan inte bli mer fel än så. Han är bara med i ett projekt som använder Qt.
Han kan dessutom för alldel tycka att Qt är ett bättre och smidigare också. Det är inget fel i det. Linus Torvalds föredrar dock inte C++ bara för att Qt är enklare att jobba med.

Citat:
Har Linus skapat några nya projekt efter Subsurface där han använder GTK?
Vet inte. Är det relevant? Han skulle nog föredra curses egentligen.
Citera
  • 3
  • 4

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback