4 249 läst ·
30 svar
4k läst
30 svar
Buggiga OS för mobiltelefoner.
Det är sant att på 70-talet när C uppfanns betraktades det som ett tredje generationens språk och till skillnad från ren maskinkod och assembler som ett riktigt högnivåspråk. Skiljelinjen var att språket behövde kompileras och inte kunde direktöversättas till maskinkod. Så visst; från ett arkaisk akademisk perspektiv har du rätt. I praktiken har C dock kommit att bli de-facto standard för lågnivåprogrammering och kallas ibland skämtsamt för "den portabla assemblern". När till och med små enchipsdatorer som AVR och PIC programmeras med C i större utsträckning än assembler tycker jag inte det är mycket att orda om.AndersMalmgren skrev:
Nu griper du efter halmstrån. Att en garbage collector skulle vara någon sorts definierande attribut är direkt felaktigt då det finns åtskilliga garbage collectors för t.ex. C++. Objective-C innehöll dessutom en garbage collector tidigare men den har aldrig använts i iOS och håller på att plockas bort ifrån språket helt. Att java saknar pekarsemantik handlar enbart om språkets utformning och har väldigt lite med att göra om att den körs i en virtuell maskin eller inte. Inte heller att köra programmet i en skyddad miljö skulle jag säga är en entydig distinktion då det en hel uppsjö av tekniker för detta och som på intet sätt står och faller med programmeringsspråken. Listan över gamla språk utan pekarsemantik, och med en skyddad exekveringsmiljö, kan göras lång. De existerade i årtionden innan någon började använda det engelska adjektivet "managed" som ett sätt att skilja dem från andra språk. Enligt din argumentation skulle t.ex. gamla nymodigheter som Visual Basic 6.0 vara ett "managed" språk.AndersMalmgren skrev:
Du länkar till ett internetforum där ungdomar sitter och försöker förklara det vi hittade på under 1970-talet i termer av vad de fick lära sig under 2000-talet! Självklart går utmärkt att beskriva det förflutna i termer av nuet men för en gammal man som jag som känns både bakvänt och felaktigt!AndersMalmgren skrev:
Renoverare
· Stockholm
· 20 201 inlägg
Java är från tidigt 90-tal. Att prata om 70-tal känns inte relevant då vi diskuterar Javas icke vara eller vara managed code. 
Javas VM tar hand om minneshantering, alokering, etc. Det är ett managed code språk. Sedan kanske termen kommer från CLR-världen, men det spelar ingen roll. Du blandar ihop MSIL och termen managed code misstänker jag. Och ja, VB6 är managed.
GC i objective-C (Enbart för OSX då iOS ALDRIG har haft detta) skiljer sig från managed code som .NET och Java då den inte körs i runtime utan den kompileras in i maskinkoden vid compile time.
btw, C är en abstraktion från maskinkod så jo, det är ett högnivåspråk.Dock en väldigt liten abstraktion. Jämför en for loop i ASM och C
C kanske är mer synonymt med embedded programmering än lågnivå?
Javas VM tar hand om minneshantering, alokering, etc. Det är ett managed code språk. Sedan kanske termen kommer från CLR-världen, men det spelar ingen roll. Du blandar ihop MSIL och termen managed code misstänker jag. Och ja, VB6 är managed.
GC i objective-C (Enbart för OSX då iOS ALDRIG har haft detta) skiljer sig från managed code som .NET och Java då den inte körs i runtime utan den kompileras in i maskinkoden vid compile time.
btw, C är en abstraktion från maskinkod så jo, det är ett högnivåspråk.Dock en väldigt liten abstraktion. Jämför en for loop i ASM och C
C kanske är mer synonymt med embedded programmering än lågnivå?
Redigerat:
C betraktas nog ofta som lågnivå idag:
wiki skrev:However, many programmers today might refer to C as low-level, as it lacks a large runtime-system (no garbage collection etc.), basically supports only scalar operations, and provides direct memory addressing. ...
The terms high-level and low-level are inherently relative. Some decades ago, the C language, and similar languages, were most often considered "high-level". Many programmers today might refer to C as low-level.
Renoverare
· Stockholm
· 20 201 inlägg
Du låter ganska mossig när du säger sådär. Stackexchange med sina olika siter har väldigt hög kvalitet på sin kunskapsdatabas tack vare röstningssystemet och användare som är dedikerade till att lägga upp bra svar. Nu hänger jag mest på Stackoverflow och inte programmers men även programmers brukar ha bra info.Steamboy skrev:
Begrunda ordet medelmåtta. Det innebär att hälften kan något bättra än dig och att hälften är sämre. Bara för att det hänger ett gäng medelmåttor på Stackexchange som får en massa röster av de på den sämre sidan innebär inte att de på den bättre hälften blir särskilt imponerade. Men i vilket fall har den här diskussionen spårat ur för länge sen och om ingen har konkreta frågor på något av det jag skrev i #12 och vill ha en fördjupning får det räcka.AndersMalmgren skrev:
Renoverare
· Stockholm
· 20 201 inlägg
Vad har han rätt på? De flesta i branschen (och jag träffar många då jag är konsult) skulle säga att han har fel. C är högnivå och Java är managed code
edit: Medelmåtta, detta säger mer om dig än om stackoverflow. Välldigt många stora namn finns där och svarar regelbundet. Tex, Anders Hejlsberg, Bjarne Stroustrup och Alan Kay
Denna är lite rolig
http://stackoverflow.com/questions/357813/help-me-remember-a-quote-from-alan-kay/389642#389642
Sedan hänger nästan alla API-författare du kan tänka dig på Stack, så väldigt ofta får du ett svar skrivet av grundaren av APIet
edit: Medelmåtta, detta säger mer om dig än om stackoverflow. Välldigt många stora namn finns där och svarar regelbundet. Tex, Anders Hejlsberg, Bjarne Stroustrup och Alan Kay
Denna är lite rolig
http://stackoverflow.com/questions/357813/help-me-remember-a-quote-from-alan-kay/389642#389642
Sedan hänger nästan alla API-författare du kan tänka dig på Stack, så väldigt ofta får du ett svar skrivet av grundaren av APIet
Redigerat:
Jo det är rätt när det gäller en pc/Mac (m.fl.).bra-byggare skrev:På Android sitter programmeraren i en sandlåda och kan bara förstöra sitt eget sandslott. Råkar programmeraren försöka förstöra något utanför sandlådan är dagispersonalen där och snor spaden och puttar tillbaka hen i sandlådan igen.
På iOS finns ingen sandlåda och ingen personal så programmeraren kan springa omkring på hela dagiset och råka krossa fönster och trampa ner andras sandslott utan att någon förhindrar det. Ungefär.
I telefoner (iOS, android och wp) är apparna "sandboxade" vilket innebär att de bara har sin egen minnesarea att ställa till det i. En app kan alltså inte sabba för en annan app(eller os) på annat sätt än att konsumera minne eller processorkraft. Iof kan den ändra data via api:er, t.ex om du tillåter den komma åt kontakter, men det är ingen skillnad mellan programmeringsspråken där.
Det är en av anledningarna att det knappt finns virus för telefonerna, det är helt enkelt väldigt svårt att påverka andra program/appar/os i telefonen. Om det går är det en bugg som täpps till.......
Att skriva en app som kraschar är däremot inga problem, går utmärkt i alla plattformar och i alla programmeringsspråk.
Renoverare
· Stockholm
· 20 201 inlägg
Om du inte har rootat luren
(Dock kan du säga åt vilka program som ska få rootaccess)
Det där stämmer inte. Det är exakt likadant på mobiltelefoner och vanliga datorer. Android är i grund och botten en helt vanlig linuxdistribution.Larsa skrev:
På ren svenska för D09 och alla andra som gillade sandslottet:
Tänk dig att datorns minne som ett rutat papper. Varje ruta kan lagra en siffra. För att peka ut en särskild ruta anger du rad och kolumn. Till exempel rad 4 och ruta 10. För väldigt väldigt länge sedan delade alla program i en dator på samma rutade papper. Om då ett program lagrade sitt hemliga lösenord på rad 4 och kolumn 1-10 så kunde ett annat program komma åt den informationen genom att helt enkelt läsa från samma ställe. Om ett program dessutom innehöll fel kunde det även skriva över andra programs information på slumpmässiga sätt och få dem att krascha eller fungera på ett felaktigt sätt.
Det tyckte man inte var särskilt bra. Därför byggdes nya processorer och det skrevs nya operativsystem. Processorerna fick en särskild översättare för minnesadresser. Den gjorde det möjligt för varje program att få vad som såg ut som ett eget rutat papper, men där varje ruta egentligen finns någon annanstans på det riktiga rutade pappret. Operativsystemet skötte den uppsättningen av den omdirigeringen och delade ut lediga bitar av det stora rutade pappret till de olika programmet. Resultatet blev att om ett program skrev till rad 4 och kolumn 2 i "sitt rutade papper" så hamnade information egentligen på t.ex. på rad 32 och kolumn 3 på det riktiga rutade pappret. Ifall ett annat program då försökte läsa från rad 4 och kolumn 2 så fick det då annan information eftersom deras rad 4 och kolumn 2 inte alls pekade på rad 32 och kolumn 3 i det riktiga pappret utan till någon annan del av det som operativsystemet delat ut till programmet. Resultatet är att alla program är 100% separerade från varandra och att de inte kan påverka varandra över huvudet taget genom att läsa och skriva till varandras minne av misstag.
Detta kallas för "minnesskydd" och det används både för att skilja operativsystemets kärna ifrån alla användarprogram och för att skilja användarprogrammen ifrån varandra. Det finns idag ingen som helst skillnad mellan Windows, Mac, Linux eller Android i det avseendet. Det spelar inte heller någon roll om man "rootat" sin telefon eller inte. De har helt enkelt ingenting med saken att göra.
Ett användarprogram kommunicerar med operativsystemets kärna via något som kallas systemanrop. I alla moderna operativsystem har alla användarprogram ett användar-ID och beroende vem man är så får man göra olika saker. Den som för göra allt kallas för administratör eller root. Körs ett program som en sådan användare finns det särskilda systemanrop för att få titta på andra programs "rutade papper". Det är knappast något ett slarvigt skrivet program gör av misstag. Normalt sett är det bara tillverkaren av telefonen som kan installera program som kör som root på en telefon. Om man "rootar" sin telefon så skaffar man sig möjligheten att själva installera sådana program. Jag upprepar att det över huvudet taget inte påverkar minnesskydded och hur slarviga applikationer kan förstöra för varandra. Det enda det öppnar för är skadligt kod som avsikligt skrivits för att snoka i andra programs minne.
Det vill säga: Om programmen var hyresgäster så skulle det innebära att för att kunna sabotera grannens lägenhet måste programmet besöka hyresvärden, legitimera sig som polis och få huvudnyckeln. Knappast något man gör av misstag.
En aspekt till på användar-ID är att det bestämmer vilka filer ett program kan läsa och skriva till. Som root kan du snoka i allas filer. Den "sandbox" som Larsa pratar om är faktiskt den enda skillnaden mellan en vanlig Linux-dator och en Android-telefon. Skillnaden är dock mycket mindre än man kan tro. Android är nämligen en helt vanlig Linux-dator. Grunden i den skyddade sandlådan är just minnesskyddet. Sedan används något som kallas SELinux (Security Enhanced Linux) för att detaljstyra rättigheter baserat på användar-ID. Skillnaden är att på en linuxdator finns normalt sett användarna knutna till specifika personer eller roller så som; root, pelle, anders och kalle. Varje användare har då ett eget användar-ID och när de startar ett program så får programmet deras rättigheter. Ett Android-system däremot är uppsatt så att varje program som körs har ett eget unikt användar-ID. Större skillnader än så finns inte.
Det här är helt rätt. Eftersom varje program har ett unikt användar-ID kan operativsystemet ha väldigt finkornig kontroll över vilka systemanrop, filer och operationer ett program får använda. Dessutom används ID;et även för att styra åtkomst till Androids systembibliotek med basfunktionalitet. Här kan man öppna stora säkerhetshål i sin telefon genom att roota den och råka ge skadliga applikationer för mycket rättigheter.Larsa skrev:
En bättre rubrik på tråden skulle vara: Buggiga applikationer för mobiltelefoner. Det är trots allt väldigt sällan som själva OS;et kraschar. Min erfarenhet är dock att iOS i praktiken är betydligt stabilare än Android. Inte så mycket för att Android är sämre utan mer för att det är så spretigt och olika tillverkare lyckats klanta till olika saker medan Apple har en full kontroll över en betydligt mindre hårdvarumängd. Den bästa Android-integrationen jag använt är minst lika stabil som iPhone/iPad medan den genomsnittliga versionen är en helt annan historia.
Renoverare
· Stockholm
· 20 201 inlägg
Därför man sak hålla sig borta från Samsung, de har bloatat sönder sin version av Android. De borde göra som HTC gjort att man kan välja bloatad eller vanilla Android.
Även med vanilla-android så är det ju så att varje mobil har egna drivar för hårdvaran, detta kan ställa till problem på ett sätt som man inte får med Apple då det bara finns några få olika mobiler med olika hårdvara
Även med vanilla-android så är det ju så att varje mobil har egna drivar för hårdvaran, detta kan ställa till problem på ett sätt som man inte får med Apple då det bara finns några få olika mobiler med olika hårdvara
