LordEirik Skrevet 3. juli 2007 Del Skrevet 3. juli 2007 Jeg har utviklet et programmeringsspråk, eller rettere sakt et "reflective programming language". Slik som PHP. Språket kaller jeg "Language Of LordEirik". Jeg har lagt ut språket her: http://tihlde.org:8000 Det hele begynte med at jeg ville lage en webserver med bare én classefil. Så fant jeg ut jeg ville prøve å lage et slikt språk. Språket er langt fra ferdg, men er lett å byggepå. Noen metoder er ikke så veldig effisiente, men det fungerer. Først lagde jeg det veldig likt PHP, men det ble litt for kjedelig. Derfor er pråket basert på en slags halvnorsk pseudokode. F.eks. "hvis a erlik b". Istede for +, -, *, / har jeg brukt pluss, minus, ganger, delt. Jeg kan ikke garantere at webservern min kjører eller om koden fungerer. (Den klikker lett). Lenke til kommentar
grimjoey Skrevet 18. juli 2007 Del Skrevet 18. juli 2007 (endret) "reflective programming language" sikker på du ikke mener "interpreted programming language"? php er reflektivt, men lol er nok ikke det. uansett nice. det er slik php startet også. en kar som lagde et enkelt språk for å lage hjemmesider. det utviklet seg fort til noe større. det virker ikke som du tilfører noe nytt. du bare endrer ordene og syntaksen litt. men det er nok god lærdom i det uansett. alikevel. hvis du vil tilføre noe nytt, så kunne jeg tenke meg å se et språk ikke nødvendigvis så ulikt php, men hvor syntaksen gjorde det raskere å skrive. altså all bruk av $ [] {} medfører "avansert" tastaturbruk. jeg hater å skrive if(isset($foo['bar']) && !empty(foo['bar'])) { blabla }; hvis det hadde dukket opp et språk som hadde de nødvendige fasiliteter, men en tidsbesparende syntaks hadde jeg lett valgt å bruke dette. bruk tegn som er tilgjengelig med ett tastetrykk. korte spesial ord. osv hurtigreferanse som f.eks: ref a foo.'bar'; if a.isset .n a.-empty, dothatstuff; i stedet for if(isset($foo['bar']) && !empty(foo['bar'])) { dothatstuff() }; hvor "ref a b;" lager en referanse fra a til b som gjelder kun neste linje for eksempel jeg byttet ut && med .n og if(condition) {expression} med if condition, expression; for å kunne spare tastetrykk. doten må være med før n for å skille fra eventuell variabel eller referanse n. hyphen foran uttryk betyr negativ lik som ! i php. byttet også ut array['index'] med array.'index' og function(argument) med argument.function for samme grunn. jeg finner meg selv i situasjoner hvor jeg skriver funksjoner utenpå hverandre. altså begynner med en funksjon og wrapper den i neste osv. dette medfører mye bruk av piltastene. bruker man en syntaks som ruby når det gjelder funksjoner/metoder unngår man dette. "nl2br(htmlentities(striptags($ettellerannet)))" blir "ettellerannet.striptags.htmlentities.nl2br". rekkefølgen i det eksemplet er ikke så viktig, men i tilfeller hvor den er det er det mer naturlig å bruke sistnevnte syntaks. det er noe av det som har gjort ruby så populært. det må nok tenkes mer gjennom for å ikke begrense seg selv. og hvis du vil gjøre noe mer en en læringsprosess ut av det bør du vurdere å skrive serveren/interpreteren i et kompilert språk. edit: en annen ting. php: if(isset($_POST['submit']) && !empty($_POST['submit'])) { kode med masse $_POST variabler som tar tid å skrive; } nysyntax: use _POST; if submit.isset .n submit.-empty, kode som er kjappere å skrive; enduse; multiline: php: if (cond) { expr; expr; expr; } nysyntax: if cond, expr expr expr; Endret 18. juli 2007 av grimjoey Lenke til kommentar
grimjoey Skrevet 18. juli 2007 Del Skrevet 18. juli 2007 er ikke interesert i å bruke MS IIS. holder meg til LAMP, WAMP og RoR. open source er way to go Lenke til kommentar
j000rn Skrevet 18. juli 2007 Del Skrevet 18. juli 2007 er ikke interesert i å bruke MS IIS. holder meg til LAMP, WAMP og RoR. open source er way to go 9095858[/snapback] www.mono-project.com Lenke til kommentar
LordEirik Skrevet 18. juli 2007 Forfatter Del Skrevet 18. juli 2007 Tusen takk for svar grimjoey. Grunnen til at mitt språk er så likt PHP kommer av den grunn at det er lagd utifra PHP som eksempel. Planen bak språket var ikke å lage en lettere syntaks, men jeg har jo byttet ut $ med ingenting. Må innrømme at $ er meget irriterende, også [] og {}. Derfor jeg byttet ut {} med <>. Ellers er jo syntaxen ganske så latterlig, har jo f.eks. byttet ut + med 'pluss'... Grunnen til at jeg lagde LOL var av ren kjedsomhet og at jeg kan skryte på meg å ha skrevet et eget språk. Det er kanskje ikke i nærheten av et ekte "språk", men skal nok slippe lett unna i en muntlig samtale med mitt eget språk Jeg har ikke gjort noe med det siden jeg postet den første posten pga. andre prosjekter, så ting som ! (not) har jeg ikke lagt til. Kan nevne at 'isset' ikke brukes, men bare 'if', f.eks. "hvis a"... Ellers er det lett å gjøre om alle syntaxene til akkurt det du selv vil, men det er jo ganske meningsløst da språket er så å si ubrukelig sammenlignet med andre språk... Forresten hva mener du med; "og hvis du vil gjøre noe mer en en læringsprosess ut av det bør du vurdere å skrive serveren/interpreteren i et kompilert språk."? Lenke til kommentar
grimjoey Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 java er riktignok et 'kompilert' språk, men det kompileres til bytekode. ikke maskinkode. bytekoden interpreteres av en virtuell maskin og gjøres om til maskinkode der. dette for kompatibilitet med andre os. dette gjør det tregere enn språk som er kompilert direkte til maskinkode. c/c++ er vel noe av det raskeste. dersom serveren skulle benyttes av enorme sider med hundretusenvis av requests daglig på avanserte web-programmer, har hastigheten mye å si. det kan selvfølgelig kompanseres med hardware, men det lønner seg å ha en raskest mulig server uansett. Lenke til kommentar
steingrim Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 java er riktignok et 'kompilert' språk, men det kompileres til bytekode. ikke maskinkode. bytekoden interpreteres av en virtuell maskin og gjøres om til maskinkode der. Dette er i beste fall veldig upresist. Det er lenge siden Java-VMen var en interpreter. Bytecode kompileres til maskinkode i VMen av JIT-kompilatoren. Lenke til kommentar
LordEirik Skrevet 19. juli 2007 Forfatter Del Skrevet 19. juli 2007 Jeg vet nok forskjellen på java og c, men er også klar over hva steingrim sier, og forsto derfor ikke helt hva du mente. Dessuten har jeg hørt rykter om at java faktisk viser seg å være mer effisient i det lengre løp... Lenke til kommentar
grimjoey Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 (endret) steingrim: intepretering og kompilering betyr mye av det samme. min oppfattelse er at kompilering brukes der programkoden oversettes til maskinkode en gang. for så å kjøre maskinkoden når programmet skal kjøres. interpretering ville jeg brukt til å beskrive når programkoden oversettes til maskinkode hver gang programmet skal kjøres. begge disse tilfellene intreffer ved java. java koden kompileres til bytekode en gang. bytekoden interpreteres til maskinkode hver gang programmet kjøres. dette er i følge min oppfattelse. hvis du vet om noen teknisk eller annen forskjell mellom kompilering og interpretering må du gjerne belære meg om det. lordeirik: java har nok sine lyse sider. men etter min erfaring og logisk tankegang, ser jeg ikke hvordan java kan være raskere enn c/c++. da må det handle om optimalisering som har vært utført i java bedre enn c/c++. java har den fordelen at samme programmet kan kjøres på alle støttede platformer. fordeler har som regel kostnader. som sagt så går java gjennom ett ledd med oversetting hver gang det eksekveres. det gjør ikke programmer skrevet i c/c++. eneste jeg ville brukt java til er applets. samtlige java programmer jeg har testet har vært problematiske og forholdsvis trege/ressurskrevende. mulig jeg har vært uheldig med programvare. eksempelvis eclipse og azureus. Endret 19. juli 2007 av grimjoey Lenke til kommentar
steingrim Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 dette er i følge min oppfattelse. hvis du vet om noen teknisk eller annen forskjell mellom kompilering og interpretering må du gjærne belære meg om det. Tilfeldigvis dreide masteroppgaven min seg om programmeringsspråk (eller kanskje ikke så tilfeldig...), så jeg kan et og annet om språk og kompilatorer. Både teoretisk og praktisk En kompilator oversetter ett språk til et annet. Slik lyder gjerne lærebok-definisjonen, men som du sier, som regel er dette mål-språket maskinkode for en plattform. Det trenger dog ikke være det, i det minste ikke i følge en såpass bred definisjon En interpreter .. eh.. tolker programmet "der og da". Som regel parses språket først, slik at selve tolkingen er en traversing/"kjøring" av syntaks-treet. Men hvordan henger dette sammen med Java? Du sa "bytekoden interpreteres til maskinkode hver gang programmet kjøres." Hvordan interpreterer man noe til maskinkode? Jo, man kompilerer det til maskinkode. Man oversetter bytecode til maskinkode for den spesifikke plattformen. Merk deg at hvis du kaller en metode flere ganger så vil den bare JIT-kompileres den første gangen. De påfølgende kallene av denne metoden vil være kall til binær maskinkode, nemlig resultatet av JIT-kompileringen som skjedde første gang du kalte den. Her er det sikkert masse å hakke på for de som vil, men nå må jeg jobbe litt så får jeg heller svare etter beste evne senere Lenke til kommentar
grimjoey Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 (endret) takk for info. uansett var poenget mitt at java går gjennom en oversettingsprosess hver gang det eksekveres. teoretisk er det mulig å kompilere til en spesifikk platform og slippe denne oversettingen (noe som ville motstride prinsippet bak java). vet ikke hvor mye det ville ha å si med tanke på hastighet. uansett for meg er java applets og kaffe. edit: etter mer ettertanke vil jo den oversettingen forekomme kun under oppstart av programmet. det har jo ingenting å si på hastigheten når programmet kjører. så da lurer jeg egentlig på hva det er som gjør java så forholdsvis tregt under min erfaring med det. Endret 19. juli 2007 av grimjoey Lenke til kommentar
steingrim Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 teoretisk er det mulig å kompilere til en spesifikk platform og slippe denne oversettingen (noe som ville motstride prinsippet bak java). Ikke bare teoretisk, gcj fra GCC (http://en.wikipedia.org/wiki/Gcj) kan gjøre dette. Det finnes helt sikkert flere. edit: etter mer ettertanke vil jo den oversettingen forekomme kun under oppstart av programmet. det har jo ingenting å si på hastigheten når programmet kjører. så da lurer jeg egentlig på hva det er som gjør java så forholdsvis tregt under min erfaring med det. Ikke under oppstarten, men når en metode kalles såvidt jeg vet. Det er kun kode som kalles som JIT-kompileres. Litt overhead den første gangen blir det jo selvfølgelig. Lenke til kommentar
grimjoey Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 så bytekoden er en representasjon av kildekoden og kode som kalles blir kompilert første gangen og senere referert til? da blir vel resten av bytekoden interpretert eller? Lenke til kommentar
GeirGrusom Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 Mest effektive man kan bruke, er assembly, noen sier at dette ikke stemmer, siden compilere ofte kan skrive bedre kode en et menneske klarer.... som jeg anser som tull. Compilere er veldig avhengig av stack(kompilér et C++ program og se på kildekoden, man ser da at compilere jobber linje for linje), mens mennesker kan skrive funksjoner som bortimot ikke bruker stack i det hele tatt. utifra det jeg ser på java bytecode, ser det ut til at alle instruksjonenene bruker stack. Forskjellen på stack og register, er at register er flerfoldig ganger raskere en stack (som ligger i programmets dataområde) Og for hver verdi som legges på stack, følger en "push" instruksjon, som i grove trekk ser slik ut (man kan bare skirve push i asm): add esp, 4 mov dword ptr [esp], eax (dette på x86) dette er en forholdsvis enkel instruksjon, men den kan fint unngås ved å få perspektiv på koden, noe som datamaskiner er veldig dårlige til. Lenke til kommentar
j000rn Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 Mest effektive man kan bruke, er assembly, noen sier at dette ikke stemmer, siden compilere ofte kan skrive bedre kode en et menneske klarer.... som jeg anser som tull. 9103009[/snapback] Bytt ut "menneske" med "GeirGrusom" så kan vi være enige Lenke til kommentar
GeirGrusom Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 haha Ja, compilere lager mye dårligere kode en meg. Så flink du er Jørn! Lenke til kommentar
j000rn Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 haha Ja, compilere lager mye dårligere kode en meg. Så flink du er Jørn! 9103125[/snapback] Hadde bare resten av verden vært som deg så kunne vi sluppet de DUMME compilerene! Lenke til kommentar
Emancipate Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 mens mennesker kan skrive funksjoner som bortimot ikke bruker stack i det hele tatt.Det er veldig få registere på x86. Og bare 3 som du ikke må bevare hvis du skal bruke de. Og de du bevarer, de putter du på stakken, og da har vi det gående... Men mennesker skriver selvfølgelig enkelt raskere kode enn en kompilator. Lenke til kommentar
GeirGrusom Skrevet 20. juli 2007 Del Skrevet 20. juli 2007 (endret) mens mennesker kan skrive funksjoner som bortimot ikke bruker stack i det hele tatt.Det er veldig få registere på x86. Og bare 3 som du ikke må bevare hvis du skal bruke de. Og de du bevarer, de putter du på stakken, og da har vi det gående... Men mennesker skriver selvfølgelig enkelt raskere kode enn en kompilator. 9104708[/snapback] eax, ebx, ecx, edx; det er 4 edit: ontopic Ganske fancy språk, LordErik Endret 20. juli 2007 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå