Är det värt att använda C++ idag om man jämför med C# och Java?

Permalänk

Är det värt att använda C++ idag om man jämför med C# och Java?

Hej!

När jag växte upp så gjorde man spel i C och när spelen började bli mer och mer avancerade typ allt efter Quake III skrevs i C++ av den anledningen att det gick mycket snabbare att utveckla spel om verktyget till objektorienteringen var redan färdig.

Idag så har jag hört att C# och Java börjar allt mer ta över spelutvecklingen och applikationsutvecklingen. Bland annat så är MATLAB, Minecraft, Eclipse med flera skrivet i Java och många Windows applikationer är skrivet i C#.

Jag har förståelse varför många väljer C++ och det har med prestanda att göra. Förr i tiden var det mycket viktigt att använda snåla program, men idag så spelar det ingen roll om ett spel är 40 Gb eller 1 mb. Så länge spelet finns där så duger det.

Då ställer jag min fråga till er:

Kommer Java och C#, som är väldigt lika språk, att ta över det C++ håller på med nu, dvs applikationsutveckling och spelutveckling?
För mig känns det som ett "OK" att det kommer ta över, med tanke på att utvecklingskostnaden är lägre med Java/C# jämfört med C++ och datorerna blir allt mer snabbare och snabbare.

Permalänk
Medlem

C# och Java kommer aldrig ta över helt. Det kommer alltid finnas anledningar (objektiva eller subjektiva) för utvecklare att använda nåt annat språk än just dessa två. Om vi dock kollar mer allmänt på snittbruk så är ju faktum att C# redan tagit över en ganska saftig del av spelutvecklingsmarknaden. C# stöds bl.a. av Unity som är en väldigt populär spelmotor, och också nykomlingen Godot.

Majoriteten av spel lär dock fortsätta använda C++ för de mer prestandakritiska delarna, till exempel fysikmotorn. I Unity till exempel så är ju själva motorn skriven i C++, medan C# bara ligger som ett scripting-lager ovanpå för den mer lättviktiga spellogiken. Problemet med C# och Java är ju att de är Garbage Collected, vilket innebär eventuellt millisekunders långa pauser när minnet hanteras. Detta är inte acceptabelt för bl.a fysikmotorn, så C++ kommer nog inte försvinna i första taget. Om det är något språk som kan ta över här så är det väl Rust eller Jai.

För att mer direkt svara på din fråga: C++ är värt att använda om du föredrar det framför C#/Java eller om du skriver din egen motor. Vad andra använder för språk borde inte spela så stor roll för dig när det kommer till spelutveckling.

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Medlem

I min mening så är det:

  • Din situation

  • Dina personliga preferenser

  • Systemet det ska köra på

som avgör mer. Som @Bryal redan är inne på så är det sant. C# och Java är definitivt bra alternativ (särskilt med tanke på att kan du en kan du lätt lära dig den andra (syntaxer är väldigt lika)) eftersom det i sig är mycket enklare att lära sig än C++ och C.

Det är däremot värt att nämna att C++ erbjuder mer frihet och bättre prestanda, men i utbyte är det svårare att lära sig.
Om du planerat att lära dig ett av dessa språk skulle jag säga att det är mer värt att satsa all energi på C++.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40

Permalänk
Skrivet av Bryal:

C# och Java kommer aldrig ta över helt. Det kommer alltid finnas anledningar (objektiva eller subjektiva) för utvecklare att använda nåt annat språk än just dessa två. Om vi dock kollar mer allmänt på snittbruk så är ju faktum att C# redan tagit över en ganska saftig del av spelutvecklingsmarknaden. C# stöds bl.a. av Unity som är en väldigt populär spelmotor, och också nykomlingen Godot.

Majoriteten av spel lär dock fortsätta använda C++ för de mer prestandakritiska delarna, till exempel fysikmotorn. I Unity till exempel så är ju själva motorn skriven i C++, medan C# bara ligger som ett scripting-lager ovanpå för den mer lättviktiga spellogiken. Problemet med C# och Java är ju att de är Garbage Collected, vilket innebär eventuellt millisekunders långa pauser när minnet hanteras. Detta är inte acceptabelt för bl.a fysikmotorn, så C++ kommer nog inte försvinna i första taget. Om det är något språk som kan ta över här så är det väl Rust eller Jai.

