8
votes

Plugin de surcharge de l'opérateur pour Java

J'ai vu un joli compilateur Java hacks dans lequel vous pouvez Remplacer les assertions par des instructions d'exception de pointe , vous pouvez avoir auto -Génera Propriétés pour champs, etc.

Je me demandais simplement ...

est-il possible de pirater Java Compiler afin qu'il soutient la surcharge de l'opérateur?

EDIT:

Ce n'est pas que je manque de surcharge de l'opérateur en Java ou quelque chose. Je veux juste savoir s'il est possible de la mettre en œuvre en utilisant les hacks mentionnés dans les liens que j'ai données ci-dessus. Alors s'il vous plaît ne me suggérez pas de passer à une autre langue comme Scala (que j'apprends déjà quand même!: D).

EDIT:

S'il vous plaît juste me dire s'il est possible de le faire en utilisant JSR 269 ou quelque chose comme ça. : |

Merci.


3 commentaires

Vous devriez passer à SCA ... oh attends ...


J'irais demander au projet Lombok Group - Reinier Zwitserloot et ROEL SPILKER font beaucoup de hacks compilateurs sur une gamme d'outils / compilateurs, de sorte qu'ils seront probablement en mesure de vous pointer dans la bonne direction - groups.google.com/group/project-lombok


Il me semble que l'on pouvait pirater le compilateur pour faire tout ce qui est possible dans la théorie du compilateur. Voter.


7 Réponses :


1
votes

Si vous voulez surcharger l'opérateur, vous pouvez envisager de déménager à Scala . Le code Scala est interopérable avec vos classes Java et prend en charge la surcharge de l'opérateur.


0 commentaires

2
votes

JFRONT est un pré-processeur pour la langue Java qui vous permet de mettre en œuvre surcharge de l'opérateur pour vos propres cours. Malheureusement, il ne semble pas ajouter cette capacité aux classes standard (Biginteger et al. Serait un excellent candidat pour cela).


1 commentaires

Ce serait une bonne astuce si cela pourrait le faire pour le Java. * Les classes API, mais je suppose qu'il utilise Bytecode ou la modification de la source, qui n'est pas une option pour Java. * / CODE> (SANS SOINT DE FONCTIONNAIRE DE FONCTIONNAIRE DE FONCTIONNAIRE DE FONCTIONNEMENT, De toute façon).



1
votes

Une autre approche utilise des bibliothèques groovy depuis, Groovy dispose déjà d'une surcharge de l'opérateur.

https://o24j.dev.java.net/

L'implémentation actuelle utilise Groovy pour la surcharge. Cette approche a Un inconvénient: les bibliothèques groovy doivent être livrés avec le projet.


0 commentaires

0
votes

Il n'autorise pas la surcharge de l'opérateur, mais compte tenu des liens de votre question, vous pouvez être intéressé par http://projectlombok.org/features/index.html


0 commentaires

2
votes

Vous pouvez utiliser l'injection de code octet pour remplacer un type comme flotteur avec votre propre type. Cela peut être fait après la compilation sans changer le compilateur.


2 commentaires

Comment cela m'aiderait-il à atteindre ce que je veux? Pouvez-vous s'il vous plaît être plus clair?


Vous pouvez écrire tout votre code à l'aide de Float (par exemple) avec les opérateurs, etc. et utilisez le remplacement du code octet pour modifier le code pour utiliser votre type souhaité.



5
votes

En réponse à la question modifiée, la seule façon de mettre en œuvre la surcharge de l'opérateur true en Java est de l'ajouter à la langue. Cela signifie que vous devez soit modifier le compilateur pour compiler votre code ou écrire un prétraiteur qui convertit votre code en Java standard. Pour le premier, vous pouvez télécharger une implémentation de Foss Java presque complète de GNU ou le openjdk projet. Pour ce dernier, vous pouvez écrire votre propre analyseur à l'aide de choses comme JavAcc, etc. (des exemples sont sur ce page ) ou vous pouvez utiliser JFRONT comme base à ajouter votre propre syntaxe.


4 commentaires

Pourquoi devriez-vous modifier la langue (syntaxe) pour le faire? Le chargement de l'opérateur est un problème sémantique. Ne devrait pas avoir à modifier les étapes d'analyse, autres que l'identifiant de désambiguït.


Comment ajouteriez-vous surcharger l'opérateur sans modifier la syntaxe? Vous devez devoir ajouter un mot-clé ou autoriser + , - etc. en tant que noms de fonctions. Les deux nécessitent de changer la syntaxe acceptable.


Je me rends compte que vous pouvez le faire en fournissant des méthodes spéciales à l'intérieur de chaque classe, telle que __sum __ (), etc. Notez que je n'ai que mentionné que l'analyse en conjonction avec l'écriture d'un pré-processeur.


Ce n'est pas exactement le genre de réponse que j'attendais mais je ne vois aucune meilleure réponse à venir. Alors accepter votre réponse. Merci!



4
votes

Il est possible d'implémenter une surcharge de l'opérateur Java à l'aide de JSR 269 avec des hacks. Regardez les plugins Java-Oo pour Javac et Eclipse JDT:

http://amelentev.github.com/java-oo/


0 commentaires