CBLC 02 - AULA 01 - Dúvidas e discussões #7

Open
opened 2025-05-14 21:39:09 -03:00 by victor_marinho · 0 comments

Dúvidas e discussões aula CBLC2 AULA 01

O que é um programa?

Uma sequência de instruções que resolve um problema?

Mas existem linguagens que não precisam de sequência e utilizam instruções paralelas.

Do ponto de vista de um programador é solucionar algo. Como é a CPU que executa tudo, não muda o fato de ser uma sequência ou paralela.

Mas podemos dizer que a CPU processa estas instruções sequencialmente e a gente determina quais seriam para realizar uma tarefa ou problema. Esta definição é legal.

Mas do ponto de vista de quem executa o programa. Do ponto de vista do sistema operacional, onde os executamos. O que seria um programa para ele?

Uma sequência de bits?

Mas ela está solta no ar?

Uma sequência de acesso, leitura e escrita na memória? Tem a ver, mas não é essa a resposta.

Uma sequência de chamadas ao sistema, comandos, dependências, bibliotecas? Isto é o programa pronto e executado.

É uma carga de trabalho de trabalho traduzida na linguagem?

Todo mundo está chegando perto, mas é mais simples.

Um programa para um sistema operacional é um arquivo. Especialmente no caso do GNU/Linux, parecido com o Unix, é um arquivo que formata seus dados de determinada maneira e padrão.

O que contém que este arquivo que o sistema reconhece como um programa e é capaz de executar?

Então contém números binários traduzidos na forma de bits.

Para o sistema é um arquivo binário com formato executável e permissão para execução.

Qualquer arquivo que contenha uma sequência correta de bits que contenha a sequência correta e permissão será um programa.

Se é assim, porque este arquivo que o sistema entende como um programa contém bits e bytes?

Porque é a única linguagem que a máquina entende.

O componente do sistema computacional que vai executar de fato alguma coisa é a CPU e ela só entende sinais elétricos. Eles vão codificar algo que a CPU vai interpretar como uma instrução.

Até o final dos anos 40, dados e instruções eram armazenados e processados separadamente.

Este formato do Unix e do LInux é o que chamamos de formato elf. Quando a gente escreve um programa temos duas grandes vias para seguir: podemos escrever em um arquivo vários números, literalmente, e dá um jeito de transformar os números em seus respectivos valores binários; como é um processo complicado, temos as linguagens de programação.

O Assembly, por exemplo, é chamado de linguagem de montagem. Um nível de abstração de um nível acima da linguagem de máquina.

São chamadas assim porque escrevemos o que deverá ser montado como código de máquina e traduzido para binário depois. É um código de máquina basicamente mas utilizando instruções.

Obviamente, este processo é muito difícil para sistemas mais complexos. Por isso as linguagens de alto nível passaram a ser desenvolvidas.

Mas para serem executadas, elas precisam ser traduzidas para para linguagem de montada e de máquina. É isto que chamamos de compilar.

E no C Programming Language tivemos as primeiras especificações da linguagem que vamos estudar.

E no C Programming Language tivemos as primeiras especificações da linguagem que vamos estudar.

O código na linguagem C precisa passar pela compilação e passar por um binário, mas existem linguagens que podem ser somente interpretadas, como PHP e Python. Neste caso é o interpretador que é carregado na memória e vai ser executado de acordo com o que escrevemos no código.

Assim, já temos duas caracteristícas da Linguagem C: é de alto nível porque a abstração em relação à linguagem de máquina é alta; é também uma linguagem compilada porque o código precisa ser traduzido em código de máquina para um arquivo binário.

Existe um interpretador em C?

Já ouvi falar, mas nunca vi. O mais perto disso é o tcc.
Algumas complexidades são diretivas de pré processamento, como macros, isto vai tornando um projeto de interpretador mais complexo.

Ainda sobre a questão de nível. O C é uma linguagem de alto nível, o Assembly faz a mesma coisa mas porque é considerado de baixo nível?

Imagine que você quer imprimir, em C: printf, compilar e pronto. Em Assembly teríamos que colocar manualmente na memória uma cadeia de bytes, calcular o tamanho da cadeia de bytes, vou utilizar chamadas de sistema, valores de conenção para registro, convenção de arquivos, etc.

