Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse
  • 3 uker senere...

Hmmmm, jeg driver og tuller med et eget programmeringsspråk, skreddersydd for OS-et, objektorientert native code, jeg tror jeg har noen gode idéer, men jeg vet ikke helt.

 

det har en funksjon som rett og slett heter "func" som ser slik ut:

 

public func foreach(object value, IEnumerable en)
{
 init() // Initialize, will only be called once
 {
   en.Reset();
   value = en.Item; // Set value to the first item in the collection    
 }
 start() // Will be called on every iteration
 {
 }
 stop() // Will be called on every iteration
 {
   if(en.MoveNext()) // Move to next item in enumeration
   {
     value = en.Item;
     continue;
   }
   else
     break;
 }
 finally() // Will only be called once, when break has been called.
 {
 }
}

 

Dette er da spesifikasjonen på foreach i språket (som helt tydelig er et C-style språk)

 

Det er endel andre fancy ting, men den er det som sparer meg for mest tid, siden for, foreach og while kan skrives i språket, uten at de er skrevet rett inn i selve compileren.

Selvsagt planlegger jeg å bruke nasm :)

 

Men jeg vet ikke helt... men jeg tror vi ville fått flere frivillige dersom det var enklere å utvikle OS-et, og gå bortifra C og C++ tror jeg kunne vært et godt valg, og droppe å skrive kernelen fra bunn av, og heller bruke en eksisterende.

Lenke til kommentar

Nasm er kos <3

 

Ja, å skrive en kernel fra bunnen av å gjøre det skikkelig er et stort prosjekt.

Tror det blir mye mer morro å bruke en ferdig kernel, da blir det mer og gjøre.

Og man ser resultater raskere, noe som også øker motivasjonen.

 

Designe et eget språk for prosjekte blir også vanskelig, kanskje litt for vanskelig.

Du må huske at skal du holde deltakerne motiverte bør du holde deg til C/C++, noe som er like greit hvis du bruker en ferdig kernel.

 

Hvorfor ikke linux?

God tilgang på drivere....

Lenke til kommentar

Joda, sant det, men C++ øker utviklingstiden betraktelig sammenlignet med andre språk, og øker sjangsen for sikkerhetshull og bugs, grunnet manglende gc.

 

Språket jeg tenkte på skal selvsagt ha gc, og klasser.

I motsetning til C++, vil det være stor forskjell mellom class og struct, class bli alltid behandlet av gc, mens struct alltid vil ble lagret på stack.

Man kan allokere minne manuelt med gc.Allocate, og gc.Free

Man har selsvagt pekere, og datatypen void* blir erstattet av pointer, lurte på om hele keywordet void bare kan fjernes helt.

 

jeg har bestemt meg for at "for" skal bli litt mer konsekvent med språket, dermed må parameterne klemmes i { }

f.eks.

 

for({int i = 0;}, {i < 100}, {i++})

{

}

fordi for er en func som tar 3 parameter, delegates.

 

I motsetning til i C++, er det da mulig å ha flere instruksjoner etter int i = 0, hvis det er ønskelig.

 

Aadnk: Det er sikkert lurt, men jeg vet ingenting om forskjellen ;)

Her kan du sikkrt komme med noen pekepinner på wiki-en ettervhert :D

Lenke til kommentar

Hvis vi bruker en eksisterende kjerne så er vel litt av vitsen borte mht. filsystem- og driverplanene for prosjektet. Da blir jo Dvorient bare en Linux-distro, noe det forsåvidt finnes nok av.

 

For å være helt ærlig, tror jeg også at utviklingstiden vil være mindre om vi brukte C/C++ enn et nytt språk. For det første, så koder man mer effektivt i språk man kan, det vil være mer og bedre dokumentasjon på C/C++ fremfor et ny-oppfunnet språk. Jeg vil anta at språket - siden det er nytt - sikkert vil ha flere bugs også.

Lenke til kommentar