För att mer direkt svara på din fråga: C++ är värt att använda om du föredrar det framför C#/Java eller om du skriver din egen motor. Vad andra använder för språk borde inte spela så stor roll för dig när det kommer till spelutveckling.

Skrivet av freddyfresh:

I min mening så är det:

  • Din situation

  • Dina personliga preferenser

  • Systemet det ska köra på

som avgör mer. Som @Bryal redan är inne på så är det sant. C# och Java är definitivt bra alternativ (särskilt med tanke på att kan du en kan du lätt lära dig den andra (syntaxer är väldigt lika)) eftersom det i sig är mycket enklare att lära sig än C++ och C.

Det är däremot värt att nämna att C++ erbjuder mer frihet och bättre prestanda, men i utbyte är det svårare att lära sig.
Om du planerat att lära dig ett av dessa språk skulle jag säga att det är mer värt att satsa all energi på C++.

Om vi bortser från spel då och endast fokuserar på applikationsutveckling så som MS Word, LibreOffice, MATLAB, Webläsare osv?

Permalänk
Medlem

Börja lär dig C/C++ då det är mer maskinnära och mer likt hur processorn jobbar än C# och Java. Kan du C/C++ någorlunda så är det inte svårt att lära sig C# och Java. Min erfarenhet är att personer som börjat med C/C++ generellt skriver bättre kod (färre minnesläckor, bättre kodstandard) än de som börjat med C# och Java.

Visa signatur

Citera för svar

MSI Z490 MAG TOMAHAWK | Intel Core i7 10700K | Corsair 64GB DDR4 3200MHz | Asus GeForce RTX 3060 Ti TUF Gaming OC | Samsung 970 EVO Plus 1TB | WD Black 6TB Desktop Drive | Corsair RM750X 750W | Fractal Design Define R6

Permalänk
Medlem
Skrivet av heretic16:

Om vi bortser från spel då och endast fokuserar på applikationsutveckling så som MS Word, LibreOffice, MATLAB, Webläsare osv?

Ja, inom denna domän är ju C# och Java helt lämpliga att använda. Väldigt många applikationer idag använder dessa språk. Dock är de långtifrån ensamma, och C++ var inte ensamnt innan heller. Alla möjliga språk används för applikationsutveckling, och landskapet ändras konstant. Microsoft har till exempel börjat använda JavaScript för de mindre prestandakritiska delarna av vissa av sina applikationer.

Du kommer varken få problem om du använder C# eller C++ för att utveckla applikationer, båda har gott om bibliotek och bra nog prestanda för att göra praktiskt sett allt du kan behöva. Språken är också tämligen lika, så om du lär dig det ena bör det inte ta många veckor för dig att lära det andra, om du ändrar dig.

Personligen sitter jag nästan exklusivt i Rust och Haskell. Fungerar utmärkt för mig, och att de inte ( ännu? ) är industristandard spelar knappt någon roll. Det viktiga är att jag har kul när jag programmerar, att programmen fungerar, och att koden blir fin. Språket i sig spelar ganska liten roll, så länge biblioteken du behöver finns.

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Skrivet av Dew87:

Börja lär dig C/C++ då det är mer maskinnära och mer likt hur processorn jobbar än C# och Java. Kan du C/C++ någorlunda så är det inte svårt att lära sig C# och Java. Min erfarenhet är att personer som börjat med C/C++ generellt skriver bättre kod (färre minnesläckor, bättre kodstandard) än de som börjat med C# och Java.

Jag förstår vad du menar. Jag gick en kurs i C++ och en kurs i Java och jag måste säga att Java var betydligt mycket enklare än C++. Med Java så var allt redan färdigt och man behövde inte koda så mycket för att få jobbet gjort. Men med C++ så fick jag sitta dagar och nätter för att få jobbet gjort.

Så jag har dålig erfarenhet och smak angående C++ så jag tror jag håller mig till Java då jag inte ska bygga grafikmotorer, mest använda befintliga bibliotek.

