Jump to content
triplexim32

multiplataforma ?

Recommended Posts

triplexim32

Quais as linguagens de programação que teem suporte para gerar binários para os sistemas mais conhecidos (mac osx, windows, linux)

em que possa considerar multi-plataforma sendo q esses binários são possíveis de correr nativamente em qualquer sistema operativo sem um "emulador".

Ou seja: eu quero saber que linguagem escolher para criar uma aplicação multi-plataforma mas que não necessite re recorrer a wine e afins.

Tipo: duplo click no ficheiro e ta pronto a executar.

Sei que tenho q compilar 3 vezes, mas isso nao é problema


<

Share this post


Link to post
Share on other sites
Knitter

Java e Python são possivelmente as que menos trabalho dão com as diferenças entre plataformas, isto é, as que menos deves tocar no código para executar em várias plataformas.

C e C++ podem ser compiladas para as plataformas que mencionas mas precisarás recorrer a compilação condicional para teres código que é compilado num caso e código que é compilado noutro, especialmente se quiseres executar a aplicação em OS X, onde as diferenças se fazem notar mais.

Share this post


Link to post
Share on other sites
mjamado

C++ é a escolha mais in-your-face; afinal, é nessa linguagem que os sistemas operativos são feitos.

Mas, como disse o Knitter, compilar C++ de modo cross-platform pode doer mais que um soco nas beiças. No entanto, é aí que entram algumas frameworks, como por exemplo (e também é a única que conheço e que uso), a QT Framework.

Fazes a tua aplicação uma vez, compilas num Windows, num MacOS e num Linux, bang, já está.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
triplexim32

Obrigado  malta  :)

So uma questão:

A compilação do código de C e de C++ fica em assembly tal como fica o delphi?

Ou há alguma maneira de obfuscar C e C++?

Delphi não é multiplataforma?


<

Share this post


Link to post
Share on other sites
Knitter

Quase. Especialmente se é para Mac OS X.

Este foi um problema onde bati, e bato muitas vezes, com aplicações feitas em C/C++, mesmo que usem outras frameworks, é que as diferenças no OS X afectam mais que no caso de GNU Linux VS Windows. No caso mais simples, vais precisar de directivas de pré-processamento para indicar todo os teus includes porque a localização e o nome dos ficheiros a incluir, em OS X, é diferente do resto.

Depois há toda a questão das bibliotecas existirem ou não no computador destino, se em GNU Linux é simples usar bibliotecas partilhadas e deixar o gestor de pacotes resolver as diferenças, em OS X, tal como em Windows, não há gestor de pacotes o que implica teres um sistema de criação de binários que tenha isso em conta.

Linguagens que, à partida, seja compiladas para várias plataformas têm estes problemas, além de ser preciso teres uma máquina com o sistema operativo em questão para poderes compilar. Cross compiling não é uma grande opção.

As linguagens que te evitam mais problemas são mesmo as linguagens que sejam inicialmente interpretadas. Java, Python, e talvez C# na plataforma Mono são as que permitem programar e compilar uma vez para todos os sistemas já que não dependem do sistema operativo.

Ainda gostava de perceber a pancada que o pessoal tem com a dita "ofuscação", no fim é tudo assembly/código máquina e se tudo pode ser executado pela máquina então pode ser revertido. Se não querem que vejam o interior do vosso programa mudem de profissão.

Delphi não é multiplataforma mas podes tentar usar o projecto Lazarus, que é uma implementação que pretende ser compatível com Delphi e que usa FreePascal, mas em OS X a coisa anda muito atrasada, acaba por ser para GNU Linux e Windows.

EDIT:

Já agora, é mais simples se tiveres questões específicas, porque linguagens que podem ser usadas para várias plataformas há às carradas, tudo depende dos requisitos e do trabalho que queres ter.

Share this post


Link to post
Share on other sites
mjamado

Knitter, só para clarificar, com a Qt, tens de compilar nos SO certos. Não existe cross-compiling.

O que a framework faz é a abstracção da plataforma, e depois tem linkers e compiladores diferentes para cada plataforma, que te libertam do tal trabalho de andares com condições para os includes.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
Knitter

Não consegues compilar o QT com cross compiling? Por cross compiling estamos a falar de usar Windows para compilar uma aplicação para GNU Linux.

Os linkes e compiladores não resolvem o problema, são até parte do problema. Um exemplo simples, para Windows ou GNU Linux a seguinte inclusão estará correcta para frameworks instaladas no sistema/PATH: #include <GL/glew.h>

