Novo Tipo Primitivo

Olá pessoal,

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.

Se alguém puder ajudar agradeço.
abraço

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.

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).

E não serve usar só annotations?

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. :frowning:

Você poderia, por exemplo, indicar o segundo significado de “contexto” por:

public @Context class Bla {
}

E o primeiro como:

class Bla {
    public @Parallel void method() {
...

ou


class Bla {
    public @Single void method() {
...

Estude bem “annotations” e veja que o que você quer fazer é relativamente trivial com Annotations.

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).

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.

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:

public class @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.