Något jag är riktigt sugen på göra är att simulera enkel 3D grafik t.ex. klossar, fjädrar, runda bollar som stutsar osv.

Permalänk
Medlem
Skrivet av heretic16:

Jag förstår vad du menar. Jag gick en kurs i C++ och en kurs i Java och jag måste säga att Java var betydligt mycket enklare än C++. Med Java så var allt redan färdigt och man behövde inte koda så mycket för att få jobbet gjort. Men med C++ så fick jag sitta dagar och nätter för att få jobbet gjort.

Så jag har dålig erfarenhet och smak angående C++ så jag tror jag håller mig till Java då jag inte ska bygga grafikmotorer, mest använda befintliga bibliotek.

Något jag är riktigt sugen på göra är att simulera enkel 3D grafik t.ex. klossar, fjädrar, runda bollar som stutsar osv.

Om du vill simulera 3D grafik låter det snarare som du vill pilla med andra verktyg. Blender, Cinma4D, 3DS max osv. Annars är nog openGL något du vill kolla på om du vill leka med grafik av olika typer. Men det kräver nästan grundkunskap om programmering överlag. Inte det lättaste att bara hoppa in i utan kunskap om hur saker och ting fungerar.

Visa signatur

Maximus X Hero - 8700k @5.1GHz - H115i - 32GB LPX@3466MHz - MSI 980Ti Gaming - EVGA SuperNova 750 G2 - Asus vg248qe - FD R5

Permalänk
Medlem

@heretic16:

Med risk att alla som vet mer än mig kommer att såga mig längst fotknölarna som vanligt kan jag säga att det är bra att veta hur datorer fungerar men inte nödvändigt, fram tills ditt program inte funkar.

C++

definiera bondgård skapa array av kor allokera utrymme för gräs för varje ko, ge gräs skapa mjölkbil för varje ko, fyll mjölkbil skicka mjölkbil till modul mejeri ....... ......

Java, C#

ICA.KöpMjölk(4);

I första fallet kan du hitta varför det inte funkar, i andra fallet har du ingen aning om varför ICA returnerar NULL.
Högnivåspråken är tidseffektiva och någon annan har redan löst de flesta problemen och det funkar på många plattformar.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Datavetare

Givet utvecklingen i C++ de senaste åren måste man absolut särskilja på "klassisk C++" samt C++11 och senare.

C++11 fick så mycket nyheter att sättet man skriver "bra C++11" kod skiljer sig signifikant från tidigare versioner. Ett sätt att se det är att C++11 är ett nytt språk med 100 % kompatibilitet med klassisk C++.

Det skrivet, skulle hävda att de tre mest fundamentala programspråken som existerar just nu är

  • C - alla operativsystem är skrivna i detta (även om MacOS och Windows numera tillåter en delmängd av C++ i vissa lägen, vissa RTOS tillåter C++ i kärnan), C är också det som i praktiken används i alla andra miljöer för att kommunicera mellan olika programmeringsspråk

  • C++ - nästan alla applikation vi använder på våra datorer är i grunden C++ applikation, finns bara några få undantag som t.ex. Eclipse (skrivet i Java, fast JVM:en är skriven i C++...), Visual Studio Code (skrivet i JavaScript, som bygger på Electron som bygger på NodeJS och Chromium som båda är skrivna i C++). Många applikationer har delar skrivna i andra språk, Matlab nämndes t.ex. och där är IDE:n numera i Java men majoriteten är skrivet i C och C++, MS Office är i princip bara C++, alla webbläsare är C++, spel med några enstaka undantag skrivna i C++ (och spel börjar nu allt mer vara skrivna i C++11 och senare)

  • JavaScript - detta är för webben vad C är för operativsystem!

Detta betyder inte att andra språk inte är viktiga. Tvärtom är Java det språk som är överlägset vanligast för enterprise, C# är inte fullt lika stort sett över hela världen men det är ändå riktigt stort och just i Sverige är det väldigt populärt (nog minst lika lätt att hitta C# jobb som Java jobb i alla fall i Sthlm).