No entanto, para OS X, esta inclusão não está correcta, o nome da framework é diferente, passa a ser #include <GLUT.framework/Headers/glut.h>

Ora, isto é parte do código, se usares um caminho ou usares outro são dois caminhos diferentes, aqui terás de usar programação condicional e flags de compilação. Podes tentar contornar isto de várias maneiras mas não sei o que é pior, encher o código com #ifdef/ifndef ou se usar sistemas que permitam contornar esta situação.

Claro que este é um exemplo de uma framework específica, mas acontecem em muitas outras. Podem nunca passar pelo problema, eu acho que nunca tive um projecto onde não tivesse de passar por estas complicações :) .

Share this post


Link to post
Share on other sites
mjamado

Não consegues compilar o QT com cross compiling? Por cross compiling estamos a falar de usar Windows para compilar uma aplicação para GNU Linux.

Eu sei, e não, não consegues. Tens que instalar as três versões da framework, uma em cada OS.

Os linkes e compiladores não resolvem o problema, são até parte do problema. Um exemplo simples, para Windows ou GNU Linux a seguinte inclusão estará correcta para frameworks instaladas no sistema/PATH: #include <GL/glew.h>

No entanto, para OS X, esta inclusão não está correcta, o nome da framework é diferente, passa a ser #include <GLUT.framework/Headers/glut.h>

Era o que eu estava a tentar explicar: com a Qt, não usas essas bibliotecas - usas as específicas da própria Qt, que fazem o wrapping às nativas de cada OS.

É uma filosofia code once, compile everywhere. Resultou comigo...  :)


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
mjamado
O code once, compile everywhere que conheço acrescenta sempre um "if you can, MUAHAHAHAHAH!".

Like!  :)


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
kurayama

No entanto, para OS X, esta inclusão não está correcta, o nome da framework é diferente, passa a ser #include <GLUT.framework/Headers/glut.h>

Sim são diferentes, mas estás a incluir mal a lib

#include <GLUT/glut.h>

Em mac o que muda mais é os includes, porque de resto acho mais facil trabalhar com linux e mac do que windows.

Se queres multiplataforma aconselho ires para java ou um dos dialectos (jruby, jython, groovy, etc), acabas por ter menos problemas.

Só tem o mal das aplicações parecerem aliens em relacção ao resto do sistema operativo..

Share this post


Link to post
Share on other sites
IceBrain

Se queres multiplataforma aconselho ires para java ou um dos dialectos (jruby, jython, groovy, etc), acabas por ter menos problemas.

Só tem o mal das aplicações parecerem aliens em relacção ao resto do sistema operativo..

Eu estou a ler sobre Scala actualmente e parece-me uma linguagem muito decente. Funcional e POO integrados de forma limpa.

Segundo li, a UI mais "nativa" é a SWT, mas também já ouvi dizer que não é code once, run everywhere :)


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Share this post


Link to post
Share on other sites
useware

Só tem o mal das aplicações parecerem aliens em relacção ao resto do sistema operativo..

Em java tens o Eclipse SWT (http://en.wikipedia.org/wiki/Standard_Widget_Toolkit) que usa as bibliotecas GUI nativas de cada plataforma. Um exemplo é o IDE Eclipse que, pelo menos em windows, não parece nada alien em relação ao resto.

EDIT: Não tinha visto o post do IceBrain. Ainda estou a começar, mas tanto quanto sei é code once run everywhere.

Share this post


Link to post
Share on other sites
kurayama

Em mac costumam ficar estranhas, ja que não segue as Apple HIG, usa as do eclipse..

Eu referi java, mas não sou fã.. só uso aplicações nativas, e se não houver, vai cli :)

Share this post


Link to post
Share on other sites
IceBrain

