Estou interessado em modificar o núcleo Java para um trabalho acadêmico específico no qual estou desenvolvendo um protótipo baseado na linguagem e gostaria de inserir um novo tipo primitivo, alguém sabe onde estão implementadas as definições das palavras reservadas e como poderia inserir uma nova palavra. Seria isso possível?
Não quero definir como um objeto pois sairia do contexto do trabalho.
Você gostaria de dizer qual é o novo tipo primitivo? É que dependendo, posso lhe dizer exatamente o que deve ser alterado. Pode ser algo trivial e pode ser algo impossível de mexer no tempo que você tem disponível, dependendo de que tipo primitivo seja esse.
A
Anderson_BP
Preciso definir uma palavra que representara um contexto assim como o class ou interface. Na verdade seriam preciso indicar duas definições uma de tipo (parallel ou single) e outra representando um contexto como o de classe (class).
ViniGodoy
E não serve usar só annotations?
E
entanglement
Você conseguiria implementar isso como uma anotação (“annotation”) de classe? É que esse tipo de coisa que você quer fazer não é nem um pouco trivial - você teria de mexer muita coisa tanto no compilador Java quanto na JVM. Digamos que mudar a linguagem, nem que seja alguma coisinha boba, é questão para um doutorado que dure 2 anos e que seja financiado pela Oracle.
Você poderia, por exemplo, indicar o segundo significado de “contexto” por:
public@ContextclassBla{}
E o primeiro como:
classBla{public@Parallelvoidmethod(){...
ou
classBla{public@Singlevoidmethod(){...
Estude bem “annotations” e veja que o que você quer fazer é relativamente trivial com Annotations.
E
entanglement
Se não quiser usar Annotations, eu recomendaria fazer um sub-sub-subconjunto do Java e criar um compilador para essa linguagem, cujo “target” é a JVM.
É bem mais simples que tentar mexer no compilador Java embora os fontes estejam disponíveis .
Acredito que só tentar estudar o compilador Java e a JVM para ver o que deve ser mudado nele leve cerca de 2 meses full-time (que é tempo que você não deve ter).
A
Anderson_BP
Esse é o grande problema sei que não é algo trivial e o tempo que disponho também é curto. Vou estudar um pouco mais sobre annotations e verificar até onde posso chegar!!! E continuar analisando as modificações para inserir diretamente, esse questão de construir um compilador para um sub-conjunto JAVA é uma opção que não descarto tb, ainda tenho uns 3 meses pela frente e estou disposto a dedicar um bom tempo.
Só para esclarecer onde seriam realizadas essas modificações especificamente, não identifiquei os pontos que levassem a essas definições.
E
entanglement
Vou dar um exemplo. Digamos que você tenha uma classe que você queira anotar como “Parallel”. Na anotação, você quer indicar o grau de paralelismo (por exemplo:
publicclass@Parallel(instances=4)MyTask{}
Em vez de você chamar diretamente o construtor dessa classe, você tem de criar uma outra classe que carregue a definição dessa classe, veja que ela tem uma anotação “Parallel” com o atributos “instances = 4”, e então pode, por exemplo, criar 4 instâncias que rodam sob uma única thread, 1 instância que é compartilhada por 4 threads ou sei lá como você vai definir a sua estratégia de paralelização das instâncias.