Python är numera det mest "populära" programmeringsspråket i bemärkelsen vad som används för att lära ut programmering. Språket är även väldigt populärt inom numeriska metoden (NumPy, som i praktiken är en wrapper kring bibliotek skrivna i C/C++) och maskininlärning (TensorFlow, som åter igen är en wrapper kring bibliotek skrivna i C/C++).

Varför bygger världen på C och C++? Därför att i slutändan spelar effektivitet alltid roll! Man kan absolut göra många saker direkt i Java/C# och liknande, men finns en rad saker som faktiskt inte kan utföras med mindre än att man går ned till C++ (eller C/assembler som knappast är enklare).

Ta <atomic> i C++11. Visst kan på en hög logisk nivå göra samma sak i Java/C#, men vill man t.ex. maximera skalning över CPU-kärnor måste man kunna styra på rätt håriga detaljer (som gissningsvis färre än 10 % av alla programmerare känner till). Endera gör man det i assembler och tvingas hantera detaljer i varje CPU-arkitektur separat, eller så skriver man det i C++11 <atomic> och för exakt samma prestanda fast nu har man något som fungerar på alla CPU-arkitekturer där det finns en modern C++ kompilatorn.

Ta <random>. Visst kan man skapa "slumpmässiga tal" i andra språk, men i C++11 har man skapat något som i praktiken designats av matematiker och statistiker, inte programmerare som saknar erforderligt domänkunskap (slumptal är faktiskt ett extremt svårt fält på en dator, datorer gör inte slumpmässiga saker om de inte är trasiga...).

Så är det värt att lära sig C++? Om målet är att jobba med programmering i Sverige: inte helt självklart faktiskt. De områden där C++ används är relativt små här. Vet av egen och andras förstahandsinformation att det är extremt svårt att få tag i folk med systemkunskaper på HW-nivå och med riktigt djup kunskap i C/C++. Gissningsvis en direkt följd av att sådana jobb är relativt ovanliga i detta land (jämfört med antalet jobb som kräver kunskap i webbutveckling, i back-end utveckling och liknande).

Är målet att bättre förstå modern HW: finns inget bättre än att lära sig C och C++ (och dess GPGPU derivat CUDA och OpenCL).

Edit: Angående atomära operationer. Här har det faktiskt gått så långt att 64-bitars ARM (Aarch64, som är helt separat från 32-bitars ARM!) samt en CPU-arkitektur som heter RISC-V (båda dessa är väldigt nya!) är specifikt designade för att perfekt matcha det C++11 erbjuder i form av atomära funktioner! <atomic> är designat på det, enligt nu gällande spetsforskning, mest optimala sätt som finns i denna domän.

Visa signatur

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

Permalänk
Skrivet av Elghinnarisa:

Om du vill simulera 3D grafik låter det snarare som du vill pilla med andra verktyg. Blender, Cinma4D, 3DS max osv. Annars är nog openGL något du vill kolla på om du vill leka med grafik av olika typer. Men det kräver nästan grundkunskap om programmering överlag. Inte det lättaste att bara hoppa in i utan kunskap om hur saker och ting fungerar.

Jag brukar använda JavaFX med Gluon Scene Builder när jag gör mina applikationer. Riktigt smidigt och enkelt. Jag såg även nyss att JavaFX stödjer enkel 3D grafik.

Permalänk
Skrivet av Yoshman:

Givet utvecklingen i C++ de senaste åren måste man absolut särskilja på "klassisk C++" samt C++11 och senare.

C++11 fick så mycket nyheter att sättet man skriver "bra C++11" kod skiljer sig signifikant från tidigare versioner. Ett sätt att se det är att C++11 är ett nytt språk med 100 % kompatibilitet med klassisk C++.

