• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrotuga

Que linguagens compilam para código maquina?

22 mensagens neste tópico

Estava capaz de instalar um software qq de vistualizacao e experimentar programar ao nivel da maquina. Deve ter a sua piada.

C e C++ sao duas opcoes, que outras linguagens permitem isto?

Eu prefiria um linguagem mais simplificada para ser sincero.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque não aprendes logo uma linguagem de baixo nível? Eu percebi que a ideia era ver as transformações sofridas pela compilação, mas provavelmente ficavas com conhecimentos mais sólidos se mergulhasses mesmo nesse mundo.

Há linguagens relativamente acessíveis de baixo nível, como por exemplo MIPS.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu sou de engenharia electrotécnica, já por aí passei pelo assembly, nasm, um pouco de C, etc etc para programar processadores. Era um pouco secante porque as cadeiras eram mal dadas. Eu curtia interagir com um computador enquanto máquina, e não com um sistema operativo a servir de vela, só naquela de experimentar. Mas não dou muito valor a escrever coisas byte a byte.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu por acaso gostava era de programar em python para os microcontroladores em vez de user C. Ainda não me meti a procurar, mas breve entro nessa ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu por acaso gostava era de programar em python para os microcontroladores em vez de user C. Ainda não me meti a procurar, mas breve entro nessa ;)

Há alguma forma de compilar python para código máquina?

Python, perl, ruby, lua, tcl, pike...qq coisa do estilo me serviria às mil maravilhas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Há alguma forma de compilar python para código máquina?

Espero que sim! :D  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Atenção que Python, Java, C#, etc., também compilam para código máquina utilizando JIT, mas a compilação é feita em run-time, o que permite um maior leque de optimizações de código utilizando funcionalidades específicas do processador.

Além do C / C++, tens mais opções que compilam directamente para código máqiuina como D (uma linguagem catita) e Objective-C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Compilam para código máquina no run time... mmm... estás-me a fazer pensar... :D... não há nenhuma forma de congelar esse processo?

O py2exe acho que é precisamente isso que faz. Mas não me serve porque tem dependencias ao nível do sistema operativo ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Compilam para código máquina no run time... mmm... estás-me a fazer pensar... :D... não há nenhuma forma de congelar esse processo?

O py2exe acho que é precisamente isso que faz. Mas não me serve porque tem dependencias ao nível do sistema operativo ;)

Epa estava a falar do Psyco, um plugin de JIT para o Python que acelera bue a execução do código. Penso que o py2exe não compila para código máquina, apenas cria um executável, mas continuas dependente do python25.dll. Quanto ao Java e o C# já trazem sistemas JIT de origem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que o PERL também compila para código máquina (comando perlcc).

Com o gcj também é possível compilar Java para código máquina.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A linguagem Pascal compila para codigo máquina.

Pode usar o freepascal, que existe compila codigo para diversas plataformas

e sistemas operativos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, vou reformular a pergunta:

Que opções existem para escrever um sistema operativo para por exemplo para a arquitectura i386?

Pelo que andei a ler, só mesmo C, ou assembly :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que qualquer linguagem serve, desde que possua um compilador para código máquina.

Existe variadíssimos sistemas operativos em diversas linguagens. Por exemplo, tens o House em Haskell.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que andei a ler, só mesmo C, ou assembly :P

Tens de ler mais :P, JNode feito em Java, Haiku feito em C++, são dois exemplos de linguagens além das que mencionaste. Para não falar do que o Betovsky indicou.

Podes escrever um sistema operativo em vários linguagens, os desafios serão quase sempre os mesmos, sendo que poderás ter alguns específicos da linguagem, como será o caso de um feito em Java em que poderás ter o desafio de como iniciar o SO se quiseres usar uma JVM. De resto, linguagens para SOs é o que não falta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando digo C estou a referir-me tambem ao C++, o windows por exemplo acho que é escrito maioritáriamente e C++.

Mas ficam umas perguntas que me intrigam:

Esses sistemas operativos são compatíveis com um PC normal ou correm apoiados noutra camada de abstracção?

Por exemplo, esse que é escrito em Java, corre num PC ou numa máquina de Java? É que são coisas completamente diferentes.

Alguem me pode dar um exemplo de documentação em como fazer um sistema operativo super básico com um sistema de boot, que corra num PC e que não recorra a C/C++ ou assembly?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguem me pode dar um exemplo de documentação em como fazer um sistema operativo super básico com um sistema de boot, que corra num PC e que não recorra a C/C++ ou assembly?

Qualquer sistema operativo vai ter sempre Assembly.

Aqui tens um sistema super simples que eu fiz há uns tempos: http://code.google.com/p/flush/source/browse/trunk/kernel/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qualquer sistema operativo vai ter sempre Assembly.

Aqui tens um sistema super simples que eu fiz há uns tempos: http://code.google.com/p/flush/source/browse/trunk/kernel/

mmm

parece-me um bom ponto de partida para eu começar a desbravar mato.

Vamos então esmifrar isso.

Onde é que está o código do boot? É o ficheiro start.S

Tipo... o que eu ainda não percebi é o seguinte. Quando se liga o computador ele vai executar o código que está num endereço pré-definido (no início suponho eu) da unidade de memória externa definida na bios.

Posto isto, como é que se instala um istema operativo, por exemplo, compilas esse código e depois como é que asseguras que a parte do boot está no endereço certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Posto isto, como é que se instala um istema operativo, por exemplo, compilas esse código e depois como é que asseguras que a parte do boot está no endereço certo?

Eu neste caso aderi à especificação Multiboot, definida pela malta do GRUB (http://www.gnu.org/software/grub/manual/multiboot/multiboot.html).

Ou seja, o GRUB vai chamar o ponto de entrada no meu código e passa várias estruturas, nomeadamente memory maps. Se tu quiseres também podes fazer o teu próprio bootloader, nem é assim tão difícil, mas a meu ver não é muito interessante. Basicamente o bootloader inicializa o processador, memória, etc, e passa o controlo para o teu sistema operativo.

Quando fazes boot pelo disco, penso que ele vai buscar a informação ao MBR, e executa a partição assinalada com a flag boot. Quanto a CD-ROMs, eu faço boot utilizando a especificação El-Torito, utilizando uma imagem que vem com a distribuição do GRUB.

Acho que não disse nenhum disparate, até porque já não mexo nisto há uns meses. Qualquer dúvida diz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, andei aqui a fazer umas pesquisas e encontrei o syslinux que parece ser um bootloader bem popular.

Agora, o que não percebi foi se aquilo só funciona com kernels linux.

Por exemplo, não posso utilizar o syslinux para uma aplicação feita por mim?

Imaginemos que eu quero fazer uma aplicação que arranca mal se liga o pc, não posso pegar num progrma compilado e fazer com que um bootloader a inicie assim que ligue o pc?

Já que cá estamos, alguem tem aí documentação sobre o básico dos básicos de um bootloader?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

http://www.osdever.net/tutorials.php?cat=2&sort=1

Pelo que estive a ver na documentação do SYSLINUX é mais usado para bootar sistemas Linux. Mas se procurares em comunidades de OS dev. vais encontrar montes de bootloaders. Como já te disse usa o GRUB e não te preocupes mais com o assunto. :P

PS: Já estamos a entrar em off-topic, talvez seja melhor criar novo tópico.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora