C++ ou Java para Jogos, por que?

[quote=Guma]eu fis questao de apresenta l2java (lineage com base em java ) pq to abrindo um projeto (um rev l2jBrasil) http://www.l2jbrasil.com/ (<<-- somente arquivos para lineage e servidores , nao to divulgando!)
e eu tava procurando um forum como esse pois a maiorias das coisas em si (como bugs no server) teria q mexer no java(core) entao estou aki pra aprender mas e mas … to dano uma olhada no forum mas nao tem nada parecido com isso … seria mas uns novos codigos a ser estudado …
quem sabe eu consiga aprender algo com voces.[/quote]

Com relação a Jogos especificamente nao tera muita coisa, porem como tu vai montar um server, e neste caso a coisa nao é o grafico, mas muita coisa de rede, protocolos, sockets e etc, podes crer que neste forum vai encontrar tudo que precisa.

o q irei compartilhar e “criar” duvidar sao mas
de assuntos java… talves um poko de xml,sql,e html

e tem tudo aki xD

[quote=Thiagosc]Esse pessoal deveria ter mais respeito com os usuários do forum. É realmente necessário rodar a baiana toda vez que alguém diz algo que você não gosta? Uma certa maturidade ajuda. Respostinhas engraçadinhas tipo “no seu mundo” ou “primeiro aprende isso e depois fala comigo” são o quê?

Pelo visto eu tenho mais conhecimento do que vocês dois juntos. Com simples questões eu poderia ter dado esses links para o jogo do PS2 e a utilização de Lisp no mundo real sem problema algum.

Sinceramente, esse forum está um lixo porque os moderadores não sabem se comportar feito gente grande. O pessoal aqui é mais sensível do que menininha de 8 anos de idade.[/quote]

Você é um sem noção mesmo. Um ps2 não é um dispositivo embarcado (Apesar de poder embarcar um unix kernel). Ele não tem um microcontrolador e sim um processador muito mais poderoso que um pentium 4 para gráficos. Quem começou a agredir as pessoas aqui foi você.



http://www.eserviceinfo.com/index.php?what=search2&searchstring=Play+Station+2

Existe uma derivação de lisp que é usada em sistemas embarcados chamada L. Mas não chega nem a 20% do total que é desenvolvido hoje. A maioria das empresas automobilísticas, aeronáuticas, e aeroespaciais ainda usam c++, apesar do lisp possuir uma forte indicação para IA. A resposta é um compilador que gera código enxuto e robusto, e não a linguagem de programação.

Sobre o conhecimento maior, é melhor você trocar o nome para Ser Superior.

[quote=Thiagosc][quote=juliocbq]
de certo inventaram interpretadores lisp para pics 16fxx e não estamos sabendo. E olha que esses pics variam entre 1k e 8k de memória. Esse interpretador deve ser único mesmo.[/quote]

Lisp compila para código nativo. Você sabe como funciona um compilador? Sobre esse pics eu não sei, mas a sua resposta é tosca demais. O que um interpretador tem a ver com isso?

Se quer discutir se atenha aos fatos.[/quote]

Cara, lisp é interpretado, apesar de poder compilar nativo.

Você tá falando muita besteira. Não vou discutir mais não.

http://www.taikodom.com.br/

E outra 100% brasileiro.

Eu vi la o L2J, mas parece ser somente o server side.

Agora abrindo outro ponto nesta discussao, até aqui se falou mais no java como cliente, ou seja DirectX, OpenGL, 3D e ect, mas e o server side? Neste caso teria alguma vantagem/desvantagem em se usar java? Como o Guma citou e dei uma pesquisadinha e achei esse L2j, um servidor alternativo para o Lineage. Neste caso, toda a discussao de acesso nativo e etc, ja nao faz muito sentido.[/quote]

O servidor tem que aguentar acesso, então deve ter boa performance, já que terá também de rodar full time. Mas como temos exemplos como jboss e outros containers, creio que só java resolve sem problemas.

O caso da biblioteca gráfica(opengl, ditect3d…) diz respeito somente a aceleração de vídeo no hardware.

Eu fiz pós graduação com alguns programadores da Hoplon e eles me falaram que o servidor iniciou com muito C++, mas foi gradualmente sendo substituído para Java. Inclusive, tiveram grandes ganhos ao trocar a Torque, por uma engine própria.

Isso não é mérito só do Java. Na verdade, muita coisa foi reescrita para se adaptar ao jogo. Por exemplo, a torque era uma engine pesada demais para física espacial, que basicamente é a física newtoniada aprendida no segundo grau (sem resistência do ar, terreno, etc). Como as armas são lasers, não precisariam calcular impacto dos tiros na nave. E as naves também não colidem entre si…

Mas acho que para servidores, especialmente num MMO, o Java é uma ótima linguagem. Tem boa performance e escalabilidade. O MMO ainda admite atrasos, o que faz desaparecer o inconveniente da execução do GC.

Se eu fosse fazer um jogo assim, pensaria com carinho na possibilidade de ter um server Java, e um cliente C++.

Projetos como l2java e aionemu são emulações dos servidores oficiais, feitas em Java. Até onde eu sei, nenhum deles ainda tem a escalabilidade de um servidor oficial.

O java está ficando para trás. Depois de ter visto ruby, groovy e scala, não consigo mais engolir o java. Só faço as coisas em java se não houver outra forma. Uma linguagem que me chama muito a atenção é o scala. E apesar de todas as features que a linguagem tem, a performance é muito parecida com a do java, chegando a ser mais rápida em alguns casos. Um link legal: Scala as the long term replacement for java/javac?

Se eu fosse fazer um jogo assim, faria o server-side em scala e o client em c++ (se eu soubesse c++, é claro).

Ah, e eu não queria estragar a festa (está bem legal), mas o thiagosc é o cv disfarçado. Pelo menos é o que está aqui: http://www.guj.com.br/posts/list/30/81094.java#432530
Ou então ele e o Calçado chegaram em um acordo e estão os dois aí brincando. :smiley:

Olá,

[quote=juliocbq]
Com o lisp eu concordo em partes. Pena que o compilador do lisp não chegue nem na poeira do que é um compilador de c++. Lisp é restrito a apenas algumas aplicações. Comum em projetos de IA como Prolog.[/quote]

Não compreendo essa de lisp ser “restrita a algumas aplicações” já que sempre foi uma linguagem de propósito geral. Inclusive minha aplicação (procure por Flightweets na appstore) possui o backend todo em lisp. Que eu saiba programação web não tem nada de IA.

Um pouco de história…
Lisp sempre foi laboratório para experimentação de novas idéias que depois são incorporadas em linguagens mainstream. Assim foi com if-then-else, garbage collector, OO, etc. Hoje em dia, com versões modernas de Lisp que compilam para a JVM, temos a disposição recursos bem sofisticados (como suporte a programação multi-core, programação funcional com estruturas de dados persistentes, programação assíncrona com sistema de agentes, pra citar alguns…) que linguagens como Java (pra não dizer C++) nem sonham em ter, a não ser por meio de um fork no design da linguagem, ou em outras palavras, nascendo de novo!

Portanto não sei o que está mais defasado, se é sua afirmação de que “lisp é para inteligência artificial” (faz tempo que não ouço falar no termo inteligência artificial) ou usar C++ para criar alguma coisa em pleno 2010.

Aliás, como esse é o tema do tópico, eu realmente gostaria de saber. Qual o argumento de se usar C++ hoje em dia? sistemas embarcados? Tem certeza que não estão confundindo com C (pra deixar claro, C e C++ são coisas completamente diferentes)? Programação de Jogos? Tem certeza que Java não é suficiente em ambientes que requer alta performance? Apenas curiosidade…

Se fossemos descontar os sistemas legado, minha impressão é que se a linguagem sumisse da face da terra hoje acho que ninguém sentiria falta de C++ em novos projetos de software.

[quote=cmoscoso]Olá,

[quote=juliocbq]
Com o lisp eu concordo em partes. Pena que o compilador do lisp não chegue nem na poeira do que é um compilador de c++. Lisp é restrito a apenas algumas aplicações. Comum em projetos de IA como Prolog.[/quote]

Não compreendo essa de lisp ser “restrita a algumas aplicações” já que sempre foi uma linguagem de propósito geral. Inclusive minha aplicação (procure por Flightweets na appstore) possui o backend todo em lisp. Que eu saiba programação web não tem nada de IA.

Um pouco de história…
Lisp sempre foi laboratório para experimentação de novas idéias que depois são incorporadas em linguagens mainstream. Assim foi com if-then-else, garbage collector, OO, etc. Hoje em dia, com versões modernas de Lisp que compilam para a JVM, temos a disposição recursos bem sofisticados (como suporte a programação multi-core, programação funcional com estruturas de dados persistentes, programação assíncrona com sistema de agentes, pra citar alguns…) que linguagens como Java (pra não dizer C++) nem sonham em ter, a não ser por meio de um fork no design da linguagem, ou em outras palavras, nascendo de novo!

Portanto não sei o que está mais defasado, se é sua afirmação de que “lisp é para inteligência artificial” (faz tempo que não ouço falar no termo inteligência artificial) ou usar C++ para criar alguma coisa em pleno 2010.

Aliás, como esse é o tema do tópico, eu realmente gostaria de saber. Qual o argumento de se usar C++ hoje em dia? sistemas embarcados? Tem certeza que não estão confundindo com C (pra deixar claro, C e C++ são coisas completamente diferentes)? Programação de Jogos? Tem certeza que Java não é suficiente em ambientes que requer alta performance? Apenas curiosidade…

Se fossemos descontar os sistemas legado, minha impressão é que se a linguagem sumisse da face da terra hoje acho que ninguém sentiria falta de C++ em novos projetos de software.[/quote]

Se c++ sumisse da face da terra você nem ligaria seu pc, isso em pleno 2010. Onde estão os sistemas operacionais java e dotnet que se estavam pesquisando?

A Microsoft tentou o vista e posteriormente o singularity. Vista tinha 30% das aplicações .net e hoje não tem 10% delas, em se falar do win seven, que não tem 5%. A culpa, é a perda de performance.
Java tem somente estudos de sistemas operacionais, nenhum levado como projeto sério pelos pesquisadores.
Lisp não tem nenhum…

Se falando de jogos, as únicas bibliotecas gráficas que existem são c++. Opengl para sistemas unix(Isso inclui o SO do Imac), e directx para windows. Como você desenvolve jogos sem usar c++ então?

Sobre sistemas embarcados com linux, dá para se programar com qualquer linguagem, desde que possua compilador para plataforma. Existem dezenas de compiladores c++, c, basic, pascal para isso, e somente um lisp, que normalmente é usado para inteligência de máquina em mecatrônica, e mais em nenhum tipo de projeto.

Tem o android é que um linux com máquina virtual java.
Mais uma vez lisp não se inclui em nenhum projeto do gênero.

O MIT usa lisp(Scheme) para projetos na área de IA, os demais projetos são c++ e c. Pergunte ao Stallman, que era físico do MIT.

http://groups.csail.mit.edu/mac/projects/scheme/

Detalhe, c++ é uma extensão do c, assim como c++0x é extensão do c++. Não são coisas completamente diferentes.

Parece até um fake do thiagosc.

E pensar que aqui já foi um local para discussões de alto nivel, uma pena que o GUJ tenha chegado a esse nível com usuários que só sabem fazer ataques pessoais e se acham o rei citando links de 2003.

[quote=cmoscoso][quote=juliocbq]
O MIT usa lisp(Scheme) para projetos na área de IA, os demais projetos são c++ e c. Pergunte ao Stallman, que era físico do MIT.

http://groups.csail.mit.edu/mac/projects/scheme/

