Avatar billede jespersahner Nybegynder
02. januar 2006 - 23:14 Der er 8 kommentarer og
1 løsning

Valg af compiler

Jeg anvender som standard Sun's compiler 'javac', men jeg er lidt interesseret i, hvilke erfaringer I har med andre compilere, og hvilke fordele/ulemper der måtte være med disse.

Specielt er jeg interesseret i en funktionalitet, hvor man kan kompilere java-kode, som ikke findes i en fysisk fil men f.eks. i en String eller et andet objekt, jf. i øvrigt JSR 199 (http://jcp.org/en/jsr/detail?id=199).

Videre er jeg lidt nysgerrig efter at vide, om der findes compilere, hvor man selv har mulighed for at tilføje funktionalitet til Java (f.eks. operatorer som '+', '-' osv.). En Java-compiler arbejder ud fra en grammatik (eng: "grammar"), og jeg forestiller mig, at det må være muligt at føje til denne grammatik, hvis den f.eks. er direkte tilgængelig i en fil.
Avatar billede arne_v Ekspert
02. januar 2006 - 23:19 #1
Normalt er man bedøvende ligeglad med compileren fordi det den laver er
trivielt.

Nogle bruger dog jikes fordi den compiler hurtigere.

JVM'en er derimod vigtig og der er testet meget med SUN versus IBM versus BEA
versus Oracle.

Men du søger reelt efter et helt nyt sprog.

Jeg kender ikke lige nogen som matcher dit behov, men prøv og check hvad der
er her http://flp.cs.tu-berlin.de/~tolk/vmlanguages.html
Avatar billede jespersahner Nybegynder
02. januar 2006 - 23:40 #2
->arne_v: Du har ret i, at sprogeti sig selv er underordnet, blot det kan generere bytecode til JVM'en.

Jeg tænker overordnet noget i stil med:

1. Med OOP og specielt reflection har man dynamik på run-time
2. Med bytecode manipulering (og vel også AOP) har man dynamik på compile-time
3. Med mulighed for at ændre i Java-compilerens grammatik har man dynamik på "sprog-niveau"

Specielt den sidste del synes jeg er spændende, idet den vil gøre selve sprogets grammatik dynamisk.
Avatar billede Slettet bruger
03. januar 2006 - 05:54 #3
Tror ikke du kan finde noget, hvor du kan ændre grammatikken, operator-overload ja men selve den grundlæggende grammatik, Nej. Og så er det vel heller ikke ønskeligt på nogen måder, IMHO.

Det ville jo bare betyde at du havde et sprog og ingen andre ville kunne bruge det fordi det var omdefineret. Ved ikke om du nogen sinde selv har været så uheldig at rende over et program med en mindre end hensigtsmæssig brug af operator-overload, det kan være rigtigt spængende når + ikke længere bare minder om addition, så er det efter min overbevisning mere skadeligt end gavneligt.

Med Ruby (http://www.ruby-lang.org/en/) kan du lave mange ting, blandt andet tilføjer egenskaber til klasser på run-time. Men igen jeg er ikke helt overbevist om at den slags dynamik er en fordel eller om det ikke mere er spændende konstruktioner som er ja mere spændende end virkelig verden effektive.

Det er selvfølgelig smag og behag og jeg kan godt se det akademisk sjove i det du leder efter ;)
Avatar billede arne_v Ekspert
03. januar 2006 - 16:04 #4
hvis man kigger på det link

så har SubJava, JPP, Groovy og xkjc operator overload

andre af dem har diverse andre grammatiske features, eksempel:

    compiler sees. This one is different from the other Jatha listed here.
The Java Syntactic Extender
    The Java Syntactic Extender is an extension to the Java language that allows Java programmers to define new syntactic constructs. The design is based on the Dylan macro system (e.g., rule-based pattern matching and hygiene), but exploits Java's compilation model to offer a full procedural macro engine. In other words, syntax expanders may be implemented in, and so use all the facilities of, the full Java language.

lyder f.eks. som lidt af det du søger.

NB: Jeg har aldrig prøvet nogle af ovenstående.
Avatar billede simonvalter Praktikant
03. januar 2006 - 17:09 #5
Jeg kan se at der er en del lisp varianter som kan compiles til at køre på JVM. I lisp er kode data og data kode ( se http://opal.cabochon.com/~stevey/blog-rants/the-emacs-problem.html )
Du siger sproget er underordnet.. og vil kunne kompilere kode som ikke er i en fysisk fil.. samt udvide funktionaliteten. lisp er perfekt til dette, men lisp er langt fra Java :)
Avatar billede jespersahner Nybegynder
04. januar 2006 - 13:02 #6
->simonvalter: Ja, LISP er langt fra Java! Jeg kender indirekte lidt til LISP gennem min matematiske baggrund. Hvis man interesserer sig for Gödel, Turing og i nyere tid Chaitin, støder man uvilkårligt på LISP. Se f.eks. http://www.cs.auckland.ac.nz/CDMTCS/chaitin/lisp.html

Er man til det helt minimalistiske, er programmeringssproget "brainfuck" (det hedder det faktisk!) måske sagen. Se f.eks. http://www.muppetlabs.com/~breadbox/bf/ og http://en.wikipedia.org/wiki/Brainfuck
Avatar billede jespersahner Nybegynder
04. januar 2006 - 13:07 #7
->arne_v: Smid gerne et svar. Det frække ord i denne sammenhæng, jf. dit link, er vist "pre-compilation". I stedet for at implementere ændringer til sproget i maven på selve compileren, er den nemme udgave at lave en pre-compiler, som parser til alm. Java-source.
Avatar billede arne_v Ekspert
04. januar 2006 - 13:15 #8
metoden er meget velkendt

den første C++ compiler var også et program som konverterede fra C++ til C
kode og så compilede man med en normal C compiler
Avatar billede arne_v Ekspert
04. januar 2006 - 13:16 #9
og svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester