Quais são as linguagens de programação que servem para criar sistemas operacionais?
Teoricamente, todas. Você só terá mais ou menos dificuldades com uma ou com outra.
Você quer saber “em que linguagem foi escrito o kernel do sistema operacional X” ou “em que linguagens eu posso escrever os programas do sistema operacional”?
Pense no Linux. O Kernel foi escrito em C com algumas rotinas em assembly, mas os programas podem ser escritos em qualquer linguagem que você imaginar. Pense numa distribuição do Linux que inclua o Mono, por exemplo.
C e algumas partes em C++
[quote=entanglement]Você quer saber “em que linguagem foi escrito o kernel do sistema operacional X” ou “em que linguagens eu posso escrever os programas do sistema operacional”?
Pense no Linux. O Kernel foi escrito em C com algumas rotinas em assembly, mas os programas podem ser escritos em qualquer linguagem que você imaginar. Pense numa distribuição do Linux que inclua o Mono, por exemplo. [/quote]
Entanglemente, eu quero saber em que linguagens eu posso escrever todo o sistema operacional".
Até agora estava iludido, eu estava acreditando que a linguagem Java não serve para criar sistema operacional. Um professor de Java disse que Java não serve para criar sistema operacional, segundo ele, servem a C e C++.
drsmachado, por favor, me oriente sobre como fugir das linguagens que causam mais dificuldade na criação de sistemas operacionais.
Provavelmente o que seu professor deve ter pensado é “não se escreve o kernel de um sistema operacional em Java” assim como “não se escreve o kernel de um sistema operacional em Cobol”.
E obviamente o pessoal da Microsoft não vai escrever nenhum pedaço do Windows 8 em Java, embora alguns pedaços dele tenham sido escritos em C#.
Mas você ter uma distribuição do Linux que inclua algum programa em Java que foi compilado com o gcj (como uma versão do Tomcat compilada para código nativo) não é raro, acho que o Red Hat tem um pacote desses.
Se quiser escrever um kernel, pode usar alguma linguagem que gere código nativo otimizado - como o C, por exemplo.
Mas isso é questão de haver compiladores para a tal linguagem - digamos que houvesse compiladores bons para Pascal para várias arquiteturas; talvez você quisesse escrever um kernel em Pascal, mesmo.
E para não ficar bitolado com o C, veja alguns exemplos de sistemas operacionais que não foram totalmente escritos em C.
O BeOS (e seu sucessor, o HaikuOS) foi escrito em C++ e seu modelo de objetos reflete o C++.
O antigo MacOS (não o MacOSX) foi escrito em Objective-C. Uma boa parte do MacOSX também foi escrita em Objective-C.
E assim por diante.
E “fugir” não é uma boa ideia. Senão você teria de “fugir”, por exemplo, do tal do Cobol
É melhor ver quais são as linguagens mais usadas para escrever o kernel e os principais utilitários dos sistemas operacionais.
Tem um que foi desenvolvido em Java, o JavaOS (para saber mais: http://pt.wikipedia.org/wiki/JavaOS)
[quote=entanglement]E “fugir” não é uma boa ideia. Senão você teria de “fugir”, por exemplo, do tal do Cobol
É melhor ver quais são as linguagens mais usadas para escrever o kernel e os principais utilitários dos sistemas operacionais. [/quote]
Entanglement, escrevi errado o que quis dizer.
Eu tentei perguntar o que devo fazer para saber quais são as linguagens de programação que causam mais dificuldade no desenvolvimento de sistema operacional para não desenvolver sistema operacional usando elas.
[quote=assembler][quote=entanglement]E “fugir” não é uma boa ideia. Senão você teria de “fugir”, por exemplo, do tal do Cobol
É melhor ver quais são as linguagens mais usadas para escrever o kernel e os principais utilitários dos sistemas operacionais. [/quote]
Entanglement, escrevi errado o que quis dizer.
Eu tentei perguntar o que devo fazer para saber quais são as linguagens de programação que causam mais dificuldade no desenvolvimento de sistema operacional para não desenvolver sistema operacional usando elas.[/quote]
Qualquer linguagem que não possua acesso direto ao hardware é uma linguagem que causa dificuldade no desenvolvimento.
Qualquer linguagem de sintaxe complexa dificulta o desenvolvimento.
Resumindo… é C ou/e C++, ponto.
Luiz Aguiar, por que não o C#, Cω, C–, Objective-C e as outras linguagens C se é que existe mais linguagens C?
Veja, um exemplo “bobo” construido com AJAX:
Luiz Aguiar, por que não o C#, Cω, C–, Objective-C e as outras linguagens C se é que existe mais linguagens C?[/quote]
É tudo sobre o quão próximo do hardware você está.
Basicamente, a linguagem deve te oferecer um mecanismo que lhe permita acessar um determinado endereço de memória diretamente, acessar um registrador na CPU, controlar o contador de programa, o contador de pilha, ler valores de interrupções, etc.
Linguagens como Java e C# por exemplo, não oferecem essa possibilidade. Em ambas, tudo o que você faz é manipular referências de objetos, abstraindo a memória. Isso é bom para construir aplicações, pois evita que dados sejam corrompidos, sem contar na liberação automática de memória, mas a contrapartida é não poder executar estas operações de baixo nível.
Outro fator preponderante é a existência de um compilador para aquela linguagem para a plataforma desejada. A maioria dos compiladores Java por exemplo, compilam o código para executar na JVM, assim como o C# é compilado para rodar no .NET framework, JS é compilado para rodar em navegadores por aí vai.
Enfim, na prática, a sua melhor opção é C mesmo …
Na faculdade fiz um SO no trabalho final e chamei de Marc OS. hehehehe
Usei a linguagem Pascal porque era uma linguagem que gostava muito. No mestrado tentei refazer o SO em Haskell, que era minha linguagem preferida na época e o código ficaria bem mais enxuto. Mas desisti e fui pra área de compiladores, que gostava mais.
Um outro SO escrito em Java é jnode http://www.jnode.org/. Tem muito livro que ensina o caminho das pedras pra fazer um SO.
Luiz Aguiar, por que não o C#, Cω, C–, Objective-C e as outras linguagens C se é que existe mais linguagens C?[/quote]
É tudo sobre o quão próximo do hardware você está.
Basicamente, a linguagem deve te oferecer um mecanismo que lhe permita acessar um determinado endereço de memória diretamente, acessar um registrador na CPU, controlar o contador de programa, o contador de pilha, ler valores de interrupções, etc.
Linguagens como Java e C# por exemplo, não oferecem essa possibilidade. Em ambas, tudo o que você faz é manipular referências de objetos, abstraindo a memória. Isso é bom para construir aplicações, pois evita que dados sejam corrompidos, sem contar na liberação automática de memória, mas a contrapartida é não poder executar estas operações de baixo nível.
Outro fator preponderante é a existência de um compilador para aquela linguagem para a plataforma desejada. A maioria dos compiladores Java por exemplo, compilam o código para executar na JVM, assim como o C# é compilado para rodar no .NET framework, JS é compilado para rodar em navegadores por aí vai.
Enfim, na prática, a sua melhor opção é C mesmo …[/quote]
Correção: se você utilizar uma JVM Hotspot, você consegue acessar diretamente a memória sim. Não é das coisas mais bonitas, maaaaaass… é possível
[]'s
[quote=Alexandre Saudate]
Correção: se você utilizar uma JVM Hotspot, você consegue acessar diretamente a memória sim. Não é das coisas mais bonitas, maaaaaass… é possível ;)[/quote]
Mas é bem diferente do poder que se tem com ponteiros.
Aqui é novamente a distinção entre “ser possível” e “ser viável”. É possível criar um SO em praticamente qualquer coisa. Se o resultado final vai ser confortável de programar, difícil, ou caro, é outra história.
Em linguagens gerenciadas fazer um so vai envolver MUITA ginástica.
É mais ou menos o mesmo papo de “posso fazer games com JSE”?
[quote=ViniGodoy][quote=Alexandre Saudate]
Correção: se você utilizar uma JVM Hotspot, você consegue acessar diretamente a memória sim. Não é das coisas mais bonitas, maaaaaass… é possível ;)[/quote]
Mas é bem diferente do poder que se tem com ponteiros.
Aqui é novamente a distinção entre “ser possível” e “ser viável”. É possível criar um SO em praticamente qualquer coisa. Se o resultado final vai ser confortável de programar, difícil, ou caro, é outra história.
Em linguagens gerenciadas fazer um so vai envolver MUITA ginástica.[/quote]
Sim, sim, tem toda a razão. Eu só quís expôr que existem mais coisas entre o céu, a Terra e o Java do que supõe nossa filosofia
[]'s
Veja, um exemplo “bobo” construido com AJAX:
http://dev.sencha.com/deploy/ext-4.0.0/examples/desktop/desktop.html[/quote]Não considero este um SO. É apenas uma aplicação que simula uma área de trabalho…
Mas há este aqui que não me parece ser apenas uma simulação: http://bellard.org/jslinux/[/quote]
Sim, eu concordo com vc… O q eu tentei expressar foi a possibilidade do AJAX, tanto q disse veja um exemplo bem simples “Veja, um exemplo bobo”… De fato, não é um Sistema Operacional…
Gostei do seu link…