Uma linguagem para ser considerada de alto nível precisa de portabilidade?

Não. A abastração diz apenas a forma de escrever programas.

Mas a portabilidade é também uma propriedade de uma linguagem. Um código de máquina, portanto é o mais portátil.

A portabilidade era um contexto na época da criação da linguagem C?

Sim e não. Não porque era um momento de turbulência criativa e disputa de arquiteturas, produtos de hardware. Cada computador saia com seu próprio sistema operacional. Você não podia instalar, ele vinha da fábrica já instalado. Alguns até eram genéricos.

E sim era, porque a IBM por exemplo liderava uma campanha por padronização. E inclusive em um dos aspectos falado no vídeo.

A maioria dos sistemas até então eram orientados à palavras. Elas variavam e existe uma razão para isso. Até os anos 50 e começo dos 60, a computação era vista somente para ciência e matemática. Portanto, quanto mais bits em uma palavra, maior seria as possibilidades de cálculo.

A Linguagem C é uma linguagem portável?

Sim, é altamente portável, mas não por ser de alto nível. Tem a ver com especificações. As especificações das plataformas GNu e Windows não são t ão diferentes assim e dá para escrever código em C compatível com elas.

Mas é necessário seguir algumas especificações.

Paradigmas de programação

Basicamente, temos os procedurais e funcionais.

Existe um terceiro, que é a Orientação à Objetos. Mas não muda muito, acaba sendo uma linguagem procedural.

A funcional você resolve os problemas definindo funções, no sentido matemática. Você tem uma entrada e vai criar uma saída. Como o Raskel que é linguagem funcional pura.

A maioria das outras é procedural. O termo vem de procedimento ,de sequência de ações. Dentro do paradigma procedurakl temos várias formas de escrever programas. E uma que caracteriza a linguagem C é que escrevemos procedimentos estruturando estes procedimentos.

Uso geral

A Linguagem C é também de uso geral porque você pode escrever para o que quiser.

Especificação

Especificação é uma documentação utilizada para várias finalidades: educacional, criar ferramentas para facilitar a escrita do código, criar compiladores e bibliotecas.

