×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Archives
  • /
  • Seção Sugestões
  • /
  • [Jogo] JavaScript
[Jogo] JavaScript
Hydroper
« Citoyen »
1610022960000
    • Hydroper#0528
    • Profil
    • Derniers messages
    • Tribu
#1
  0
O servidor/VPN do Transformice é implementado no Java, qual em torno suporta módulos Lua criados pelos jogadores utilizando a VM LuaJ. Seria muito mais flexível poder usar JavaScript (ES2015) no lugar do Lua, sem usar transpilador, e poder utilizar pacotes do Node.js. Atualmente isso parece ser possível invocando o V8 no Java.

Prós:
  • Declaração de classes
  • Gerenciamento de pacotes do Node.js (requere resolução das pastas node_modules)

    a dit :
    OBSERVAÇÃO
  • javax.script do Java fornece VM suportando ES2012, chamado Nashorn Script Engine. Essa engine suporta só alguns recursos do ES2015.

  • Dernière modification le 1610023500000
    Gamedroit
    « Citoyen »
    1610270640000
      • Gamedroit#3347
      • Profil
      • Derniers messages
      • Tribu
    #2
      0
    Ainda com essas idéias? Entenda o seguinte, o Lua é utilizado porque sua API para Java não oferece brechas de segurança e você pode modificar a vontade suas variáveis globais. Mesmo que você pudesse utilizar uma API Javascript, a implementação de bibliotecas NodeJS poderia criar brechas de segurança no servidor. Eu também gostaria de JavaScript mas os contras são piores que os prós além disso:
    1. Lua é feito para ser uma linguagem simples e portável, apesar de não ter uma built-in class, justamente por sua flexibilidade você pode desenvolver uma função/tabela que se comporta como classe.
    2. Também há bibliotecas no Lua (Eu mesmo por hobby desenvolvo algumas utilizando a Lua C API), a função require foi desativada justamente por motivos de segurança.
    3. Implementar uma nova API demandaria muito tempo já que eles teriam que portar todas as funções para o Javascript, além disso teriam que lidar com suas built-ins que poderiam expor o servidor.
    4. O Transformice não usa VPN (Virtual Private Network, Rede Virtual Privada) mas sim VPS (Virtual Private Server, Servidor Virtual Privado), isso claro se não estiverem utilizando um Servidor Dedicado.
    5. O servidor do Transformice não é "implementado" em Java, ele é feito/construído em Java.

    Dernière modification le 1610271300000
    Hydroper
    « Citoyen »
    1610282280000
      • Hydroper#0528
      • Profil
      • Derniers messages
      • Tribu
    #3
      0
    Essa sugestão não tem nada haver com o uso de Node.js. Acontece que V8 suporta módulos introduzidos no ES2015 (import e export), e a resolução dos scripts importados vai de acordo com o que embute o script parente (o servidor Java).

    Edit: pelo jeito módulos não são suportados pelo J2V8. Referência. Mas dá para suportar source maps e utilizar um source bundler (coisa que não se vê em Lua).

    Edit²: Não faço ideia se source maps são suportados.

    Dernière modification le 1610282700000
    Gamedroit
    « Citoyen »
    1610348820000
      • Gamedroit#3347
      • Profil
      • Derniers messages
      • Tribu
    #4
      0
    Hydroper a dit :
    Essa sugestão não tem nada haver com o uso de Node.js. Acontece que V8 suporta módulos introduzidos no ES2015 (import e export), e a resolução dos scripts importados vai de acordo com o que embute o script parente (o servidor Java).

    Edit: pelo jeito módulos não são suportados pelo J2V8. Referência. Mas dá para suportar source maps e utilizar um source bundler (coisa que não se vê em Lua).

    Edit²: Não faço ideia se source maps são suportados.

    Ou seja, coisa que não tem utilidade em uma simples API para desenvolvimento de minigames. Cara, tudo pode ser adaptado ao Lua, é uma linguagem simples com uma API em C simples que permite criar qualquer biblioteca necessária para alcançar seus objetivos. Eu já fiz webview para Lua, minha própria versão do SDL para Lua, uma biblioteca socket (only windows) para Lua, uma biblioteca SQLite3 para Lua. Ainda por cima a linguagem Lua é recheada de surpresas, você sabia que, por exemplo, com debug.setmetatable você pode alterar o comportamento dos números? (Não sei se funciona com LuaJIT, a versão atual da API do Mice, mas no Lua original ele funciona). E se você precisa de uma classe em Lua, bem, você tem 2 jeitos de se fazer que é com metatable e function.
    Um exemplo com metatable

    Code Lua

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    local player = {}
    player.__index = myClass

    function player.new(pname)
    local this = setmetatable({
    -- Você pode definir os valores da instância aqui
    name = pname,
    age = 0
    }, player)
    -- ou aqui
    --this.name = pname
    return this
    end

    -- Há duas maneiras de definir métodos, a primeira é uma função que recebe o Objeto[Tabela, Instância] e seus argumentos
    function player.setName(this, name)
    this.name = name
    end

    -- A segunda maneira self é definido pelo próprio Lua como objeto, então você somente precisa receber os argumentos
    function player:setAge(age)
    -- neste caso self sempre estará disponível no escopo da função então preste atenção se a função usa class.name ou class:name em sua definição
    self.age = age
    end

    -- Aqui uma demonstração da instância
    -- Como estamos usando somente um argumento e ele é do tipo string (vale para tabelas também) você não precisa colocar parênteses
    local data = player.new"Hello#0000"
    data:setName"Contistente#0000"
    data:setAge(17)
    print(data.name, data.age)
    -- O mais interessante é não precisar de um getter, se você atualizar os dados através de funções basta imprimir o resultado, mas claro por ser metatabela você pode modificar o getter do próprio lua

    e agora um exemplo com função

    Code Lua

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    local function player(pname)
    local this = {name=pname,age=0}

    function this.setName(name)
    this.name = name
    end

    function this.setAge(age)
    this.age = age
    end

    return this
    end

    -- Neste você não pode chamar com : a não ser que seja metatabela
    local data = player"Hello#0000"
    data.setName"Contistente#0000"
    data.setAge(17)
    print(data.name, data.age)

    Qual você vai usar depende do gosto.


    Aliás, Lua tem potencial para ser uma linguagem poderosa, ela só não te dá tudo de mão beijada. Os anos que passei aprendendo Lua eu também juntei diversos módulos e até criei alguns, no final eu tenho uma biblioteca de módulos Lua que dá suporte a zlib, arquivos ini, json, iteração com strings, extensão para math (contêm uma função extra que ajuda a melhorar a randomização do math.random), string e table, struct e xml, também não poderia deixar de lado sql, sockets, bitwise (versão modificada do Lua 5.1 que eu fiz com um parceiro), webview, sdl, tem até uma biblioteca que eu mesmo fiz antigamente para importar os tipos comuns do C no Lua, podendo usar C.Float, C.Double, C.Long, C.Int, C.Int64, C.Int32, C.Char, C.setval, C.getval.


    Enfim, os prós do Lua é sua incrível flexibilidade e portabilidade, é muito fácil fazer qualquer coisa com Lua e é uma linguagem com um bom collectgarbage, dificilmente um programa Lua vai pesar sua memória para processar os dados. Também gosto do conceito de "stack" por trás de como a linguagem funciona, todas as informações da linguagem são empilhadas. E se isso não é suficiente para você, acesse o site original que detalha mais alguns prós da linguagem: https://www.lua.org/portugues.html

    PS: Não julgue a linguagem através do TFM, se você nunca baixou um binário para rodar Lua no windows ou ao menos tentou compilar através do gcc não pode dizer que a linguagem não é boa. O TFM utiliza uma versão não oficial do Lua chamada Lua Just-In-Time (JIT) que mixa as versões 5.1 e 5.2 do Lua além de trazer algumas ferramentas poderosas porém é uma versão desatualizada, o Lua hoje em dia está na versão 5.4 que já contêm até mesmo operadores bitwise, melhorias de algoritmo...

    Dernière modification le 1610349780000
    Hydroper
    « Citoyen »
    1610372880000
      • Hydroper#0528
      • Profil
      • Derniers messages
      • Tribu
    #5
      0
    Já baixei sim binário e até já experimentei com C/C++ em 2016. Já criei uma hierarquia de UI pro TFM: TextAreaShop. Eu sei mais do que você diz. Já fiz parte de editores de mapas (esses aí são de 2015 e outros de 2016, mas enviei em 2018 no MediaFire; inclusive tenho esse tópico de 2015). Já testei HTML5 em 2015-2016. Outra coisa aqui, experimento com PHP e AS3 enviado em 2015 no Youtube. Já mexi com XMLHttpRequest e URLRequest de AS3 em 2015-2016, criando meu próprio wrapper. Já fiz um fórum scratch usando PHP e MySQL no final de 2014, utilizando XAMPP para execução local e hospedagem do Hostinger.

    Agora, nunca quis usar WebKit através Lua/C. Já experimentei com SFML no C++ e já vi Love2D no Lua.

    JavaScript é muito mais prático e é simples, e ao invés do C++ eu prefiro Rust (experimentei, mas nunca usei). Porém ultimamente, desde 2017, trabalhei no ShockScript (ft. exemplo), meu própria variante de JS, que infelizmente não vai gerar código ainda, já que não tenho certeza de que trabalharei em finalizar o compilador, pois acabei deletando o streaming de WASM. Mesmo assim WebAssembly ainda não suporta reference types, então prefiro esperar o W3C resolver algumas coisas.

    Se estiver curioso, essas são as sources do compilador. Ele só não gera código, mas reporta errors/warnings. Essa linguagem adota poucas coisas do inexistente ECMAScript 4 (pouco mesmo), e os únicos tipos numéricos são Number, BigInt e Char.

    sxc --includeSources Exemplo.sx --includeSources pastaComSources.

    Como se vê, a linguagem ganhou um symbol solver, com inferência básica de tipo nos variable bindings. O primeiro symbol solver foi feito em 2019, teve que passar por bug fixing, mudança e simplificação de features.

    I a dit :

    NOTA

    Já tive nicknames como Caiolopelopes (quando pedi meu irmão p/ criar uma conta no Orkut em 2011, ele deu isso de nome, mas sou Matheus), Klaider, Recoyx, Hydroper, Animex Kai e HandOnCloud.


    Dernière modification le 1610377800000
    Gamedroit
    « Citoyen »
    1610382780000
      • Gamedroit#3347
      • Profil
      • Derniers messages
      • Tribu
    #6
      0
    Hydroper a dit :
    Já baixei sim binário e até já experimentei com C/C++ em 2016. Já criei uma hierarquia de UI pro TFM: TextAreaShop. Eu sei mais do que você diz. Já fiz parte de editores de mapas (esses aí são de 2015 e outros de 2016, mas enviei em 2018 no MediaFire; inclusive tenho esse tópico de 2015). Já testei HTML5 em 2015-2016. Outra coisa aqui, experimento com PHP e AS3 enviado em 2015 no Youtube. Já mexi com XMLHttpRequest e URLRequest de AS3 em 2015-2016, criando meu próprio wrapper. Já fiz um fórum scratch usando PHP e MySQL no final de 2014, utilizando XAMPP para execução local e hospedagem do Hostinger.

    Agora, nunca quis usar WebKit através Lua/C. Já experimentei com SFML no C++ e já vi Love2D no Lua.

    JavaScript é muito mais prático e é simples, e ao invés do C++ eu prefiro Rust (experimentei, mas nunca usei). Porém ultimamente, desde 2017, trabalhei no ShockScript (ft. exemplo), meu própria variante de JS, que infelizmente não vai gerar código ainda, já que não tenho certeza de que trabalharei em finalizar o compilador, pois acabei deletando o streaming de WASM. Mesmo assim WebAssembly ainda não suporta reference types, então prefiro esperar o W3C resolver algumas coisas.

    Se estiver curioso, essas são as sources do compilador. Ele só não gera código, mas reporta errors/warnings. Essa linguagem adota poucas coisas do inexistente ECMAScript 4 (pouco mesmo), e os únicos tipos numéricos são Number, BigInt e Char.

    sxc --includeSources Exemplo.sx --includeSources pastaComSources.

    Como se vê, a linguagem ganhou um symbol solver, com inferência básica de tipo nos variable bindings. O primeiro symbol solver foi feito em 2019, teve que passar por bug fixing, mudança e simplificação de features.

    I a dit :

    NOTA

    Já tive nicknames como Caiolopelopes (quando pedi meu irmão p/ criar uma conta no Orkut em 2011, ele deu isso de nome, mas sou Matheus), Klaider, Recoyx, Hydroper, Animex Kai e HandOnCloud.



    Hm, eu e meu team mate estamos desenvolvendo uma linguagem em Go, ela adota 19 tipos(apesar disso não será fortemente tipada, você vai poder escolher entre definir uma variável multi-type ou uma variável tipada), spread operator, bitwise operator, arrow functions... Em vez de usar uma linguagem como base para interpretar nós criamos nosso Lexer, Parser e AST

    Dernière modification le 1610386740000
    Hydroper
    « Citoyen »
    1610384280000
      • Hydroper#0528
      • Profil
      • Derniers messages
      • Tribu
    #7
      0
    Contistente3 a dit :
    Hydroper a dit :
    Já baixei sim binário e até já experimentei com C/C++ em 2016. Já criei uma hierarquia de UI pro TFM: TextAreaShop. Eu sei mais do que você diz. Já fiz parte de editores de mapas (esses aí são de 2015 e outros de 2016, mas enviei em 2018 no MediaFire; inclusive tenho esse tópico de 2015). Já testei HTML5 em 2015-2016. Outra coisa aqui, experimento com PHP e AS3 enviado em 2015 no Youtube. Já mexi com XMLHttpRequest e URLRequest de AS3 em 2015-2016, criando meu próprio wrapper. Já fiz um fórum scratch usando PHP e MySQL no final de 2014, utilizando XAMPP para execução local e hospedagem do Hostinger.

    Agora, nunca quis usar WebKit através Lua/C. Já experimentei com SFML no C++ e já vi Love2D no Lua.

    JavaScript é muito mais prático e é simples, e ao invés do C++ eu prefiro Rust (experimentei, mas nunca usei). Porém ultimamente, desde 2017, trabalhei no ShockScript (ft. exemplo), meu própria variante de JS, que infelizmente não vai gerar código ainda, já que não tenho certeza de que trabalharei em finalizar o compilador, pois acabei deletando o streaming de WASM. Mesmo assim WebAssembly ainda não suporta reference types, então prefiro esperar o W3C resolver algumas coisas.

    Se estiver curioso, essas são as sources do compilador. Ele só não gera código, mas reporta errors/warnings. Essa linguagem adota poucas coisas do inexistente ECMAScript 4 (pouco mesmo), e os únicos tipos numéricos são Number, BigInt e Char.

    sxc --includeSources Exemplo.sx --includeSources pastaComSources.

    Como se vê, a linguagem ganhou um symbol solver, com inferência básica de tipo nos variable bindings. O primeiro symbol solver foi feito em 2019, teve que passar por bug fixing, mudança e simplificação de features.

    I a dit :

    NOTA

    Já tive nicknames como Caiolopelopes (quando pedi meu irmão p/ criar uma conta no Orkut em 2011, ele deu isso de nome, mas sou Matheus), Klaider, Recoyx, Hydroper, Animex Kai e HandOnCloud.



    Hm, eu e meu team mate estamos desenvolvendo uma linguagem em Go, ela adota 19 tipos(apesar disto não sera fortemente tipada, você vai poder escolher entre definir uma variável multi-type ou uma variável tipada), spread operator, bitwise operator, arrow functions... Em vez de usar uma linguagem como base para interpretar nós criamos nosso Lexer, Parser e AST

    ShockScript também suporta any, no qual toda propriedade é resolvida no runtime.

    https://i.imgur.com/hz0IjCx.png

    Um pouco antes ShockScript iria ter tipo estrutural de funções:

    https://i.imgur.com/QqexKeP.png

    Porém quando eu estava nessa ideia eu estava querendo que, como dialeto do ECMAScript, a linguagem não tivesse reflexão, mas agora vai ter, e por mim tornou inútil esse tipo estrutural de funções. Agora seria apenas um desses:

    https://i.imgur.com/bppgPt9.png

    Como demonstrado aqui, undefined, String ou Array literal automaticamente converte para enumeração, usando limitação de tipo.

    https://i.imgur.com/ioYBM6a.png

    O único tipo estrutural que vai ter são tuples:

    https://i.imgur.com/XQoTZIi.png

    Sobre a síntaxe, semicolons é a mesma coisa do ECMAScript: opcionais. E no geral não tem problema omitir semicolons no ShockScript, comparado ao ECMAScript: eles são automaticamente inseridos conforme a indentação do código.

    Tipos nuláveis (incluem undefined e null num tipo existente):

    https://i.imgur.com/HsHXtdV.png

    A linguagem também suporta uma classe Observable.<T>, cuja referência é utilizada como se fosse T e, quando assignada com um novo valor, dispara os listeners do Observable.

    Classes primitivas e classes uniões são imutáveis e representadas diretamente na memória (unboxed, binding o:C) ou indiretamente (boxed como referência any ou Object, binding o:* ou o:Object).

    Eu também gosto da aparência do VBScript, mas VBScript é uma linguagem em que falta coisa. No momento vou mais usar JavaScript e deixar ShockScript sem codegen (a coisa não tem Language Specification, está tudo comigo).

    Dernière modification le 1610405520000
    Gamedroit
    « Citoyen »
    1610407080000
      • Gamedroit#3347
      • Profil
      • Derniers messages
      • Tribu
    #8
      0
    Bom, parece que esta sugestão acabou virando uma discussão, se quiser conversar é só chamar.
    Mesmo assim essas são as ideias utilizadas para formar minha linguagem de programação que estou fazendo com meu amigo:
    https://i.imgur.com/kqaR4ba.png
    https://i.imgur.com/NW1UbNP.png

    Nossas ideias veio de diversas linguagens que estudamos juntos e tem muito mais ainda, nos inspiramos no Lua para a nossa linguagem então também usamos um sistema de empilhamento e terá uma API para desenvolvimento de bibliotecas. A ideia da nossa linguagem é ter um ambiente poderoso de desenvolvimento que permite flexibilidade assim como o Lua mas que também é voltado para Ciência dos Dados.

    Dernière modification le 1610415780000
    Jon
    « Consul »
    1610412360000
      • Jon#9169
      • Profil
      • Derniers messages
    #9
      1
    Sou contra diante das informações que o Contistente3 apresentou. São mais pontos negativos do que positivos
    • Forums
    • /
    • Transformice
    • /
    • Archives
    • /
    • Seção Sugestões
    • /
    • [Jogo] JavaScript
    © Atelier801 2018

    Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

    Version 1.27