hehe, jeg lufter idéer her :)

 

Hvis compileren skriver eksporterte funksjoner, klasser etc. automatisk, ville det blitt en stor fordel.

 

export int main(string[] args)
{
 IO.Output.Write("Hello world!");
 return 0;
}

export int SomeFunc()
{
 return 0;
}

export int SomeProperty;

export class MyClass(MyInheritedClass)
{

}

export func for(delegate initfor, delegate condition, delegate tick)
{
 init()
 {
   initfor();
 }
 start()
 {
 }
 end()
 {
   tick();
   if(condition())
     continue;
   else
     break;
 }
 finally()
 {
 }
}

 

Når det gjelder bugs, kan vi regne med det på alle kanter allikevel - vi er noobs når det gjelder OS utvikling, er vi ikke? ;)

 

Men når det gjelder kernel, så synes jeg ikke vi bare skal ta en kernel og bruke den, men heller se etter spesielle ting vi trenger.

Jeg er litt imot å bare ta linux kernelen, og bruke den.

Dessuten, det finnes en rekke alternativer, vi får kikke litt nøye igjennom, og ikke bare ta den førse og beste, siden vi sitter fast med en kernel etter at vi har valgt den.

Lenke til kommentar
Aadnk: Det er sikkert lurt, men jeg vet ingenting om forskjellen ;)

Her kan du sikkrt komme med noen pekepinner på wiki-en ettervhert :D

9289314[/snapback]

I språket betyr det at man eksempelvis kan skrive return yield foreach for å gi "kontrollen" av yield-ingen til en annen løkke istedenfor å kjøre den indre iteratoren uavhengig av den øvrige og returnere hvert element oppover.

 

Altså ... la oss si du skal returnere alle underelementer til et element. Istedenfor å kjøre en foreach og bruke yield til å returnere hvert element, overfører du heller kontrollen til iteratoren til underelement-kolleksjonen til å yielde disse elementene direkte, slik at en ikke må kjøre to yields før destinasjonen får elementene sine. Skjønner?

Lenke til kommentar
for({int i = 0;}, {i < 100}, {i++})

{

}

fordi for er en func som tar 3 parameter, delegates.

 

I motsetning til i C++, er det da mulig å ha flere instruksjoner etter int i = 0, hvis det er ønskelig.

9289314[/snapback]

Det er da også mulig i C med komma-operatoren.

 

Hvis vi bruker en eksisterende kjerne så er vel litt av vitsen borte mht. filsystem- og driverplanene for prosjektet. Da blir jo Dvorient bare en Linux-distro, noe det forsåvidt finnes nok av.
Det blir jo ikke en Linux-distro hvis ikke linux-kjernen brukes. F.eks kan helt sikkert minix brukes. Og filsystemdrivere kan man jo likevel skrive.
Lenke til kommentar
for({int i = 0;}, {i < 100}, {i++})

{

}

fordi for er en func som tar 3 parameter, delegates.

 

I motsetning til i C++, er det da mulig å ha flere instruksjoner etter int i = 0, hvis det er ønskelig.

9289314[/snapback]

Det er da også mulig i C med komma-operatoren.

 

Er det nå det?

hva skjer hvis du skriver:

float x;
for(int i = 0, x = 159; i < 100; i++)
{
}

 

Du vil få en compile error, fordi x allerede er definert.

Dette anser jeg som noe som er inkonsekvent i C

Endret av GeirGrusom
Lenke til kommentar
Er det nå det?

hva skjer hvis du skriver:

float x;
for(int i = 0, x = 159; i < 100; i++)
{
}

 

Du vil få en compile error, fordi x allerede er definert.

Dette anser jeg som noe som er inkonsekvent i C

9308095[/snapback]

 

Du vil først og fremst få kompilasjonsfeil fordi du prøver å deklarere en variabel i en for-loop i c89. I c99 virker koden din helt fint (-std=c99 i gcc).

Endret av ratix
Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...