Não é querendo ser alguém chato, se vc possui dificuldade de lidar com os "nuances" da linguagem provavelmente você terá mais complicações na implementação de uma nova linguagem.
Acredito que este seja um comportamento interessante de auto-avaliação, a ideia não se sustenta tecnicamente e com o passar dos anos você vai me agradecer de ter observado com outros olhos.
Não adianta criar uma nova linguagem se ela é mais do mesmo, outro ponto é que a problemática precisa ser real e te digo, trabalho alguns anos com JS, e embora a linguagem tenha problemas, os citados no post não possuem muita relevância.
Diferenças entre undefined e null
Outras linguagens como C# não possuem o undefined, e isso traz características normalmente da tipagem forte em que um tipo atribuido para aquele espaço de memória não pode ser modificado para outro tipo exceto se for para algum já herdado. Então aqui faz sentido o null porque você tem um espaço de memória que agora não aponta mais para o objeto e sim para NULL, é aqui que mora o problema de linguagens gerenciadas/interpretadas. No JavaScript temos o total inverso, o espaço de memória pode ser alocado com qualquer outro tipo em runtime (não que fisicamente assim aconteça), o problema é que o Wrapper do Objeto de JS no C++ é bem complexo para poder ter esta dualidade de performance/maleabilidade, acarretando na possibilidade de outra vertente da concepção de nullidade.
Sem contar que no JS temos o hoisting que a linguagem faz automaticamente para funções, é uma das facilidades da linguagem por ser imperativa/procedural de script, mas que implica na função sendo realocada para antes de uma alocação de memória (isso quando a chamada também ocorre antes) considerando assim um ponteiro para um objeto que nesse caso estará com o estado de undefined, veja abaixo:
sayHello(); // undefined
var message = "Hello, world!";
function sayHello() {
console.log(message);
}
Que a própria linguagem já corrigiu a muitos anos atrás com const:
sayHello(); // ReferenceError: Cannot access 'message' before initialization
const message = "Hello, world!";
function sayHello() {
console.log(message);
}
Mas você pode sim fazer:
const message = "Hello, world!";
sayHello(); // "Hello, world!"
function sayHello() {
console.log(message);
}
this no JS
Não vejo problemas com o this. Vejamos, a crítica ao this geralmente surge de uma leitura incompleta sobre como os contextos funcionam no JavaScript e os famigerados closures/functions/methods e as suas aplicabilidades práticas.
É um tanto quanto simples:
- É função? this refere-se ao objeto da função;
- Era função e agora você atribuiu a uma propriedade de objeto virando um método? agora o this é o objeto;
- Esta executando o código arbitrariamente no arquivo ou tag script? o this é contexto arquivo/script pág;
- É uma closure? o this é agora o contexto imediato acima (reaplicando as regras anteriores);
- É um método declarado? this refere-se ao objeto/classe instance;
Problema real
O problema na verdade é o uso incorreto da linguagem, por ser uma linguagem maleável e de fácil curva de aprendizagem muitos dev's acabam utilizando incorretamente e/ou acabam não entendendo de fato como o ambiente funciona. Lembre-se, é mais fácil criticar do que procurar entender.
Muitos erros a linguagem já corrigiu, e embora eu concorde que o protótipo tenha sido feito em 10 dias como mencionado, a linguagem não parou no tempo e tem sido aprimorada/testada há décadas.
Novas linguagens
Caso prefira seguir algum longo período não mensurável de tempo construindo sua própria linguagem, ainda que tenha coesão e resolva um problema real seu, como angariar pessoas para sua comunidade?
O sucesso de uma linguagem está diretamente associado à uma comunidade ativa e motivada, afinal ninguém constrói isso sozinho, uma vez que o workflow de um dev exige muitos pacotes e soluções no dia a dia, como sua linguagem vai abordar a interoperabilidade entre pacotes já existentes? Uma linguagem sem lib's é uma linguagem morta, infelizmente.
Manutenabilidade também é um problema.
Enfim, cada um faz a sua avaliação das problemáticas das linguagens, nem tudo fará sentido para todos, mas eu consigo encontrar alguns bons motivos para a comunidade JS seguir com o rumo em que está seguindo, e na MINHA PERCEPÇÂO, temos tido resultados.
#PAZ