Detalhe, c++ é uma extensão do c, assim como c++0x é extensão do c++. Não são coisas completamente diferentes.

Parece até um fake do thiagosc.
[/quote]

E pensar que aqui já foi um local para discussões de alto nivel, uma pena que o GUJ tenha chegado a esse nível com usuários que só sabem fazer ataques pessoais e se acham o rei citando links de 2003.[/quote]

e você que nem tem link para mostrar.
Você por acaso tem idéia do que é o MIT? De certo não.

Na verdade, o C++ é uma das linguagens mais utilizadas, mesmo atualmente!!

Em que linguagem você acha que foi desenvolvido, por exemplo, seu navegador de internet? Ou todos os jogos do mercado? Ou aplicativos como Corel e Photoshop? Ou a sua virtual machine? Garanto que não foram em Lisp e, muito provavelmente, também não em Java.

E existem centenas de argumentos para não utiliza-lo no lugar do C. Há começar pelo fato de ser orientado a objetos, de suportar templates, de ter centenas de milhares de APIs completas para tudo o que você possa sonhar.

Em aplicações de tempo real há motivos para usa-lo no lugar de qualquer linguagem managed (como java e C#), como é o caso dos jogos. Jogos são um sistema de tempo de real, onde o tempo de processamento entre frames é muito pequeno. Uma pausa do garbage collector será notada pelo jogador.

Talvez você não tenha ouvido falar em IA porque não é seu nicho. Mas eu tenho que ver alguma coisa de IA praticamente todo ano, e não é só para os jogos.

Uma coisa que ocorre muito no GUJ é uma generalização. Java é uma linguagem forte na web e, se você trabalhar nela, as chances são grandes que você só atue nesse nicho. Nem por isso, esse nicho é o único. Há nichos enormes fora da web, seja no mercado de sistemas operacionais, aplicações para indústria ou engenharia, centros de pesquisa, e até mesmo jogos, e o C++ está presente nesse mercado, com muita força, em pleno 2010.

Aliás, mesmo no Brasil, o cpp tem uma comunidade de usuários tão grande quanto o GUJ. Eu mesmo participo de uma lista de discussão com milhares de programadores. Com blogs na web publicados, dá para citar o Wanderlei Caloni e o Rodrigo Strauss, nenhum deles atuante no mercado de jogos.

Só um último argumento. Citemos uma pequena e desconhecida empresa de jogos chamada Eletrocnic Arts. Para ela, o C++ é tão importante que eles fizeram uma versão própria da STL. Para quem não sabe, a STL é a biblioteca padrão do C++, onde estão classes como vector e map (muita gente que vem descer a lenha no C++ em tópicos como esse, muitas vezes nem sabe que ela existe).

Pois bem, a EA implementou uma versão própria da STL, especialmente feita para jogos:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

Note que os papers são recentes (2007).

Na verdade, o C++ também está fortemente presente no mercado porque as empresas de console vendem justamente diferenciação de hardware. E, nos mercados onde essa diferenciação é crucial, o C++ cai como uma luva.

Veja bem, a Nintendo, Sony e MS não terão o menor interesse em fazer uma VM que unifique os consoles numa plataforma padrão. Isso nem sequer faz sentido, pois iria contra o próprio negócio deles, que é vender um hardware diferenciado.

Eles poderiam então, fornecer VMs não padrão, não portáveis, o que já cai em contradição com o próprio conceito do Java. Ou podem usar o C++. Assim os engenheiros podem fazer APIs facilmente, mesmo que sejam em C, em conjunto com um ambiente para desenvolvimento facilmente montado com um compilador poderoso, baseado em C++.

Alguns outros mercados, como o de engenharia de telecomunicações, também seguem esse conceito (embora o de telecom realmente esteja migrando para softswitchs, que podem eventualmente virar máquinas rodando Java).

No C++, também pode-se dar mais garantias para sistemas de tempo real, ou para aplicações para indústria nuclear. Pelo contrato do Java, você não pode desenvolver aplicações nessas condições:

quote=“sun” You acknowledge that Licensed Software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility. Sun Microsystems, Inc. disclaims any express or implied warranty of fitness for such uses.[/quote] (Fonte: Java license)

Mas, realmente, o Java fornece ferramentas fantásticas para otimização. E isso torna desenvolver aplicações java de boa performance muito mais fácil do que em C++. Acho que performance só é um argumento em indústrias que estão realmente dispostas a investir nisso, como é o caso das engenharias e dos jogos. Para a absurda maior parte das aplicações comerciais, eu não citaria esse fato como um argumento para se preferir java no lugar de C++.

Na verdade, o C++ também está fortemente presente no mercado porque as empresas de console vendem justamente diferenciação de hardware. E, nos mercados onde essa diferenciação é crucial, o C++ cai como uma luva.

Veja bem, a Nintendo, Sony e MS não terão o menor interesse em fazer uma VM que unifique os consoles numa plataforma padrão. Isso nem sequer faz sentido, pois iria contra o próprio negócio deles, que é vender um hardware diferenciado.

Eles poderiam então, fornecer VMs não padrão, não portáveis, o que já cai em contradição com o próprio conceito do Java. Ou podem usar o C++. Assim os engenheiros podem fazer APIs facilmente, mesmo que sejam em C, em conjunto com um ambiente para desenvolvimento facilmente montado com um compilador poderoso, baseado em C++.

Alguns outros mercados, como o de engenharia de telecomunicações, também seguem esse conceito (embora o de telecom realmente esteja migrando para softswitchs, que podem eventualmente virar máquinas rodando Java).

No C++, também pode-se dar mais garantias para sistemas de tempo real, ou para aplicações para indústria nuclear. Pelo contrato do Java, você não pode desenvolver aplicações nessas condições:

quote=“sun” You acknowledge that Licensed Software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility. Sun Microsystems, Inc. disclaims any express or implied warranty of fitness for such uses.[/quote] (Fonte: Java license)

Mas, realmente, o Java fornece ferramentas fantásticas para otimização. E isso torna desenvolver aplicações java de boa performance muito mais fácil do que em C++. Acho que performance só é um argumento em indústrias que estão realmente dispostas a investir nisso, como é o caso das engenharias e dos jogos. Para a absurda maior parte das aplicações comerciais, eu não citaria esse fato como um argumento para se preferir java no lugar de C++.
[/quote]

Além de que, as ferramentas java são gratuitas. Existe um investimento muito grande em ferramentas como netbeans. O custo para se desenvolver com java é bem menor.

Acho que a questão não é se existe alguma empresa usando cpp. Claro que existe. Se bobear tem empresa que ainda usa cartao pefurado!

Mas será que existe algum motivo pra alguém COMECAR um negocio baseado em cpp? Senão boa sorte pra tentar entrar na EA.

[quote=ViniGodoy]Só um último argumento. Citemos uma pequena e desconhecida empresa de jogos chamada Eletrocnic Arts. Para ela, o C++ é tão importante que eles fizeram uma versão própria da STL. Para quem não sabe, a STL é a biblioteca padrão do C++, onde estão classes como vector e map (muita gente que vem descer a lenha no C++ em tópicos como esse, muitas vezes nem sabe que ela existe).

Pois bem, a EA implementou uma versão própria da STL, especialmente feita para jogos:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

Note que os papers são recentes (2007). [/quote]

ou então pq cpp na sua forma padrão não lhe caiu como uma luva.

Mas boa sorte pra quem for fazer o mesmo na sua startup.

[quote=mochuara]Acho que a questão não é se existe alguma empresa usando cpp. Claro que existe. Se bobear tem empresa que ainda usa cartao pefurado!

Mas será que existe algum motivo pra alguém COMECAR um negocio baseado em cpp? Senão boa sorte pra tentar entrar na EA.[/quote]
Bom…a Blizzard está ae sempre com produtos novos em cpp.