Det skrivet, skulle hävda att de tre mest fundamentala programspråken som existerar just nu är

  • C - alla operativsystem är skrivna i detta (även om MacOS och Windows numera tillåter en delmängd av C++ i vissa lägen, vissa RTOS tillåter C++ i kärnan), C är också det som i praktiken används i alla andra miljöer för att kommunicera mellan olika programmeringsspråk

  • C++ - nästan alla applikation vi använder på våra datorer är i grunden C++ applikation, finns bara några få undantag som t.ex. Eclipse (skrivet i Java, fast JVM:en är skriven i C++...), Visual Studio Code (skrivet i JavaScript, som bygger på Electron som bygger på NodeJS och Chromium som båda är skrivna i C++). Många applikationer har delar skrivna i andra språk, Matlab nämndes t.ex. och där är IDE:n numera i Java men majoriteten är skrivet i C och C++, MS Office är i princip bara C++, alla webbläsare är C++, spel med några enstaka undantag skrivna i C++ (och spel börjar nu allt mer vara skrivna i C++11 och senare)

  • JavaScript - detta är för webben vad C är för operativsystem!

Detta betyder inte att andra språk inte är viktiga. Tvärtom är Java det språk som är överlägset vanligast för enterprise, C# är inte fullt lika stort sett över hela världen men det är ändå riktigt stort och just i Sverige är det väldigt populärt (nog minst lika lätt att hitta C# jobb som Java jobb i alla fall i Sthlm).

Python är numera det mest "populära" programmeringsspråket i bemärkelsen vad som används för att lära ut programmering. Språket är även väldigt populärt inom numeriska metoden (NumPy, som i praktiken är en wrapper kring bibliotek skrivna i C/C++) och maskininlärning (TensorFlow, som åter igen är en wrapper kring bibliotek skrivna i C/C++).

Varför bygger världen på C och C++? Därför att i slutändan spelar effektivitet alltid roll! Man kan absolut göra många saker direkt i Java/C# och liknande, men finns en rad saker som faktiskt inte kan utföras med mindre än att man går ned till C++ (eller C/assembler som knappast är enklare).

Ta <atomic> i C++11. Visst kan på en hög logisk nivå göra samma sak i Java/C#, men vill man t.ex. maximera skalning över CPU-kärnor måste man kunna styra på rätt håriga detaljer (som gissningsvis färre än 10 % av alla programmerare känner till). Endera gör man det i assembler och tvingas hantera detaljer i varje CPU-arkitektur separat, eller så skriver man det i C++11 <atomic> och för exakt samma prestanda fast nu har man något som fungerar på alla CPU-arkitekturer där det finns en modern C++ kompilatorn.

Ta <random>. Visst kan man skapa "slumpmässiga tal" i andra språk, men i C++11 har man skapat något som i praktiken designats av matematiker och statistiker, inte programmerare som saknar erforderligt domänkunskap (slumptal är faktiskt ett extremt svårt fält på en dator, datorer gör inte slumpmässiga saker om de inte är trasiga...).

Så är det värt att lära sig C++? Om målet är att jobba med programmering i Sverige: inte helt självklart faktiskt. De områden där C++ används är relativt små här. Vet av egen och andras förstahandsinformation att det är extremt svårt att få tag i folk med systemkunskaper på HW-nivå och med riktigt djup kunskap i C/C++. Gissningsvis en direkt följd av att sådana jobb är relativt ovanliga i detta land (jämfört med antalet jobb som kräver kunskap i webbutveckling, i back-end utveckling och liknande).

Är målet att bättre förstå modern HW: finns inget bättre än att lära sig C och C++ (och dess GPGPU derivat CUDA och OpenCL).

Mitt mål är att simulera differentialekvationer i from av enkel 3D grafik. Det kan vara ett hjul som roterar, en boll som studsar, en inveterad pendel, en balk som böjer sig.

Ja, det kommer bli mycket matematik, men sådant är jag van med.

Permalänk
Datavetare
Skrivet av heretic16:

Mitt mål är att simulera differentialekvationer i from av enkel 3D grafik. Det kan vara ett hjul som roterar, en boll som studsar, en inveterad pendel, en balk som böjer sig.

Ja, det kommer bli mycket matematik, men sådant är jag van med.

Låter som något du lämpligen skriver i whatever som är bekvämt. Ser inte att projektet har några extravaganta krav.

Java fungerar garanterat. Givet fokus på matematik skulle säker också något som NumPy+PyOpenGL fungera lysande. Gillar själv R

Självklart en grov övergeneralisering, men ser det lite som: är förväntningen att programvaran kommer ta >1 år att utveckla är det lika bra att starta med C eller C++ direkt. Annars är det oftast vettigare att välja något annat.