# Dúvidas e discussões aula CBLC2 AULA 01 ## O que é um programa? Uma sequência de instruções que resolve um problema? Mas existem linguagens que não precisam de sequência e utilizam instruções paralelas. Do ponto de vista de um programador é solucionar algo. Como é a CPU que executa tudo, não muda o fato de ser uma sequência ou paralela. Mas podemos dizer que a CPU processa estas instruções sequencialmente e a gente determina quais seriam para realizar uma tarefa ou problema. Esta definição é legal. Mas do ponto de vista de quem executa o programa. Do ponto de vista do sistema operacional, onde os executamos. O que seria um programa para ele? ## Uma sequência de bits? Mas ela está solta no ar? Uma sequência de acesso, leitura e escrita na memória? Tem a ver, mas não é essa a resposta. Uma sequência de chamadas ao sistema, comandos, dependências, bibliotecas? Isto é o programa pronto e executado. ## É uma carga de trabalho de trabalho traduzida na linguagem? Todo mundo está chegando perto, mas é mais simples. Um programa para um sistema operacional é um arquivo. Especialmente no caso do GNU/Linux, parecido com o Unix, é um arquivo que formata seus dados de determinada maneira e padrão. O que contém que este arquivo que o sistema reconhece como um programa e é capaz de executar? Então contém números binários traduzidos na forma de bits. Para o sistema é um arquivo binário com formato executável e permissão para execução. Qualquer arquivo que contenha uma sequência correta de bits que contenha a sequência correta e permissão será um programa. Se é assim, porque este arquivo que o sistema entende como um programa contém bits e bytes? Porque é a única linguagem que a máquina entende. O componente do sistema computacional que vai executar de fato alguma coisa é a CPU e ela só entende sinais elétricos. Eles vão codificar algo que a CPU vai interpretar como uma instrução. Até o final dos anos 40, dados e instruções eram armazenados e processados separadamente. Este formato do Unix e do LInux é o que chamamos de formato elf. Quando a gente escreve um programa temos duas grandes vias para seguir: podemos escrever em um arquivo vários números, literalmente, e dá um jeito de transformar os números em seus respectivos valores binários; como é um processo complicado, temos as linguagens de programação. O Assembly, por exemplo, é chamado de linguagem de montagem. Um nível de abstração de um nível acima da linguagem de máquina. São chamadas assim porque escrevemos o que deverá ser montado como código de máquina e traduzido para binário depois. É um código de máquina basicamente mas utilizando instruções. Obviamente, este processo é muito difícil para sistemas mais complexos. Por isso as linguagens de alto nível passaram a ser desenvolvidas. Mas para serem executadas, elas precisam ser traduzidas para para linguagem de montada e de máquina. É isto que chamamos de compilar. E no C Programming Language tivemos as primeiras especificações da linguagem que vamos estudar. E no C Programming Language tivemos as primeiras especificações da linguagem que vamos estudar. O código na linguagem C precisa passar pela compilação e passar por um binário, mas existem linguagens que podem ser somente interpretadas, como PHP e Python. Neste caso é o interpretador que é carregado na memória e vai ser executado de acordo com o que escrevemos no código. Assim, já temos duas caracteristícas da Linguagem C: é de alto nível porque a abstração em relação à linguagem de máquina é alta; é também uma linguagem compilada porque o código precisa ser traduzido em código de máquina para um arquivo binário. ## Existe um interpretador em C? Já ouvi falar, mas nunca vi. O mais perto disso é o tcc. Algumas complexidades são diretivas de pré processamento, como macros, isto vai tornando um projeto de interpretador mais complexo. Ainda sobre a questão de nível. O C é uma linguagem de alto nível, o Assembly faz a mesma coisa mas porque é considerado de baixo nível? Imagine que você quer imprimir, em C: _printf_, compilar e pronto. Em Assembly teríamos que colocar manualmente na memória uma cadeia de bytes, calcular o tamanho da cadeia de bytes, vou utilizar chamadas de sistema, valores de conenção para registro, convenção de arquivos, etc. ## Uma linguagem para ser considerada de alto nível precisa de portabilidade? Não. A abastração diz apenas a forma de escrever programas. Mas a portabilidade é também uma propriedade de uma linguagem. Um código de máquina, portanto é o mais portátil. ## A portabilidade era um contexto na época da criação da linguagem C? Sim e não. Não porque era um momento de turbulência criativa e disputa de arquiteturas, produtos de hardware. Cada computador saia com seu próprio sistema operacional. Você não podia instalar, ele vinha da fábrica já instalado. Alguns até eram genéricos. E sim era, porque a IBM por exemplo liderava uma campanha por padronização. E inclusive em um dos aspectos falado no vídeo. A maioria dos sistemas até então eram orientados à palavras. Elas variavam e existe uma razão para isso. Até os anos 50 e começo dos 60, a computação era vista somente para ciência e matemática. Portanto, quanto mais bits em uma palavra, maior seria as possibilidades de cálculo. ## A Linguagem C é uma linguagem portável? Sim, é altamente portável, mas não por ser de alto nível. Tem a ver com especificações. As especificações das plataformas GNu e Windows não são t ão diferentes assim e dá para escrever código em C compatível com elas. Mas é necessário seguir algumas especificações. ## Paradigmas de programação Basicamente, temos os procedurais e funcionais. Existe um terceiro, que é a Orientação à Objetos. Mas não muda muito, acaba sendo uma linguagem procedural. A funcional você resolve os problemas definindo funções, no sentido matemática. Você tem uma entrada e vai criar uma saída. Como o Raskel que é linguagem funcional pura. A maioria das outras é procedural. O termo vem de procedimento ,de sequência de ações. Dentro do paradigma procedurakl temos várias formas de escrever programas. E uma que caracteriza a linguagem C é que escrevemos procedimentos estruturando estes procedimentos. ## Uso geral A Linguagem C é também de uso geral porque você pode escrever para o que quiser. ## Especificação Especificação é uma documentação utilizada para várias finalidades: educacional, criar ferramentas para facilitar a escrita do código, criar compiladores e bibliotecas.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: blau_araujo/cblc#7
No description provided.