Em java tens o Eclipse SWT (http://en.wikipedia.org/wiki/Standard_Widget_Toolkit) que usa as bibliotecas GUI nativas de cada plataforma. Um exemplo é o IDE Eclipse que, pelo menos em windows, não parece nada alien em relação ao resto.

EDIT: Não tinha visto o post do IceBrain. Ainda estou a começar, mas tanto quanto sei é code once run everywhere.

Ouvi dizer que tens que ter código específico para algumas plataformas, que nem tudo estava perfeitamente abstraído e que acabava por ser uma confusão. No #java não parecem ser fãs.


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Share this post


Link to post
Share on other sites
Knitter

SWT não é standard, e nem segue as ditas regras nativas, nunca vi uma aplicação SWT ser igual a uma nativa, seja em que sistema for, e acho as Swing bem mais parecidas com o SO.

De uma maneira ou de outra, se querem aplicações iguais a aplicações nativas têm de usar tecnologias nativas e esqueçam o multiplataforma. Ou é nativo ou é multiplataforma, os dois não se misturam, seja qual for a framework gráfica que usem.

Se querem igual a Mac têm de usar Cocoa e Objective-C.

Share this post


Link to post
Share on other sites
mjamado
De uma maneira ou de outra, se querem aplicações iguais a aplicações nativas têm de usar tecnologias nativas e esqueçam o multiplataforma. Ou é nativo ou é multiplataforma, os dois não se misturam, seja qual for a framework gráfica que usem.

Se querem igual a Mac têm de usar Cocoa e Objective-C.

Ou Qt. Vá lá, Knitter, já disse isto. Vai lá passear para o site do Qt, ou vê este post no meu site pessoal, e logo vês que é multiplataforma e nativo.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
IceBrain

Há bindings do Cocoa para outra linguagens. Python, Ruby e até Java, embora com a notícia recente da Apple ter deixado de investir na JVM para Mac não sei como é que isso está.


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Share this post


Link to post
Share on other sites
Knitter

Nativo, como compilado nativamente para a máquina sim, existem várias opções, o QT é uma delas. Nativo como com aspecto igual ao das aplicações da plataforma e com comportamento igual, não. Não completamente igual às widgets da própria plataforma.

Há bindings, é verdade, mas no fim estamos a trabalhar com a framework da plataforma, a diferença é que estás a usar outra linguagem.

De que forma nativa é que estamos a falar?

Share this post


Link to post
Share on other sites
mjamado
Nativo como com aspecto igual ao das aplicações da plataforma e com comportamento igual, não. Não completamente igual às widgets da própria plataforma.

Foste ver o post que te disse na minha página pessoal? Tem três imagens, ao fundo, com uma porrada componentes. Repara como aparecem nos três OS.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
Knitter

Sim fui, e tenho aqui aplicações em Qt, e continuo a ver as diferenças entre umas e outras. Na maior parte dos casos nem se nota, mas existem diferenças.

Claro que posso estar a ser paranóico :)

Share this post


Link to post
Share on other sites
kurayama

Se querem igual a Mac têm de usar Cocoa e Objective-C.

A Apple anda a tentar mudar isto, e um projecto muito interessante é o MacRuby.

Ja fiz umas apps e gostei. Só é pena ainda não ter compatibilidade com algumas libs, especialmente orm's.

Share this post


Link to post
Share on other sites
triplexim32

obrigado pelo tempo malta.

Hoje em dia qualquer um é capaz de fazer decompile num programa, agora se falarmos em decompilers que so revertem assembly, a coisa muda, não é qualquer um que consegue interpretar um milhar de linhas de assembly.

Pah java não me interessa porque consome muitos recursos no sistema :\ java hoje em dia deve ser usado exclusivamente para web (na minha opinião) como recurso a uma linguagem mais forte, porem o flash com actionscript já faz muitas coisas q o java faz e é muito mais rapido.

Alguem me explica melhor o que é QT, fiquei com a ideia que é uma espécie framework multiplataforma misturada com algumas confusões que criei na minha cabeça :P

vou fazer a pergunta de outra forma:

Se tivessem q fazer um programa que estabelecesse ligações via tcp seguro (com ssl) para troca de mensagens que tivesse que dar nos 3 principais So's (e de preferencia na patafernália de "linuxes" que existem, ou va, pelo menos no ubuntu e archlinux que sao creio as versões mais usadas... i'm i right?) que linguagens escolhiam e porque?

Eu gostava q fosse algo com base em C, porque programar em python é para mim como reinventar a roda :\

Java, c#, delphi, c, vB sao boas linguagens porque seguem todas a estrutura do C.

Btw, escolher visual C é bom\mau para este caso?

e: Mono é um compilador ou um framework?


<

Share this post


Link to post
Share on other sites
mjamado

lguem me explica melhor o que é QT, fiquei com a ideia que é uma espécie framework multiplataforma misturada com algumas confusões que criei na minha cabeça :P

É mais ou menos isso: é uma framework, a linguagem usada é C++. Tens de compilar o mesmo projecto nas três plataformas para ficares com os três binários. O que o Qt faz é disponibilizar classes que "embrulham" as funcionalidades de cada plataforma, para que uses sempre o mesmo código; depois, ao compilar, a framework lá sabe como desatar o nó.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
triplexim32

e dá para trabalhar em visual c++ (no visual studio) e depois compilar com isso?


<

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.