Visa signatur

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

Permalänk
Hedersmedlem
Skrivet av ZecretW:

@heretic16:

Med risk att alla som vet mer än mig kommer att såga mig längst fotknölarna som vanligt kan jag säga att det är bra att veta hur datorer fungerar men inte nödvändigt, fram tills ditt program inte funkar.

C++

definiera bondgård skapa array av kor allokera utrymme för gräs för varje ko, ge gräs skapa mjölkbil för varje ko, fyll mjölkbil skicka mjölkbil till modul mejeri ....... ......

Java, C#

ICA.KöpMjölk(4);

I första fallet kan du hitta varför det inte funkar, i andra fallet har du ingen aning om varför ICA returnerar NULL.
Högnivåspråken är tidseffektiva och någon annan har redan löst de flesta problemen och det funkar på många plattformar.

Hej!

Det är absolut inte min avsikt att såga dig längst med fotknölarna, men jag måste ändå få såga själva inlägget.

Det du beskriver när du jämför C++ med Java/C# är olika abstraktionsnivåer som man programmerar på. Ditt "C++"-program är på en låg abstraktionsnivå, ditt "Java/C#"-program är på en hög abstaktionsnivå. Det har inget med programmeringsspråket att göra. Programmering handlar om att bygga abstraktioner och sätta ihom dem, och alla vettigt strukturerade program kommer innehålla funktioner med olika abstraktionsmiljö.

För att veta varför din hypotetiska metod ICA.KöpMjölk inte funkar så tittar du helt enkelt inuti metoden i fråga. Inget konstigt med det, oavsett vilket språk det är skrivet i. För även i ditt C++-program kommer du säkert själv bygga en KöpMjölk-funktion någonstans.

Det jag tror att du kanske menar är att C# och Java kommer med mer bra grejer inkluderat i standardbiblioteket. Det har egentligen inte så mycket med språket att göra, för även om du programmerar i C++ kan du plocka in bra återanvändbara komponenter, som t.ex. Boost.

Permalänk
Skrivet av Yoshman:

Låter som något du lämpligen skriver i whatever som är bekvämt. Ser inte att projektet har några extravaganta krav.

Java fungerar garanterat. Givet fokus på matematik skulle säker också något som NumPy+PyOpenGL fungera lysande. Gillar själv R

Självklart en grov övergeneralisering, men ser det lite som: är förväntningen att programvaran kommer ta >1 år att utveckla är det lika bra att starta med C eller C++ direkt. Annars är det oftast vettigare att välja något annat.

Jag valde Java för att det var enklare än C++. Jag slapp det där med pekare och insåg att jag aldrig kommer jobba som en programmerare heller. Jag insåg att jag har behov utav att skapa grafiska applikationer. Jag började faktiskt först med C#, men gick över till Java då Java är inte beroende av vilken plattform man kör på.

Själv håller jag mig till MATLAB/Octave och har skrivit bibliotek för dessa mjukvaror inom reglertekniken. Både subspace-systemidentifiering och adaptiva regulatorer har jag skrivit kod för.

I detta fall tänker jag simulera t.ex. enkel bil som kör en krokig väg och sedan ska jag använda Apache Commons javabibliotek för matematik för att sedan använda en kvadratisk lösare som löser linjära optimala problem. Målet är att bilen ska vara stabil efter en krokiga vägen. Sådant är jag intresserad utav och det finns inte många mjukvarar som erbjuder sådant. Finns det, så kostar dem pengar. Simulink inom MathWorks vet jag håller på med det. Men då måste man ha först MATLAB, sedan Simulink och sedan Simscape. Det är ca 70 tusen kr.

Då väljer jag jMonkey istället för att lägga lite enkla geometrier som roterar

Edit:

Att visa "signaler" på plottar är ingen som köper, då dem inte förstår. Tänk dig själv att du ska sälja en högtalare, men visar fouriertransform och elektronik? Lyckade affärer? ne.

Permalänk

Någon som minns?

https://www.youtube.com/watch?v=N0qZaIIqVc0

Denna grafikmotor skrevs i C. Måste vara enormt mycket kod.