Entendendo Back-End para Iniciantes em Programação (Parte 1) | Série "Começando aos 40"

375.2k views7487 WordsCopy TextShare
Fabio Akita
Este é o 5o episódio da série "Começando aos 40". Você deve assistir os episódios anteriores da séri...
Video Transcript:
olá pessoal fábio akita eu espero que vocês tenham sobrevivido ao meu último episódio onde eu gastei um longo tempo tentando dar contexto sobre as tecnologias de front end eu também espero que tenham entendido a receita na dúvida encontrem o contexto de porque determinada tecnologia foi criada tecnologia são ferramentas ferramentas foram criadas com um propósito por isso não existe uma única tecnologia que resolve todos os problemas já diria o sábio que pra quem acha que só existe martelo todos os problemas são prego e seguindo nessa mesma linha no episódio de hoje eu vou tentar dar contexto
para as tecnologias que chamamos de beck and porém beck and é muito mas muito maior do que front end e mesmo se eu fizer um episódio de uma hora não vai dar pra explicar tudo o que eu quero eu comecei a escrever o script desse episódio aí eu cheguei na página 10 fui escrevendo e cheguei na página 20 e mesmo vocês tenham gostado do episódio anterior que deu quase 50 minutos se eu tentar encaixar tudo agora vai facilmente dar mais de duas horas e se eu fizer isso eu vou correr demais e talvez não explicar
direito então eu vou ser obrigado a cortar em alguns episódios e mesmo assim vai ficar grande então vamos lá porque temos bastante coisa para cobrir pra começar a pergunta mais comum quando se fala em programação de candy para web é qual linguagem aprender javascript java fechar php python ruby ele chegou escala cujo costco nos episódios sobre sua linguagem não é especial que eu espero que tenham assistido eu dei uma rápida introdução nos primeiros 40 anos de história das linguagens e como uma linguagem vem influenciando as outras assistam essa história antes e mesmo que não tem
intenção de se tornar um desenvolvedor front end assista o episódio anterior também antes pra ter o contexto necessário se não assistiu vai lá eu espero pronto já foi então vamos lá [Música] no brasil infelizmente nós praticamente pulamos a história da computação até os anos 80 e só começamos mais ou menos nos anos 90 isso porque antes dos anos 80 vivíamos uma ditadura e perdemos o time da evolução dos transistors e nunca tivemos um mercado decente de microprocessadores o nosso mercado era fechado a importar coisas de fora maldita reserva de mercado toda reserva de mercado é
um erro a gente precisava ir até o paraguai para conseguir comprar máquina decente havia também computadores nacionais como os da itautec micro siga que faziam clones dbm pc e mesmo de outros como os famosos sinclair quem não lembra da série tk como tk90x hotbit gradiente fazendo msx que eu gostava bastante e tinha a unitron que fazia cones de apple 2 e chegou até mesmo a fazer um cone excepcional do mec 512 que era quase igual e rolou até uma controversa direto com a apple onde eles quase pediram sanções dos estados unidos contra exportações do brasil
por causa disso essa história é interessante explica por que por muitos anos steve jobs o dia o brasil eu vou deixar vincado na descrição abaixo sobre isso e tivemos até sistemas operacionais nacionais como um cisne que era um clone de ms dós só que em português eu brincava de base com computadores como apple 2 e msx quando ia na casa de amigos meu primeiro mesmo veio do paraguai no fim dos anos 80 foi um pc e se extende talvez 10 mega hertz ou algo assim poderosos 1 mega de ram e 10 megabytes de hd como
monitor seja verde de incríveis quatro tons de verde eu fiz muitos programas em bebês e cliper nessa máquina fiz muitos trabalhos de escola com ele e joguei muito também você não precisa da máquina mais potente para aprender a programar você precisa aprender a controlar a máquina que tem e tirar o absoluto máximo que ela pode dar ninguém nunca vai dirige bem uma ferrari e sequer tem coordenação para trocar a marcha num go vocês vão notar que mesmo hoje em dia em plena 2019 é muito raro encontrar programadores de cabelo branco eu mesmo só comecei a
ganhar os meus nos últimos poucos anos e esse é um dos motivos havia muito pouco programador antes dos anos 80 mesmo durante os anos 80 é difícil ser programador então os que estão na ativa são ainda mais raros nos estados unidos você vê vários incluindo famosos como usando o bob da vida por isso temos muito pouca gente realmente com décadas de experiência se programador no brasil só se tornou uma carreira realmente mensure depois do advento da web antes era bem mais nicho e por isso você vê muito pouca gente que pode dizer coisas como trabalhei
em projetos com lisp ou os motoqueiros ou prologue sem ser do meio acadêmico bom antes de falarmos sobre as linguagens novas precisamos começar do começo todo o hardware mais especificamente a cpu vem de fábrica entendendo um certo conjunto de instruções ou funções eles têm registradores que é como se fosse um tipo de memória você coloca valores nesses registradores e chama uma instrução que é mais ou menos a mesma coisa que chamar uma função passando argumento se você começou a aprender alguma linguagem deve ter visto sobre funções daí a cpu executa alguma coisa e gravar o
resultado em outros registradores e você pode ler essa resposta a linguagem que usamos para falar diretamente com a máquina é assembly e seu montador o assembler traduz o código escrito em texto com mnemônicos como jamie cook ou edge ou movie diretamente nas instruções binárias da máquina além do hardware temos instruções específicas do sistema operacional o que chamamos desses comçou chamadas de sistema então o tal binário nativo que falamos são instruções para a máquina e para o sistema operacional que é uma abstração dessa máquina sempre que falamos em abstrações pense que é uma forma de pegar
uma sequência de instruções que por si só podem ser difícil de entender o que vai fazer em cápsula uma chamada só com o nome mais descritivo é o que você chamaria de funções um sistema operacional tem várias funções que abstrai instruções mais simples que a máquina oferece como ler arquivos ou a lôca espaço da memória para um programa é extremamente chato e trabalhoso escrever há sempre diretamente além de ser beneficiente hoje em dia tanto porque precisamos escrever muito código para fazer uma aplicação inteira e porque a performance não vai ser melhor e vou explicar porque
a seguir mas pior o código que escrevemos é totalmente independente da cpu que estamos usando programar a assembléia de intel x86 o por pc online exigem instruções diferentes por isso temos linguagens como ser um compilador traduz o código como escrito em c realiza diversas otimizações antes de terminar de traduzir em instruções binárias mas mais importante podemos usar o mesmo código ser com diferentes compiladores para gerar as instruções de um intel x86 worms em mudar o código c uma linguagem como se cria um programa binário nativo ou seja ele depende de chamar diretamente instruções do sistema
operacional e da máquina um compilador faz muito mais que só traduzir o código um para um para instruções de máquina ele vai tentar o possível melhorar seu código primeiro ele vai tirar a instruções que não servem pra nada vai tentar executar coisas fora de ordem se o resultado for mesmo vai trocar pedaços inteiro por instruções mais simples vai tentar prever o que é o próximo resultado já pré calcular e assim por diante ele literalmente faz mágica portanto parta do princípio que seu código deve ser inscrito primariamente para que outro ser humano consigo entender ea trabalho
do compilador melhorar para ficar mais eficiente na máquina você eventualmente pode otimizar seu código para ficar mais eficiente quando fica muito complexo mas se sua linguagem exige que você faça isso o tempo todo sua linguagem é defeituosa no processo de transformar um código texto em um binário que executa na máquina você primeiro precisa de um compilador só que ninguém escreve um programa 100% do zero normalmente você nem fala diretamente com hardware ou sistema operacional existem dezenas de bibliotecas que você deve usar e que vão facilitar seu trabalho no ser você vai precisar de coisas como
livre se ou não se pôs panos você talvez vai usar coisas como boost são grandes bibliotecas reusáveis pra você não tem que ficar reinventando a roda toda hora no windows seriam as da llx que você já deve ter visto como em 32 no linux a extensão dessas bibliotecas binárias é ponto s ó agora você precisa de um inter que vai ligar seu programa compilado com essas bibliotecas e você tem duas opções linca estaticamente olinka dinamicamente para alencar estaticamente você precisa dos binários antes deles virá a virarem um s ó dll ou seja do que chamamos
de arquivo de objetos normalmente com extensão ponto o que é transformado em ponto a 1 ponto livre em windows se seu programa é um binário a biblioteca é outro binário alguem k estaticamente você vai ter as duas mescladas num único binário usam porém se todo o programa que você fizer tiver que mesclar binário das bibliotecas vai ter os binários gigantes por outro lado você pode ligar dinamicamente pra isso você precisa do arquivo de cabeçalho da biblioteca que é um código que declara quais funções estão expostas no binário desta biblioteca dessa forma todos os programas vão
ter um tamanho menor e vão recusar o mesmo binário da biblioteca que está instalado no seu sistema porém ao copiar esse binário pra outra máquina você precisa garantir que a biblioteca dinâmica tá lá também é por isso que muitos programas no windows antigamente ou até hoje mandam você instalar antes um grande time do visual basic 6 hoje em dia o time do dot net ou outros componentes como direct express games e mais você precisa instalar a versão certa de cada biblioteca ou vai ter problema se você já está instalando e configurando o seu linux zero
na mão já deve ter aprendido sobre variáveis de ambiente não basta só baixar as bibliotecas e copiar em algum diretório para que seus executáveis encontra nas bibliotecas se você instalar na mão vai precisar mexer em variáveis de ambiente como é o de lembrar o mpf que indica onde procurar por elas essa discussão se linkar dinamicamente o estaticamente é melhor é uma das coisas que programadores gostam de discutir ambas sempre tem vantagens e desvantagens se você tem todo o código-fonte de tudo disponível o tempo todo e com um binário que você possa copiar para outra máquina
e não se preocupar com dependências pode comprar tudo estático ficar com binário gigante quando eu digo gigante estou falando de binários de 200 mega ou mais é o que linguagem novas como um gol do google fazem ele prefere baixar o código fonte das dependências com pilar e lienca tudo estaticamente em algumas exceções que vou falar depois mas na maior parte do tempo todo o binário de gol você pode gerar na sua máquina copiar um servidor e na maior parte do tempo tudo funciona sem se preocupar em precisará instalar dependências estas que são dinâmicas mas se
é tão simples assim e ficar se preocupando com versões bibliotecas dinâmicas ou se elas estão instaladas é tão chato porque não combina tudo estaticamente primeiro porque você não precisa ter o código fonte das bibliotecas só o arquivo de cabeçalho que lhes as suas funções segundo porque digamos que você tenha dez programas todas elas ligam estaticamente uma biblioteca de criptografia digamos que descobrimos que tem um banco de segurança crítico nesta biblioteca se todos os programas estiverem linkados dinamicamente basta recompila só a biblioteca de criptografia e substituir a máquina em cima da antiga e todos os dez
programas automaticamente vou carregar a versão corrigida caso contrário você agora precisa recuperar todos os dez programas pra que eles gerem novos binários com as correções e substitui na máquina 1 1 tudo sempre depende de pra que serve seu programa aliás programação é muito isso aprender a fazer escolhas entre opções que não tão erradas que você precisa saber o contexto nem sempre as escolhas são simples vai se acostumando com isso é como uma arte é a qual cor é melhor vermelho azul amarelo não tem cor certa existe saber usar a cor certa no lugar certo na
maioria das distribuições linux existe o conceito de um gerenciador de pacotes no red head temos o rpm ea ferramenta ian em distribuições derivadas de débil como o ubuntu temos deve ferramenta arte em hark linux e derivados como manjahro temos o pacman e assim por diante mas quando não existe o pacote de algum programa que queremos você normalmente baixa um carbol que é tipo um zip e vai precisar diz comprimir compilar e instalar a partir desse código fonte você normalmente vai ver a sequência de três comandos que precisa executar na linha de comando primeiro tem o
ponto barra configure com filho é responsável justamente por checar se você tem todas as dependências que se precisa para compilar já instalados na sua máquina se não tiver e vai dar erro e você precisa instalar as dependências e rodar e se configure de novo daí você roda make you make é um arquivo chamado make fai o que vem no projeto que declara tarefas que a ferramenta make pode executar e o the fool o padrão é compilar ele vai chamar compiladores como o gcc ou silemg e transformar o código c em binários e por fim você
tem um making stoll que é o make chamando a tarefa e instou do make fai o que vai pegar esse binário que acabou de cumprir lá da permissão de execução e mover para um diretório que o ps conseguiu encontrar com o barra o sr ballou barbie ou para outro lugar be trata tipo barra opte barra blá blá e colocar o diretório do ps precisa toda vez que você faz essa seqüência ver como demora programas modernos são dependentes de dezenas de bibliotecas e o compilador tem bastante trabalho para transformar centenas de arquivos pontos e em ponto
e depois no binário final nem cada estaticamente ou dinamicamente com as bibliotecas que precisa e só aí finalmente você pode executar seu programa em windows você quase nunca estava programas dessa forma você normalmente baixa o binário que vem embutido no instalador o instalador normalmente instala as dependências que precisa em windows ao contrário de linux preferimos manter todas as versões de uma determinada biblioteca no sistema por isso você tende a ter um sistema operacional mais gordo do que o linux e com bibliotecas bem antigas ainda disponíveis mas a vantagem é que conseguimos pegar um binário feito
pra o windows 98 e ele vai provavelmente funcionar no windows 10 mec o s é meio híbrido dos dois conselhos ele mantém muitas bibliotecas antigas até um certo ponto mas não tão longe quanto o windows e ao contrário do windows ele traz já os compiladores e da opção de combinar direto do código-fonte mantendo os cabeçalhos de bibliotecas que precisam para concluí la por isso existem adaptações de programas de linux que funcionam perfeitamente em mac o s você vai ver mais sobre esse tipo de escolha quando estiver usando linguagens que compilam em binários nativos como cc
pois plus pasca object pascal do delphi objective c ou suíte pra eu s e até em linguagens novas como o google o que eu falei agora há pouco e o host da mozilla mais do outro lado desse espectro existe o conceito de um interpretador um interpretador em si só um programa mas a função dele é lê código que você escreveu e traduzi instruções para a máquina sem necessariamente precisar compilá esse código binário nativo ou seja ele depende de ter o código-fonte do seu programa e traduzir ou interpretar o código toda vez que carrega ele contém
partes de um compilador como par ser para interpretar o código que você escreveu precisamos de um programa que leia esse código e interprete de acordo com uma gramática da linguagem e traduza isso instruções de máquina ou uma representação similar para isso sérgio par ser aqui a coisa começa a ficar confuso mas vamos tentar focar e entender originalmente um interpretador é só um programa como eu já disse você executa na linha de comando e passa como argumento o caminho para um arquivo de texto que contém o código que você escreveu na linguagem que esse interpretador entende
ele vai carregar esse arquivo vai usar o parceiro para checar que você escreveu certo vai transformar numa representação interna que ele entende normalmente um tipo de árvore lembra que eu falei no episódio anterior da importância de você entender as estruturas de árvore e finalmente vai começar a interpretar e executar as instruções para fazer o que você pediu quando terminar seu programa o interpretador também termina é assim que funcionam originalmente linguagens como própria hp python mundo e até já o script elas variam em algumas funcionalidades por exemplo e python permitem pré compilar seu código-fonte na representação
intermediária que eu falei o termo compilar pode confundir porque você pode achar que ele está compilando um binário nativo como compilador de ser mas é diferente ele apenas vai economizar o tempo de ler o arquivo texto e parcial natal estrutura de árvore que não lhe chamamos de a sttu abstract sintex truir por isso então você tem extensão ponto pele para o código fonte e ponto plx pupo é compilado ou em python você tem ponto pai o código-fonte ponto país se pré compilado no hub javascript não tem essa funcionalidade ainda na prática tanto faz hoje em
dia os hd são rápidos o suficiente para não importar tanto isso antigamente fazia sentido porque a principal função de um interpretador era permitir que você pudesse criar programas de linha de comando que executam e terminam muito rápido você podia chamar de duas formas digitando pro e passando como argumento o arquivo do código ou ligando o flag de execução direto no arquivo texto de código e tendo como primeira linha o que nos deixe bang que é a ser quilha com exclamação e o caminho absoluto para o executável do interpretador e se você já fez ou pela
web por scripts deve ter visto isso existe ainda outra opção que era criar um pacote que embutiu interpretador junto com a representação do seu código fonte no único executável o próprio admite a isso e é o que o visual basic fazia antes da versão 6 no final parecia que era um binário nativo como descer mas na verdade é um pacote que embute as duas coisas juntas de curiosidade eu disse visual básico até os 6 porque não sei você tinha a opção de compilar o código fonte em binário nativo quando ele passou adaptar e usar o
compilador do visual ser pois possui visual vez que seis é um produto que me impressionou bastante na época como eu disse antes o interpretador originalmente foi feito para iniciar rápido e terminar rápido no episódio anterior eu comecei a falar sobre servidores web todo o sistema operacional lida com processos toda vez que você executa uma aplicação seja executável nativo compilado em ser 11 interpretadores que eu citei antes que também são feitos em seu setor clos o trabalho do sistema operacional é carregar a lôca memória e que há um processo em execução em ambiente unix ou principalmente
linux criar processos é uma coisa relativamente barata ordens de grandeza se comparar com o mec o és o windows em windows criar processos envolve mais peso o que chamamos de over head não é uma coisa barata e nem é porque é pior mas porque tem requerimentos diferentes pensando antigamente no unix um programador naturalmente faria um programa que é executado e se for um servidor ter cp ele só consegue servir um cliente perceber de cada vez como já expliquei no episódio anterior para conseguir servir múltiplos clientes pcp ao mesmo tempo a coisa mais fácil de se
fazer é um fork do processo ou seja criar uma cópia do programa em execução na memória cada nova conexão ao servidor faz um novo for que esse forte razoavelmente rápido de criar e usa pouca mesmo ora porque ele usa os mesmos bits do programa original pai que também está na memória é um truque do sistema operacional e esse recurso é chamado de cal ou cópia um hit que evita fazer uma cópia inteira do executável da memória pra outro espaço de memória então se um processo precisa de 200 kilobytes em memória do instante que fizer forte
ele não vai dobrar memórias a 400 vai usar muito menos que isso um servidor web como apache antigo que eu falei no começo só usava forte por isso ele era simples e mais do que isso ele ganhou a capacidade de executar programas dependendo da url que era pedido através do padrão que falei que ficou conhecido como seja ir no começo esses executáveis eram só programas nativos compilados de ser mas falei que rapidamente fizeram profuncionário apache também e começamos a era da web dinâmica pois bem interpretadores com programas curtos e iniciam e terminam rápido mas se
o programa vai ficando mais e mais complicado incluindo coisas gostosas como conectar um banco de dados ou manipular arquivos ou carregar muitos dados e memória é muito custoso ficar iniciando e terminando esses programas toda vez foi quando surgiu a primeira gambiarra na forma de coisas como o mod pão e depois o mod php que são módulos compilados dentro do apache e que dá inclusive acesso às estruturas internas do apache toda vez que um novo forte do apache efeito ele já pré carrega com a capacidade de executar pão php sem precisar carregar o interpretador separadamente isso
é mais rápido do que seja e puro porém é um terrível buraco de segurança já que bancos no pro ou não pega perdão acesso ao apache inteiro ea tudo que ele tem acesso na máquina a segunda gambiarra para evitar ter que carregar os interpretadores a cada nova requisição foi o fast seja ir que é basicamente um segundo servidor que carrega paralelo ao apache ou outro servidor web ele mantém o interpretador e seu programa ativo sem memória e pode servir múltiplas requisições sem precisar ter me na e reiniciar toda vez daí o servidor web e o
servidor de fé seja e se comunicam via tcp outras formas como unix socket que é um recurso em unix para que dois processos consigam se comunicar quando uma requisição chega ao apache ele passa essa informação e outros metais dados para o servidor de fé cgi executar o programa pão php e devolve a resposta resultante de volta pro pachi devolver pelo navegador uma grande vantagem disso era poder isolar os dois servidores de forma que um não invada o espaço do outro em caso de bugs de segurança mais em windows você não tem o conceito de forte
na p-ii de alto nível do sistema o cliente próximas internamente o quer no do windows permite algo parecido com forte e incluindo o recurso de cal ou cópia on light mas não é tão usado e mesmo assim ainda uma ordem de grandeza mais lento e isso explica porque os primeiros a pacha era uma porcaria nenhum em douz nem perto da performance no linux e por isso mudávamos preferência aos ao próprio e s da microsoft só porque dois programas com pirão para dois sistemas operacionais diferentes e rodam não significa que rodam igual coisas feitas para windows
funcionou melhor em windows e coisas feitas para linux só rodam bem em linux lembrem se disso dada essa limitação você acaba sendo obrigado a usar mais três que são linhas de execução em paralelo dentro de um mesmo processo já falamos da discussão de compilação estática verso compilação dinâmica é hora de falar de outro dilema da programação programação baseada em processos com forte versus um processo com múltiplas trés hoje em dia usamos muito mais travis mas processos com foco e não estão obsoletos por exemplo o conector do banco de dados do posto diz funciona via forte
assim com muitos outros softwares como eu disse antes toda vez que você executa um programa o sistema operacional carrega os bits em memória e iniciam uma entidade chamada processo o sistema operacional tem o poder de matar esse processo ou pausar o reiniciar sua execução dentro desse processo ele não tem consciência de todos os outros processos ao seu redor a menos que tenha privilégios de perguntar o sistema operacional para todos os efeitos ele se sente como se fosse a única coisa rodando na máquina quando o processo precisa escrever na memória ele não escreve diretamente pense na
memória como um livro com páginas numeradas seqüencialmente de 1 até um número grande num computador de 32 bits temos a capacidade de mapear de 1 até 2 elevado a 32 ou seja mais de 4 bilhões ou 4 gb num computador de 64 bits temos a capacidade de mapear até dois elevados a 64 ou mais de 18 500 bilhões de bytes ou 18 hexabytes que é bastante coisa se tem vários programas da memória você imaginaria que o certo seria cada com o programa começará a partir de uma determinada página dessa memória tipo o word começando na
página 1 o excel na página sem o chrome na página 200 e assim por diante mas isso seria extremamente complicado de controlar em vez disso todo mundo começa na página 1 mais de uma memória virtual e o sistema operacional que se encarrega de traduzir a página honda memória virtual do excel para a página sem da memória real então o excel nunca teria como acessar memória do chrome e assim começamos a criar um mínimo de segurança entre os programas no ms idosa antigo que rodava no que chamamos de modo real cada programa tem acesso a todos
os endereços reais da máquina mas não tinha problema porque na ms dós só dava pra rodar um programa de cada vez para trocar do word para o excel tinha que primeiro sair do word daí carregar o excel mas hoje em dia rodamos vários programas em paralelo a isso facilita muito para nós programadores porque não precisamos nos preocupar com a memória de terceiros esse precisamos fazer algo como um servidor web onde cada conexão de um cliente tcp precisa rodar em paralelo a outras conexões podemos fazer só um forte do processo para cada um cada forte é
um processo isolado e daí união afeta a memória do outro tudo funciona perfeitamente mas se caro ou não é possível fazer fox a única outra solução é dentro de um único processo iniciarmos múltiplas travis que são bem mais baratas que fóruns cada tragédia e daí pode servir um cliente perceber conectado ao processo mas agora começamos a ter problemas porque não existe memória isolada para cada tragedy dentro do processo cada três têm acesso a toda a memória virtual do processo por isso você vai ouvir falar caso ainda não tenha passado por isso que escrever programas que
são multi threaded é uma dor de cabeça porque você precisa garantir o que chamamos de trades e fitch ou seja código seguro para mudar entregues nesse caso você como programador tem a responsabilidade de escrever código que quando executado numa tragédia não pise sem querer na memória de outra tragédia e executando ao mesmo tempo a forma de fazer isso normalmente envolve toda vez que você precisa escrever algum dado e memória primeiro você notifica o sistema que vai escrever pega o que chamamos de um lock escreve e depois libera esse locke se falhar em pegar o loc
se arrisca corromper a memória de outra tragédia se esquecer de soltar o loc vai causar um debilóide e-book a outras tragédias de pegar o loc pense essa rotina e milhares de linhas de código ou seja dor de cabeça recapitulando um programa binário é executado pelo sistema operacional no espaço de memória isolado chamado processo cada processo pode ser clonado via forte no linux e cada processo pode rodar uma ou mais trash dentro dele um servidor web é um processo e para servir múltiplas requisições ele faz um forte pra cada uma da inace seja e o fat
seja mas em windows como fortes são ordens de grandeza mais caros o servidor web s precisa de outro truque e isso veio na forma do padrão e zap que é como se fosse um programa escrito para seja ir mas com modificações para ser 36 uhf e compilado dentro de uma biblioteca dll que é carregado pelo ie s o servidor web da netscape que não existe mais que a outro padrão similar o isaac muito programadores de delphi já devem ter feito programas para web compilado dll esap ou n zap com o advento de coisas como seja
ir fest seja iesap n zap e outras arquiteturas e o fato de termos interpretadores que possibilitam escrever código que tem pouca dificuldade de rodar porque não precisamos nos preocupar com compilação e gerenciamento de dependências é quando linguagens interpretadas como pão php e asp clássico ganhou notoriedade no mercado especialmente com o time do início da bolha das pontocom homs a partir do meio dos anos 90 voltando atrás mais um pouco como faz para várias tragédias rodar em paralelo pensa assim um processo tem pelo menos uma tragédia para o processo executar múltiplas três ao mesmo tempo cpu
tem uma coisa chamada agendador ou esquece a dor mas só pode rodar um número limitado de trades ao mesmo tempo então ele pausa um atleta de execução de acordo com vários critérios e acorda outra tragédia que estava pausada para dar a chance dela rodar e vai fazendo isso os vários travis de tal maneira que você tem a impressão que estão rodando ao mesmo tempo e quando você pede o tal um lock é esses queda porque vai evitar que outras tradings pisem no seu calo por exemplo programação multi threaded vai ser uma longa jornada para vocês
que estão iniciando e até hoje considerada uma das coisas mais difíceis para um programador realmente entender só competindo com gerenciamento de memória e segurança entendendo esses conceitos básicos que eu expliquei muito rapidamente podemos começar a entender coisas como o surgimento do java você precisaria ter tido experiência com cepas plasmou tholl que lhes pi para realmente entender como java nasci mas vamos começar por aqui em 1991 surgiu uma nova linguagem na çã com o codinome de houki e o objetivo inicial era um sistema para set top boxes naquela época tinha o conceito que as pessoas tenham
caixas multimídia nas salas e integrando a tv a cabo e outros conteúdos esse conceito anos depois viria se tornar um vivo ouro qo o mesmo google chrome cast e apple tive de hoje que inclusive seriam substituídos plasmati tvs e consoles de videogame também lembre-se que linux ainda estava só no começo ainda era rudimentar e coisas como android ainda está muitos anos à frente java embute alguns conceitos de compiladores e interpretadores mais especificamente de máquinas virtuais com isso você tem a jvm ou java virtual machine uma máquina virtual é uma evolução de um interpretador em vez
de ser só o programa que executa código escrito numa determinada linguagem como java jvm tem uma ambição maior ele quer ser o próprio sistema operacional e abstraía máquina real por baixo o programa em java não existe um sistema operacional linux ou windows rodando num processador intel org só existe jvm o conjunto todo o que há são inventor tem várias ferramentas diferente de um interpretador de mais similar a uma linguagem compilada como seplan eles e para a fase de compilação da fase de execução o compilador javascript pega seu código-fonte escrito em java e eles usaram o
mesmo nome pra tudo isso dificulta explicar eu sei e compila numa representação intermediária que chamamos de java bytecode na prática lembra que eu falei que o compilador de ser tradução códigos e instruções nativas do sistema operacional e do processador e se seu sistema operacional processador forem a jvm também falei que cada processador hardware vem com um conjunto de particular de instruções que só roda nesse processador no caso do jvm é a mesma coisa é isso que chamamos de bytecode então quando o java c compila ele gera um binário nativos só que específico para uma máquina
virtual java na época se pesquisou inclusive fazer um processador hardware mesmo que entende essas instruções mas nunca foi mesmo pra frente entenderam a jvm é como se simulasse um computador assim como um interpretador você carrega jvm e aí ele carrega o seu programa abstrair do sistema real por baixo mas diferente de um interpretador ele faz as mais pesadas e tem premissas mais caras java é péssimo para ser algo como substituto de pão na linha de comando porque a inicialização dele é extremamente lenta até hoje isso porque ele tem um gerenciador de memória muito mais sofisticado
do que a maioria dos interpretadores e carrega muito mais coisas na inicialização por causa disso também não é bom pra fazer forte para rodar múltiplos processos porque o custo desse gerenciador de memória é extremamente alto como o simulador de um sistema operacional nesse sentido ele se parece mais com windows do que com linux então o caso de uso ideal do java e rodar um único processo sozinho na máquina e seus programas rodam em paralelo dentro do jvm ea jvm substituir o sistema operacional para gerenciar seus programas rodando em paralelo e cada programa seu precisa usar
trés para executar coisa em paralelo dentro dele viu porque eu disse que jvm praticamente substitui sistema operacional você tira o máximo dele quando não roda mais nada além do jvm da todos os recursos da máquina pra ele gerencial e eu disse que compiladores como ser fazem dezenas de otimizações para reescrever seu código de maneira que rode mais rápido possível a jvm vai um passo além ele fica medindo com o seu programa roda e otimiza em tempo real para binário nativo da máquina por baixo para fica mais rápido é a técnica que chamamos de digit o
compilador just-in-time javascript faz algo semelhante e navegadores modernos com o safari ou chrome um otimizador em tempo de compilação demora muito para compilar se você já tentou combinar um programa manualmente dependendo do tamanho já viu que pode levar de segundos a minutos uma página web não pode demorar tanto para carregar em vez de tentar otimizar tudo ele só deu o código fonte em java script e faz o mínimo para interpretar e executar mas à medida que ele executa um compilador dite vai otimizando o seu código em tempo de execução e só o código que está
executando se você por acaso uma biblioteca que nunca é usada o compilador dite nem vai perder tempo tentando otimizar esse pedaço então é tipo meio termo entre um compilador alterou a regra of time como em ser e um interpretador a vantagem do java compilar um binário intermediário debate conde e rodar numa jvm é que eliminamos o problema de ter que ter compiladores para cada arquitetura de computador como intel orm basta que cada tipo de computadores sistema operacional tem alma jvm você já deve ter visto isso com programas java que rodam em mac ou linux ou
windows mas em cada um você precisa baixar um java específico uma vez só além disso o java cresceu rapidamente temos quase tudo escrito em java assim como uma das maiores idéias você era sua portabilidade para diferentes arquiteturas contanto que você recompilar se o código ser no caso do java eles também queriam portabilidade escrevendo o máximo possível de tudo em java aliás essa é outra diferença do java com interpretadores em java você tem praticamente tudo que um sistema operacional como o windows ou linux oferecem mais escrito tudo em java e embutido dentro da jvm em interpretadores
como pão o python php ou ruby eles dependem bastante no sistema operacional por baixo interpretadores de código aberto como eles nunca tiveram a ambição de substituir o sistema operacional mas sim de se integrar eles pra fazer isso usamos o conceito de badin que é uma forma do interpretadores pura uma biblioteca de código nativo o acesso às suas estruturas internas e sua memória então em vez de escrever uma biblioteca de criptografia toda em python ele simplesmente uma peia para o que o o psl já instalado o sistema operacional oferece o php eo be fazem a mesma
coisa e isso inclusive cria um problema se a biblioteca nativa que você está fazendo badin não for trade safe você bloqueia o interpretador de rodar tragédia sem paralelo isso acontece o tempo todo em todos os interpretar dores por isso também é mais difícil de fazer interpretadores rodarem em todos os sistemas operacionais muitas vezes eles rodam mas algumas funcionalidades são diferentes ou têm qualidade inferior porque as mesmas dependências não existem em todos os sistemas operacionais por isso mesmo nunca faça programas complexos que rodam no interpretador no windows por exemplo esperando que vai funcionar igualzinho em linux
ou mac entre mac e linux existe mais compatibilidade porque ambos compartilham muitas das mesmas bibliotecas open source no windows elas precisam ser remendada xrace ligar bibliotecas proprietários que só existem no windows portanto se você vai cuidar e linguagens e interpretados como essas prefira sempre nus ou mac não é uma questão de ser anti microsoft ou algo assim os interpretadores que foram criados em linux funcionam bem só em linux mesmo que exista uma versão para windows next passaram a ser construído sobre um unix baseado na queda do psd unix quando o s10 saiu em 99 sistema
esse que foi a evolução do nextstep criado no fim dos anos 80 depois que steve jobs foi removido da apple ele é um unix de verdade assim como o solaris da ação ou hp 1 x eles se parecem com distribuições linux porque o linux tentou seu clone de unix e eles são razoavelmente compatíveis porque os únicos modernos e distribuições linux usam mais ou menos as mesmas ferramentas gerais incluindo o mesmo compilador gcc e suas dependências como gibis e só windows que é completamente diferente dentre os principais sistemas operacionais eo java nasceu com a promessa de
permitir que você pudesse escrever programas que rodavam em qualquer lugar porque havia jvm para linux pra solares para mac para windows por isso ele se popularizou tanto tão rápido e também coincide com o começo da bolha da internet com a cena ainda mais a adoção de java vendo tudo isso a microsoft não quis perder o bonde primeiro aproveitando a experiência com visual bens que visou repor os pães que compilaram binários nativos compatíveis com windows eles tratar o enders régios berg criador do turbo pascal e do objeto de pascal do delphi da board seu primeiro produto
foi o visual dipôs plus quer uma versão de java da microsoft que compilava para uma jvm proprietária e com várias funcionalidades incompatíveis à linguagem tinha a mesma cara do java mas não era compatível com java na çã por conta disso os programas compilados em jp os planos rodavam de forma mais eficiente só que o bairro de cocody era incompatível com a jvm da sã e como passa a se chamar java precisava ser compatível com da sã ação processou a microsoft o jp esposa acabou sendo descontinuado por conta disso mais as suas sementes é que deram
origem ao que você conhece como os lr ou como língua de ram time ao freiburg dot net ea linguagens e sharp por isso as primeiras versões de chave pra mim é um cara de java misturado com delphi veja como a jvm executa byte codis binários qualquer linguagem pode ser transformado nesses bate com diz assim táxi que conhecemos como java é só um deles por isso hoje em dia você tem linguagens como escala closer e cobrem que compilam para o mesmo vai ficou de ródão jvm mas a microsoft usou essa característica antes e além de ser
sharp já fez também visual basic dot net e ambas compilavam probat code dos lr os lr ao contrário do jvm fazia muitos bailes direto para o sistema operacional para conseguir ter a melhor performance portabilidade não é importante porque bastava rodar onde o windows rodava e nessa época microsoft ainda considerava o mundo open source como inimigo coisa que só veio a mudar nos anos recentes essa é a grande diferença entre java e dot net embora ambas sejam máquinas virtuais e os códigos compilem embate com diz o java tinha como meta a rodar no maior número de
dispositivos quanto possível e o dot net só em windows mas as coisas foram mudando essa ambição da sãs se mostrou muito à frente do seu tempo a ação teve muitas em gerências perdeu o valor que foi comprada pela oracle e desde antes disso com a depressão depois do acho da bolha da internet em 2001 que ela evolui a passos de tartaruga em paralelo no mundo open source surge uma iniciativa ousada a microsoft abriu a linguagem c sharp com um padrão aberto é que uma então miguel de casa do projeto de nome decidiu tentar implementar os
lr no linux esse projeto recebeu o nome de munno levou quase dez anos para conseguir de fato criar uma série r e todo freimar que quase totalmente compatível com o da microsoft porque não era só uma questão de fazer a máquina virtual e o compilador era necessário também escrever do zero todas as bibliotecas que compõem o pacote dot net framework e muitas delas dependem de brindes para bibliotecas nativas do windows como já falei isso foi um dos maiores problemas para conseguir compatibilidade no linux por exemplo as bibliotecas para fazer aplicativos desktop tipo o word da
vida usavam bibliotecas nativas do windows para gerar janelas nativas e não janelas diferentes como java fazia com seu truque de suingue do jeito do java o peso era maior que a performance era menor mas usando bibliotecas nativas a velocidade dos e sharp do dot net pra desenhar as mesmas janelas era muito maior e mais comparável com o que o visual básico você pôs pois faziam antes o mono linux fazia bailes com o codinome para tentar conseguir ter performance similar depois de muitos anos e com a troca de si ou com a saída de steve ballmer
ea entrada de satya nadella em sua política de boa vizinhança a microsoft se tornou finalmente mais amigável ao mundo open source e acabou comprando a empresa de miguel de icaza a marin e o nono foi renomeado como dot.net core e hoje está em caminho de substituir o antigo dot net framework e apesar dos lr suportar múltiplas linguagens na prática todo mundo programa ou encharcou o visual basic dot net mesmo e para o episódio de hoje acho que já cobrimos bastante terreno eu tentei explicar um pouco sobre como as coisas funcionam por baixo dos panos a
ideia de cpu sistemas operacionais gerenciamento de processos de memória diferenças entre linguagens culpi lados de forma estática e dinâmica o que são interpretar dores e conceito de máquinas virtuais e vai te codes e também as diferenças de rodar coisas em paralelo com forte e contradiz os anos 90 foram o terreno para o crescimento de java e dot net no mundo mais proprietário e em paralelo para a evolução do mundo open source como um todo do linux e iguais interpretados com o php estamos ainda só começando o século 21 no próximo episódio vamos precisar do que
eu expliquei aqui pra você finalmente começar a entender as diferenças entre todas as linguagens modernas como eu já disse no episódio anterior se eu fiz meu trabalho direito espero que vocês tenham ficado com mais dúvidas do que quando começaram a assistir mandem suas dúvidas nos comentários se curtir um vídeo mantém um jóia compartilhe com seus amigos não deixem de assinar o canal e clicar o sininho aguardem a parte 2 sobre tecnologias bem quente na semana que vem a gente se vê até mais
Copyright © 2024. Made with ♥ in London by YTScribe.com