Python? Java? Rust? Qual a Diferença? | Discutindo Linguagens

241.66k views8500 WordsCopy TextShare
Fabio Akita
Finalmente vou falar sobre linguagens que você goste ou use, mas vou fazer isso do meu jeito: escova...
Video Transcript:
Olá pessoal Fábio Akita hoje é dia de fazer um episódio que vinha postergando faz anos falar sobre as principais linguagens de programação em uso no momento quem acompanha o canal sabe que eu Evito ao máximo mostrar código desta ou daquela linguagem de vez em quando eu mostro uns trechos de JavaScript porque eu sei que a maioria sabe um pouco pelo menos e muitos casos eu uso pseudo código que não existe quando foco é conceito Eu tenho algumas linguagens favoritas obviamente Rubi um pouco de elixir Crystal todas as linguagens meio parecidas em sintaxe embora diferentes por
baixo e mesmo assim eu acho que eu nunca mostrei código delas em um vídeo mas hoje eu quero compartilhar algumas curiosidades técnicas e opiniões pessoais que muitos assistindo provavelmente nunca pararam para pensar a intenção não é fazer prós e contras falar bem ou mal de qualquer linguagem A ideia é fazer você enxergar sua linguagem favorita com outros olhos eu já vou avisar meu objetivo não é dizer que linguagem X é melhor que linguagem Y nem nada disso então os macacos de auditório de torcida organizada pode-se retirar programação não é para isso e código não liga
para sua lealdade a essa ou aquela tecnologia na verdade a tecnologia inovação recompensam a deslealdade quem conhece mais tecnologias diferentes sempre vai ser melhor e na verdade Esse vídeo é para mostrar isso iniciantes vão ter seus níveis de ansiedade indo para as alturas porque eu vou mostrar um monte de coisas que vocês nunca viram não se aflijam anotem os termos que não conhecem estudem depois voltem para assistir de novo a primeira coisa que eu quero levantar é o seguinte Python nos últimos anos aumentou rápido de popularidade principalmente por causa de projetos como Júpiter notebook pandas
tem sua flor pai torty e outros projetos relacionados à datasais machine learning se você se interessa por essas duas áreas acho que é seguro dizer que a maioria dos cursos e artigos a respeito vai usar uma ferramenta feita por isso parece que Python é a linguagem que se deve aprender certo não tá errado e não me entenda mal apesar de não ser minha linguagem favorita eu não tenho nenhum problema com python o que eu quero demonstrar Hoje é mais dar uma perspectiva pé no chão primeiro de tudo na minha opinião Python tava no lugar certo
na hora certa nos anos 90 a linguagem de script mais popular no Nascente mundo de Linux foi pro acho que muitos iniciantes aqui nunca ouviram falar mais muitos inscritos de configuração e administração de sistemas Linux eram escritos em prol e quando a web começou a cirurgia as primeiras aplicações interativas web o que conhecemos hoje como programação back-ind era ou em ser ou em prol porque essa linguagem era mais flexível para lidar com Strings como um HTML por causa da sua principal funcionalidade o regular expertions ou reggaes Mais especificamente PCR quem programa é objectivo e seu
Swift para iOS Mac e já tentou usar requer deve ter como é um pouco diferente do reggaex compatível com prol isso porque a Microsoft a Apple usa um re-rex com sintaxe baseado em Ice you que a International componet for you Cold eles são parecidos mas tem pequenas diferenças que podem confundir quem não sabe que existem dois padrões diferentes de regax enfim por causa de Gregory expressions pro sempre foi muito usado para processar textos Logos até coisas consequências de DNA em pesquisa de genome coisas assim já que envolve muito paternamente de sequências Porém na virada do
século o pessoal de pro que se dá Passos maiores que as pernas Eu lembro que queriam desenvolver um novo Pro 6 como uma virtual machine que suportasse múltiplas sintaxes de linguagens por cima o projeto perrot esse ciclo de desenvolvimento levou anos e nunca chegou no fim o pro cinco que foi a última Grande diversão ficou estagnado e sem novidades por muito tempo enquanto isso outras línguas evoluíram mais rápido de forma mais pragmática e uma delas foi o Python não sei se foi a Red Ret que adotou primeiro mas o fato é que com a incerteza
no futuro do pão Acredito que muitos começaram a migrar para Python Python também tinha uma sintaxe e ergonomia muito mais modernas por não era a Originalmente orientado a objetos embora tivesse como gambiarra classes completos era uma linguagem dinâmica a gente pagem fraca então bugs por causa de coerção de valores e tipos errados não era incomum mas por influenciou todas as linguagens de script que vieram depois incluindo pai Tom Ruby o mais Óbvio PHP de onde vocês acham que vai variavam Com cifrão vieram o principal Legado de pro Na minha opinião foi popularizar a viabilidade de
linguagens dinâmicas para aplicações web popularizar o uso de regular Expression para paterny matching de textos várias linguagens até hoje usam a sintaxe específica de prol comem Ruby roads acho que go também porque usa biblioteca R E2 que é compatível com PCR na realidade Nem todas são 100% compatível por em Python se usar biblioteca r e o método met tem comportamento como se toda reguex começasse com crase que em prol significa dizer para começar o match do começo do Sting ele também não tem o operador Global barra G para isso se usa o método re ponto
sub São pequenas diferenças mas pode confundir quem conhecer e se costuma usar vinho como editor que suporta reguex pro de qualquer forma linguagens que quase é totalmente suportam assim táxi de reggaes de pros são Python java script PHP Ruby como eu falei antes a biblioteca RN é só uma casca para biblioteca olho guruma quem japonês significa carro do demônio sei lá porque a jamiguru uma de rubi é a mesma coisa a classe re-gex java script é também o amigurumi é uma das melhores e mais rápidas e bibliotecas de reggaes que existem mas não é a
única linguagens como você é charque você plus plus usam outra biblioteca R E2 não confundir com o Resident Evil 2 Acho que nem e nem R2 forçam a sintaxe de pro eles oferecem o motor mas os detalhes da sintaxe cada linguagem Pode configurar como quiser por exemplo secharpe tem a opção de usar verbatin string litro que é escrever arregax com @ na frente assim não precisa escapar caracteres especiais dentro do re-rex com barra ao contrário algumas linguagens não usam estilo pro e sim a sintaxe I see you de International Swift da Apple as funções Pierre
asterisco de PHP e eu pessoalmente gosto mais da sintaxe pro quando precisava usar Skill para programar mobile de IOS em Swift o Object BC Eu lembro que vira e mexe o tropeçava na sintaxe 11 anos atrás eu fiz um pequeno experimento em objectivo e c para importar um homem buruma e adicionar sintaxe de requecas de pro para programar IOS é uma das poucas coisas que nós sobrou no meu gifth hamme a maioria dos meus código sempre foi para projetos de cliente e por isso eu tenho bem pouca coisa aberta essa foi uma delas e 11
anos atrás foi 2011 pouco mais de dois anos depois que a aep Store abriu oficialmente além do regex não ser compatível com performação de data e hora também não era compatível com a biblioteca time de línguas sabe a função strf time onde podemos pedir para formatar data e hora usando o string de template com porcento de barra por cento m/s em objectivo e sei depois Swift usando a classe date formatura com o método Date formate o mesmo template fica assim dd/m/y ta ta é bem diferente e isso me incomodava porque Rubi usa o mesmo padrão
de c mas de novo objectivo e c isso que usa um padrão diferente de reggaes onde assim táxi puro ainda é forte muitas linguagens em vez do formato Ice e o no caso de formatação de data e hora o formato aí se o é mais forte do que strf time de ser plus plus ainda usa o de c mas Swift já você share PHP java script usa um formato a su Tecnicamente por serem padrões internacionais de unicode o formato a Steel é que deveria ser o correto mas por direito formatos derivados do mundo e Onix
e Linux continuam sendo usados e De novo naquele projetinho da biblioteca que eu fiz para objectivo e ser além de importar o amigurumi também tem uma versão de formatador de data e hora usando a função strf time da biblioteca time de C assim eu poderia usar os formatos de Linux e Contrariar o formato Ice u e porquê só para mostrar que era possível e eu contei essas duas histórias para ilustrar um ponto eu não sei se vocês entendem que muita coisa de Java script ou Python não são escritos em JavaScript ou o pai tem ciência
a classe reguex pedir java script ou é rede Python são meras casquinhas mas por baixo chamam bibliotecas escritas em C eu digo isso porque muitas linguagens São escritas nelas mesmas compilador de Rusty é escrito em Rusty compilador de GO não é inscrito em go muito doping jdk de Java é escrito em Java linguagens compiladas costumam muitas vezes ter escritos nelas mesmas isso não torna automaticamente uma linguagem melhor ou pior apenas facilita para os desenvolvedores dessas linguagens não ter que ficar mudando de linguagem o tempo todo por exemplo escrever o compilador em C mas as bibliotecas
em Rusty eu lembrei disso quando conversei com os criadores e mantenedores do rubi e eles comentando que escrevem mais cedo do que escreve em Rubi isso é mais uma curiosidade Não começa a brigar em Red dizendo que sua linguagem é melhor porque é bootstrapped ou seja escrito nela mesmo mais importante é o seguinte linguagens interpretadas de script como Python Rubi HP herdam muitas características da plataforma onde nasceram do ser diferente de Java ou que é na maior parte escrita nelas mesmas linguagens discript costumam parecer mais cascas para as funcionalidades de ser Veja a função de
formatação de data e hora s Porque você acha que tem esses nomes porque herdaram da função strf time da biblioteca time cujo cabeçalho se chama time ponto H se não Linux abrir um terminal e digitar mano strf time vai dar os detalhes da função original de C essa função fica disponível numa biblioteca compartilhada chamada libc ou gnbc que praticamente todo o programa que roda em Linux carrega e usa vamos ver mais exemplos em Python claro muitos dos métodos do módulo US são derivados da libc temos os ponto mkdir para criar diretórios não por acaso é
o mesmo nome do comando que você usa em qualquer terminal de linha de comando para criar diretórios porque ambos usam a mesma função da nbc ou o s.o.tv que é o mesmo nome da função da nbc para pegar variáveis em ambiente tem funções do modo sitapes que como o nome disso são tipos de ser como citar que compara dois blocos de memória e Retornam inteiro em partic vários métodos do módulo map herdam funções do cabeçalho MEF ponta H da IBC como mexe. sim para calcular seno ou MEC ponto Pau para calcular a potência de um
número a mesma coisa vale para java script Rubi PHP e eu quero pegar esse gancho para voltar para os projetos mais populares de Python vamos pegar o pandas que é uma ferramenta muito poderosa flexível e razoavelmente amigável de usar para fazer análise e manipulação de dados povo de data sai você acha que começa aprendendo pandas se abrirmos a página do projeto no github podemos ver que a maior parte é escrita em Python mesmo mas essa não é a história toda como todo bom projeto moderno de Python tem um arquivo de recurs que lista as dependências
que o projeto precisa carregar para funcionar vamos dar uma fuçada Olha tem uma quantidade enorme de bibliotecas Mas duas das principais e o sai pai vamos começar pelo num pai que é importantíssimo porque fornece coisas como a rei multidimensional funções de álgebra linear transformada de fourier e mais ou abrir o projeto no github e olha só um terço é código C um dos pontos fortes do num pai é justamente facilitar e integrar com bibliotecas em C e fortran é por isso que para gerar o pacote para Mac por exemplo o script que tá na Wiki
manda instalar o pacote de fortran ou na página de Week para Windows precisa do msvc que é o pacote de compiladores de 6 Plus ou estúdio da Microsoft sim para gerar o pacote de um projeto de Python precisa de compiladores de ser CPP sabiam disso num pai é requisito para usar o sai pai que é um conjunto de módulo científicos para estatística otimização integração álgebra linear processamento de sinais e mais e muito mais ele usa Usa Reis multidimensionais de novo pai por exemplo e no que sai pai é feito quase um quinto do código é
fortran e quase outro quinto é seis células ou seja pelo menos dois quintos do projeto todo também não é em Python e também precisa de compiladores de forno Plus Todo projeto de data esse feito em Python precisa usar num pai e sai pai que são os grandes diferenciais e eles são feitos em boa parte infortran plus plus e não em Python E isso não é para minimizar denegrir ou falar mal de Python mas sim para quem não sabia entender que só porque a cara da frente é uma linguagem não significa que por baixo do capô
também é e o tensor folk todo mundo fica raspado para machine learning vamos ver a parte do kit Hub Olha só bem mais da metade do código em C plus plus só um quinto dele é Python o grosso o motor mesmo é todo em ser plus plus e o pai torque que é redes neurais acelerado por GPU metade desse código é em ser Plus e isso porque eu não tô olhando as dependências no arquivo de quartments uma parte significativa que não tá contando aqui é a biblioteca de cuida da NVidia e os shaders pra Aceleração
em GPU que podem ser escritos tem várias linguagens incluindo o pai mais confiram para HL ou glsl que é o open GL shaderland eu falo sobre linguagens shaders e g no vídeo da longa história de CPU zpus depois deem uma olhada para usar esses projetos sabendo um pouco de Python é suficiente mas se alguém queria realmente entender como redes neurais aceleração via GPU para esse tipo de computação realmente funciona Obrigatoriamente não é Python e sim ser Plus linguagens de shaders para GPU eu tô sendo pedante Nisso porque da forma como muita gente faz propaganda parece
que é tudo feito e basta saber pai então para resolver tudo nessa área o que não é verdade e de novo meu objetivo não é pegar no pé do Python como eu contei no começo ele tava num lugar certo na hora certa quando o Percy 5 foi desaparecendo linguagens discript como pro ou Python que foram feitos para funcionar muito perto do sistema operacional são ótimos para funcionar como cascas para as bibliotecas de alta performance feitos em ser ou ser Plus era esse tipo de coisa que se fazia comprou que era menos ruim do que escrever
clipes de sh ou Dash e depois passarmos a usar Python que táxi bem simples e espartana caiu como uma luva para administradores de sistemas que precisavam fazer coisas rápidas com o tempo passou a ser adotado em distros com programas como o Conda que é escrito em Python e serve para instalar e gerencia pacotes não confundir com anaconda que é outro projeto para computação científica daí o pessoal de pesquisa de um Google passa anos desenvolvendo um tensor da Vida em ser Plus nesse estágio ele é difícil de usar precisa saber ser Plus em cima dele fizeram
scripts em Python e um ferramental com mais usabilidade e mais simples de usar para a maioria das pessoas Essa é a vantagem do Python diferente do tensor Flow de Python o tfjf ou tem surf.js é na maior parte escrito realmente em taipa script e java script Assim como empatam as partes que exigem performance e fala diretamente com hard como GPU são feitos e Close mas na versão djava script ele pode rodar no navegador e utiliza suporte a webgl e web a 100ml a versão script não faz tudo que é de Python mas é suficiente tem
o tensor Flow Lite para rodar em smartphones também e enfim o principal é entender quando precisarmos de performance normalmente precisamos mais do que Python e para não pegar só no pé do Python java script é similar tudo que é impressionante e roda rápido no navegador não é mérito do JavaScript sim do navegador que oferece apis como webgl para dar acesso à aceleração via GPU e todo o navegador é feito em C plus entendam toda a linguagem interpretada Depende muito do sistema operacional e outras bibliotecas instaladas voltando ao ponto onde linguagens como Python java script ou
PHP Depende de bibliotecas como ali BC tanto que os nomes das funções são as mesmas das versões em C E se alimes se costuma vir em toda distru Linux mas não em Windows ou Mac Como que faz para rodar Python em Windows Vamos pro github do spayton e eu vou te mostrar o que tem embaixo do tapete se procurarmos dentro desse repositório MS Windows temos oito páginas de resultados e olhem esses trechos se nunca programou em C e não sabe o que é pré-processamento deixa eu pegar um arquivo aleatório desse resultado Vamos abrir o arquivo
ssl.c olha aqui na linha 628 tem um if defms Windows se não existisse pré-processamento seria como se tivéssemos duas versões desse arquivo uma chamada ssl.c que teria esse trecho assim e outro arquivo chamado ssl.c traço MS Windows cujo trecho seria escrito dessa outra forma aqui conseguem ver a diferença o compilador se tiver em Windows vai compilar o código com esse if a mais chamando essa função sete from Windows Air que só precisa no Windows em Linux ou Mac esse código não existe E isso acontece em dezenas de arquivos oito páginas de resultados no github o
código do Python para Windows é diferente da versão de Linux por isso se Python de Windows não é igual ao se Python que não é igual ao se Python de Mac isso vale para tudo PHP de Windows java script de Windows Então vamos falar de node JS o node é basicamente um projeto de ser Plus um quinto desse projeto é só ser plus plus Mas precisamos falar de uma das dependências o Lib e o vi o coração da principal funcionalidade do note que é o famoso é 20 loop o reactor que implementado quase 100% em
C vamos abrir a página dele no github olha só aqui embaixo 97% de c mas o resto é só coisa administrativa por isso é 100%. e o que é libiuvi novamente sendo uma biblioteca de ser num terminal de Linux podemos usar o comando humano que se alguém tinha dúvida significa manual e não homem normalmente bibliotecas de ser instalam Sua documentação nesse formato e como diz aqui esse projeto foi feito pelos desenvolvedores do novo JS para ser uma biblioteca com capacidade para rodar em diversas plataformas como Windows Mac BSD e é quem Abstrai as funcionalidades de
ai ou assim que o node precisa para o seu reactor cada sistema operacional implementa ayu a sínclano diferente Linux costuma ter suporte a Ipu e Unix BSD tem Key kill Windows tem iocepic ayo complion parts que muitos argumentam que é superior Apple ou seja a principal funcionalidade do node só é possível porque quem de fato fornece o músculo é o sistema operacional o libid é mais uma casca em Ceto Plus para abstrair esse diferentes formas de fazer aí o A5 e tornar possível o node rodar em qualquer sistema operacional e o demo o competidor que
muitos considera melhor que o node Eu nem quero tentar entrar nessa discussão de quem é o melhor mas se abrirmos a página do dano vemos que mais da metade mais de 60%, é escrito em Rusty Ah será que é por isso que ele é melhor que o node Então na verdade não se procurarmos por inibir nesse repositório vemos que o Rusty importa as mesmas funções do NIB e ouvido então em termos do evento ambos fazem a mesma coisa Claro que podem parametrizar para se comportar diferente mas a fundação é a mesma e de novo S
Plus eu poderia passar o dia todo dando exemplos em Rubi em PHP até mesmo em Java mas ué tudo que é de Java não é descrito todo em Java e na realidade não como o último exemplo vamos abrir a página do pjdk e olha aqui embaixo 13% do Java é escrito em C plus mas o que vamos ver olha só muita coisa do hotspot que é o motor do DIT o Justin Time Company da jvm é escrito em C plus nem mesmo Java que nasceu nos anos 90 com a frase de White Once upower é
puramente escrito em Java e se isso não ficou Claro olha a página de resultados de arquivos Plus tem pelo menos 100 páginas de resultado uma parte considerável da jvm não é feita em Java E isso não é perseguição Rubi pega HP dot net go Rust Swift e todo o resto tem partes consideradas que depende de ser tuas coisas como a libc coisas de criptografia como Open SSL ou alternativas como libódio imagina se toda linguagem tivesse que fazer criptografia do zero o mundo já tem bugs de segurança demais é melhor todo mundo reusar o que já
existe de melhor e mais Maduro e isso só falando em linguagens quem fez Ciências da Computação decentemente não perde muito tempo com discussões de melhor linguagem mas o pessoal de desenvolvimento é por alguma razão Vira e Mexe entra nesse tipo de argumento então só para complementar além de linguagens no mundo web temos diversos outros serviços e componentes que precisamos usar no nosso dia a dia por exemplo no que é escrito o banco de dados postires é mais de 85% de c e o mais Kelly Mais especificamente Maria DB metade as pessoas é quase 40% é
ser bom mas deve ser porque são bancos velhos né um mais novo como um bebê deve ser outra coisa mais moderna não 72% Spot Plus e o rei diz que usamos para cash ou filhas o tempo todo é quase 80 de c mas não significa que tudo é em seu setor plus plus vejamos o banco de dados distribuídos caçamba esse é quase 100% feito em Java e não é o único a parte gráfica que é o sistema de filas que eu falei no Episódio Passado é quase 75% em Java e 22% em escala que é
outra linguagem que roda na jvm então 97% é Java E falando em Sistemas de fila outro com excelente amputação e maturidade e que você não me engano era uma das estrelas por trás de serviços como WhatsApp é o Rabbit é meio kill que é escrito em erlang a plataforma por trás da moderna linguagem elixir e aqui vem outra coisa que eu queria explicar tanto Java Quanto herlangue são muito bons para construir sistemas distribuídos de forma mais produtiva do que fazer em ser ou ser Plus go também serviria mas ele ainda é muito novo comparado com
os outros Talvez o próximo grande banco de dados sejam Gol eu não sei ele ainda não se provou nesse espaço então deixa da minha perspectiva sobre um de cada linguagem tem mais força todos os sistema operacional hoje é feito numa mistura de plus plus e quando eu falo sistema operacional ou s eu quero dizer coisas como a Kernel e drivers de dispositivos componentes que rodam no ringue zero de maior privilégio todo o resto Nossos programas escritos que tem menos privilégios do que chamamos de userland todo o programa em userlad precisa usar o kerne do Oeste
como intermediador para falar com dispositivos como SSD placa de rede placa de vídeo teclado um mouse e tudo mais o único que tem permissão para falar com o harvar diretamente costuma ser o Kernel e os drivers que rodam no mesmo espaço de memória isso não vai mudar por muito tempo a carne os inu da plataforma Darwin do Mac a Kernel NT do Windows a perna do BSD Unix que eu não lembro de nome dispositivos Android usam a queda do Linux dispositivos mas essas são as principais vão continuar sendo por muito tempo e todas elas têm
uma coisa em comum são escritos E por que isso importa Já que no final depois de compilar vira tudo um binário porque essas kerneos expõe suas funcionalidades como funções de C que podemos interfacear com os diversos arquivos de cabeçalho com extensão ponto h para realmente entender isso precisa entender um pouquinho de como compilação de ser funciona eu expliquei parte disso em episódios como do hello world a diferença de arquivos texto binário e o Episódio de linguagem interpretada versus compilado depois assistam para entender a explicação que eu vou fazer agora acho que é um pouquinho errado
mas é para simplificar o modelo na cabeça se alguém tiver uma explicação de forma mais simples Manda aí nos comentários abaixo Mas pense num driver como o driver da nvid é para placa de vídeo ou driver para placa de rede e coisas assim como se fosse uma dll de Windows ou uma biblioteca.seo de Linux a kérnia depois que luta começa a carregar esses drivers Pense em um esporte em Python ou java script as estruturas de dados e funções que esses drivers implementos vão aqui no mesmo espaço de memória que as outras estruturas da própria Kernel
é como se a Carol já viesse embutida com esses drivers uma vez carregado o driver enxerga tudo que a Kernel enxerga e vice-versa lembra ponteiros a carne pode manipular diretamente uma struct de uma placa de rede por exemplo isso é necessário porque no nível da Kernel gostaríamos de ter a maior performance possível o menor número de Abstrações a querme o ideal não desperdiça recurso fazendo em direções e Abstrações por causa disso você nunca vai conseguir fazer um driver em Java Script Python Java ou irlangue o interpretador de Java script como o Google V8 ou spider-mon
que dá Mozilla assim como a jvm de Java ou abinderlang poderemos classificar mais ou menos como máquinas virtuais a intenção delas é abstrair o sistema operacional por baixo assim um programador de parto pode escrever praticamente o mesmo código para rodar em Mac segundos ou Linux e o interpretador do pytho vai se virar para fazer funcionar embaixo a jvm é a que mais esconde o os por baixo Python JavaScript esconder menos e às vezes precisa fazer um if Windows faça X é o zip Linux faça Y mais é raro precisar para ser capaz de criar um
driver de dispositivo que consiga interagir direto com a Kernel em particular carregar no mesmo espaço de memória precisa ser uma linguagem compilada que gera binários com a mesma abi de ser ou seja cujo binário seja compatível com binários gerados pelo compilador de ser em termos de tipos de dados básicos terem o mesmo tamanho mesmo alinhamento mesmo layout de struckets e unions e chamadas de funções Sigam as mesmas Convenções tipo uma compatibilidade de api só que no nível binário outra coisa que talvez você não saiba de linguagens compiladas como você você plus plus Tecnicamente interpretadas um
pythonrub JavaScript PHP e até já você sharpion e eu digo Tecnicamente interpretados porque Java não gera binário nativo e sim já vou JavaScript tem coisas como DIT na jvm ou V8 que no final pode gerar binário de alguns trechos mas Originalmente não são binários nativos só em tempo de execução o problema de não ter binário nativo de antemão é que não sabemos o endereço de funções e estruturas de dados por isso não temos como fazer um código de ser que a ponta diretamente para essas estruturas usando coisas como ponteiros mesmo assim é possível integrar binário
feito em Rusty ou c com programas em Java ou java script por exemplo um java script consegue importar bibliotecas como o psl só que um string de Java script não é um tipo de dados igual ao estranho de ser um estranho de Python não é igual um string de ser Sharp Então como faz para uma linguagem falar com outra a única forma do binário gerado por uma linguagem Conseguiu usar um tipo de dados exatamente via ponteiro de outra linguagem é só é possível vocês são bináriamente iguais que tem a mesma a Bi quando não tem
precisa existir um processo de conversão você já deve ter ouvido falar dos termos serializar e descer e alisar ou marshally e marshalling a grosso modo no mundo de web seria mais ou menos Como converter uma estrutura XML num Jason ou vice-versa o que acontece quando se chama uma API que só devolve XML mas precisa passar para uma classe ou biblioteca que só entende Jason Precisa converter só que conversão tem o seguinte defeito veja esse exemplo de XML que api hipotética devolveria ela tem 845 bites Digamos que fizemos um código para converter de XML para Jason
Ou seja faz Marshall entre os dois formatos e Eis o Jason equivalente esse Jason é um pouco menor com 88 bites o importante é o seguinte nesse instante a função que converte tem memória as duas versões ocupando total de 845 1808 que dá mais de 1.600 bytes agora pense no nível de uma streke de C versos um objeto Jason de Java script não tem como criar um ponteiro para objeto Jason a partir de um código c e tentar usar como se fosse uma struct se fossem compatíveis não precisaria duplicar memória mas como não são compatíveis
precisamos fazer marshally duplicando a memória usada eu acho que muita iniciante não pensa assim mas comece a enxergar onde memória é duplicada por exemplo quando você abre seu navegador e pede uma página Web para amazon.com por exemplo sabemos que o servidor web da amazon É processar o que precisar para no final gerar um string gigante que é o conteúdo da HTML para te responder esse HTML tá ocupando memória no servidor quando ele envia para você chega no seu navegador o navegador tem uma cópia dessa string tanto o servidor web quanto seu navegador tem uma cópia
do mesmo HTML duplicando memória nos dois lugares Isso é inevitável o mesmo vale para um script feito em Java Script ou Python lembra da tal função RF time para formatar data e hora que eu falei lá no começo do episódio por baixo é uma função em C no Python criamos a string por cento d% Y para formatar data e chamar os deite time ponto strf time e por baixo essa função vai chamar a função da limpe-se que também chama strf time para isso precisa criar uma string de c mas a string de Python não é
compatível com string de ser então Precisa converter e isso vai duplicar esses string Esse é um dos custos escondidos que tem várias linguagens quando integram como bibliotecas locais feitas em C por exemplo ou quando fazemos chamadas remotas para Pires de micro serviços ou servidores de bancos de dados várias estruturas de dados como stream então o tempo todo sendo duplicados para converter num formato que o outro lado entende o exemplo que o David XML e Jason são pequenos nem o kilobyte mas no mundo real quem já trabalhou em projetos de verdade sabe que estamos transitando documentos
muito maiores que isso de centenas de usuários o tempo todo é uma razões de tanta diferença no uso de recursos entre diferentes linguagens ou diferentes bibliotecas quando Java tinha a noção de escrever tudo em Java ou seja tudo rodando dentro do mesmo processo na mesma jvm onde todas as bibliotecas também seriam em Jaba não era só para ser bonito uma das vantagens é que se tudo fosse feito em Java internamente não precisa ter Marketing e é marchaling Poderia lhe dar diretamente com referências para as estruturas de dados sendo que se integrar com uma biblioteca feita
em C usando o recurso de jni ou javanete me interface precisa existir uma tradução entre o layout do espaço de memória de Java por espaço do c o mesmo vale para outras linguagens que não trabalham com os mesmos tipos de ser se ficou abstrato até aqui deixa eu mostrar um exemplo super besta em Python Considere o seguinte trecho de código em Python aqui eu tô importando um módulo qualquer feito em ser em seguida eu chamo uma função declarada nesse modo passando um string qualquer ver como teríamos que fazer essa função em C primeiro eu declaro
a tal função C function que recebe uma string e imprime na tela um string em C é só uma rede caracteres que termina com caracter nulo já um string em Python é um objeto uma estrutura de dados bem diferente por isso embaixo declaramos uma segunda função chamada pacifanción que recebe o objeto Python cujo tipo é um ponteiro para pai objetivo chamado args o primeiro argumento é o selfie que todo método de Python declara explicitamente o equivalente diz em Java Script por exemplo o importante nessa função é essa by bites string que vai devolver o ponteiro
pro Arreio de Charles que tá nessa variável pai s agora para aquele código em pytho conseguir Chamar esse código em ser precisamos de outro código que vai intermediar isso escrito com extensão ponto pai x mais ou menos assim esse é o código que faz o tal margem ou conversão do objeto e do Python para uma rede Shark é isso que faz o método em code da string duplica string isso é importante porque o objeto de string de Python tá sob controle do garba de collector de Python Digamos que Ele Decide que ninguém tá usando mais
essa string e limpa da memória mas no lado do C que o Garbo de collector não enxerga a string ainda era necessária daí iria cachear o programa Mas passando uma cópia separada agora cada um tem seu próprio string e um não pisa no pé do outro mas o custo disso foi duplicar essa string É Assim Que linguagens como Python Java scriptil Rubio PHP fazem para falar com funções de bibliotecas em C e A Marcha e a marcha Lenny de estruturas de dados ou de cada lado gerencia a memória do seu jeito o lado do Python
garba de colector dele se vira com os objetos que ele criou e do lado do C vai usar por exemplo maloque e free pra lidar com esse espaço de memória por isso que precisa duplicar memória na comunicação entre eles e por isso é mais pesado e qual a diferença com uma linguagem que combina nativo compatível com você como Rusty vamos fazer a mesma coisa usando o Rust agora eis um exemplo de um código Rust que chama uma função de alguma biblioteca ser qualquer que recebe uma string como parâmetro e sendo em C sabemos que string
de c é sempre um ponteiro para uma rede sharkulo Esse exterm-se é para declarar a assinatura da função ser externa que vamos chamar cujo nome é funcho de novo o parâmetro é o ponteiro para o Arreio de Charme na função Man começamos criando um string de Rusty só que assim como no caso do Python streaming de Rusty é um objeto mas a estrutura de dados diferente da rede Shark por isso criamos um seis triggs que existe no modo stdfi para converter o string de Rusty num string de ser finalmente dentro de um bloco inseguro anseify
chamamos a função de ser passando esse novo string de ser como ponteiro assim como empayton tivemos que duplicar a memória para converter os streams mas em Rust podemos pular parte de criar string the Rust e direto já trabalhar com a string de C para demonstrar isso deixa eu começar fazendo uma nova função em Rusty besta que recebe um string e converte tudo para maiúsculo é simples recebe uma referência para um string e retorna ao streaming agora vamos ver a mesma função mais usando direto string DC em vez do string de Rust eu não sou super
fluente um rosto então não sei se tem jeito melhor de fazer isso mas veja a diferença agora o parâmetro é direto ou um string de ser e devolve um string de ser um objeto de string de Rusty tem métodos convenientes como por case para transformar tudo em maiúsculo mas para trabalhar em cima de um string de ser precisamos manualmente terá característica do Arreio e transformar em maiúsculo com o método two Ask up case para fazer código Rust compatível com a estrutura de C sem ficar convertendo e objetos nativos de Rust que são mais convenientes mais
duplica memória precisamos praticamente escrever ser usando táxi de Rush não vai ser o código mais bonito do mundo mas em casos mais complexos que esse certamente vai ser melhor do que escrever c na mão Porque podemos contar com os recursos mais avançados de gerenciamento de memória e segurança que o compilador do Rusty nos fornece mas se alguém tinha dúvidas de como trabalhar com Rust e c Por exemplo na queda do Linux Esse é um exemplo besta que ilustra como é mais ou menos agora é minha opinião mas dado o que eu expliquei até agora o
que eu penso de linguagens é o seguinte se quiser fazer programação de sistemas ou seja coisas de baixo nível como drivers de dispositivo ou mesmo componentes de infraestrutura como a estaque do TCP o certo é usar CC Plus e agora a Rust ou até linguagens meio desconhecidas mais um pouco mais alto nível compiladas como ninguém ou a linguagem D que como o nome disso é pensado para ser sucessor de ser mas nunca conseguiu popularidade talvez porque o Rust ligou surgiram no meio do caminho meio que roubaram os holofotes uma camada a vem construção de ferramentas
de administração e infraestrutura antes muitos fazem bibliotecas em ser como um ônibus para reggaex e para facilitar o uso criavam clientes com linguagens dinâmicas de script como Python ou pro da vida mas Rust e go tornaram menos dolorido escrever esse tipo de software a sintaxe é mais moderna e limpa do que seu cplus então não é incomum que não precise mais fazer scripts de Python por cima para facilitar o uso exemplo disso é um docker feito em Gol antigamente Alguém poderia criar um libidor em C e um script chamado docker em Python que integra com
essa libb para ser a ferramenta de linha de comando agora podemos usar só GO ou só Rusty goeing Rust geram binários quase tão eficiente quanto seu Plus E no caso de Rust até mais eficiente e mais seguros e muitos casos nos últimos anos o mundo Linux ganhou várias ferramentas como terminal a lacrate feito em Rust que eu gosto bastante e tem essa página com ferramentas alternativas escritas em Rust que eu uso no dia a dia como o hexa que substituiu LS o proxy que substitui o PS FD que substitui o find e muito mais depois
deem uma olhada depois entramos na categoria que eu não expliquei muito que são sistemas distribuídos são softwares como bancos de dados ou sistemas de armazenamento de volumes grandes de dados e aqui eu vejo muitas soluções que saíram do ecossistema Apache como a taxa hadou a Apache sola a parte Spark a parte caçamba e muito mais todos feitos em Java e precisava sem Java não por exemplo existem alternativas como a data Estacas que é Cassandra escrita em ser Plus mas o que surgiu desse esforço massivo da páscoa foi um ecossistema de bibliotecas e ferramentas que facilitam
o desenvolvimento de sistemas distribuídos como o famoso Keeper que é o componente responsável pelo consenso entre diversos moldes de um sistema distribuído se isso o grego pensa assim a grande vantagem de um banco de dados caçamba é conseguir aumentar a capacidade adicionando novos servidores no cluster o sistema se coordena para receber esse node e passa a distribuir o armazenamento e processamento para ele se um note falha o sistema de consenso lida com isso também via eleições por exemplo são soluções para quem precisa lidar com beta bites de dados não é para texa Startup pequena sair
usando a grande vantagem do Java é ser mais produtivo e menos doloroso do que ser plus plus uma coisa é fazer algo relativamente pequeno em quantidade de linhas de código como uma ferramenta de linha de comando ou driver e outra coisa é criar um software massivo Com milhões de linhas de código para lidar com processos complexos como coordenação de dados massivos em nós de um sistema distribuído Java foi a escolha certa na época talvez a única escolha pouca gente conhecer Elaine e assim táxi também nunca foi muito familiar para quem se acostumou a herança da
sintaxe do ser hoje em dia um novo ca poderia ser feito ou em elixir ou em Gol Mas sendo o sistema Super complexos já maduros não existe motivo para reescrever tudo nessas linguagens erlane eu acho que foi uma oportunidade perdida e elixir apareceu uns 5 ou 10 anos mais tarde do que deveria se tivesse aparecido no começo dos anos 2000 certamente seria uma das linguagens mais usadas hoje usou Keeper que eu falei boa parte de suas funcionalidades existem por padrão no herlane que também usa uma máquina virtual e foi feito para criar serviços distribuídos no
mercado de telecomunicações dos anos 80 ele estava muito à frente do seu tempo muito antes de começarmos a nos preocupar com a escalabilidade horizontal em tamanho de internet no fim dos anos 90 só que naquela época as opções era fazer tudo em setor Plus que é eficiente mas é masoquismo ou seja Mas aí estava fechado não é com sistema de Windows da Microsoft ou Java que era multipla plataforma e bem mais amigável do que ser Plus por eliminação escolhemos Java só que a jvm não foi nada para sistemas distribuídos como irlange então empresas como Apache
precisaram criar essa infraestrutura criando componentes como Zoo que per Storm fink eu posso estar superestimando um pouco mais eu acredito que se fosse fazer tudo que tem no portfólio da Apache em elixir seria mais produtivo e menos difícil hoje mas nunca vamos saber porque a essa altura do campeonato não vale a pena tentar reescrever um ecossistema inteiro a parte já resolveu esses problemas com Java e que parou as funcionalidades com erlang para entender Qual é essa grande vantagem do irlangue assista essa minha palestra onde eu explico como isso funciona dentro da VM do irland do
ponto de vista de sistemas distribuídos outra alternativa moderna é go só que é go também tem menos ferramentas do que Java ou elang que tiveram muito mais tempo para amadurecer assim como Java primeiro precisaria criar a mesma infraestrutura algoritmos de consenso sistemas de arquivos distribuídos sistema de processamento de backs distribuídos armazenamento em clãs por diante Antes de conseguir fazer os equivalentes Spark Kafka o Cassandra de novo é tudo especulação na minha parte porque a realidade é que se eu precisar de sistemas distribuídos eu vou olhar o ecossistema Java da Apache primeiro para não ficar parecendo
que a parte só faz Java na realidade hoje em dia as soluções dele estão focadas em formatos de dados como parquet e sistemas para lidar com análise de dados como Apache Arrow para em memoria Analytics que é em boa parte feito em C plus ou a parte data Fusion que é um Framework para planejamento otimização e execução de queers escrito em Rusty enfim o portfólio Apache é impressionante todo programador precisa acompanhar se quiser saber o que tem de melhor infraestrutura e análise de dados o que nos leva a criação de aplicações comerciais como eu chamaria
coisas que a maioria que assistiram provavelmente vai lidar mais aplicações web seja feito em Run raios ou com Pietro Lara belga pega peixe concote Expresso com Tap script é assim por diante aqui divisor o softwares que eu falei até aqui como um cano de US driver de dispositivo ferramentas de lei de comando de Linux ou até um CAF ou caçando tem uma coisa em comum o ideal é que eles mudem pouco que a maior parte das melhorias sejam pequenas otimizações de performance segurança estabilidade eu não quero meu banco de dados mudando tanto que a cada
nova versão da Crash o tempo todo já aplicações web que lidam com o consumidor final seja chat come as rede social ferramentas de produtividade como um fígado eles competem pela atenção e o dinheiro das pessoas e para competir uma precisa adicionar rápido funcionalidades que superam do concorrente mesmo que apareça um bug novo que alguns vão reclamar o importante é que dê para subir correções rápido para isso queremos linguagens que facilitem produtividade mais do que performance e sim daria para fazer sistemas mais eficientes escrevendo 100% em inglês ou mesmo mas até certo ponto é mais fácil
treinar pessoas em Python Java ela se torna mais rapidamente produtivas nessas plataformas Esse é o motivo de Porque Não jogamos fora Python java script porque taxa homem é mais caro do que custo de CPU por hora essas linguagens são mais limitadas como eu mostrei antes não servem para desenvolvimento de coisas com drivers o Protocolos de consenso nem processamento de imagem ou vídeo mas são ótimos para fazer código Cola mais fácil de usar importando binários feitos em linguagens mais eficientes como ser ou Rusty portanto podemos usar um Python da vida para 80% das funcionalidades mais mundanas
e usamos cego ou Rusty para fazer as partes mais difíceis e integramos com uma extensão usando ffi daí temos o mundo Mobile Android e IOS para aplicativos simples Pensa em um iFood airbnbia é Facebook ou Instagram podemos apelar para frameworks mais pesados mas de novo mais produtivos como react viu flutter que evita que a maioria dos desenvolvedores precisa é como o baixo nível funciona e produzam mais rápido a maioria dos smartphones hoje já tem mais de 2 GB de Ram e dá para desperdiçar um pouco Claro se todo mundo usa reactinete vi todo mundo vai
estar limitado nas mesmas coisas que ele suporta para se diferenciar fazemos a mesma coisa que eu falei no mundo web criamos componentes mais eficientes de mais baixo nível em Swift para iOS Quem souber o baixo nível sempre vai ser um profissional mais valioso é obrigatório não mas você quer evoluir na carreira e ganhar mais no futuro então sim precisa saber sabe tudo que eu vim mostrando de exemplo na primeira metade do episódio Sim aquilo tem que parecer arroz com feijão para você ser considerar um especialista no assunto daí chegamos nas categorias mais raipadas e consideradas
mais modernas como datasais machine learning Inteligência Artificial e aqui o mais importante é tirar o máximo proveito do Hardware em particular de conjuntos de instruções como evie x SS ou cu da igp-us NVidia ou pincel em gpus AMD e Para isso precisamos voltar para o nível de ser plus plus como eu expliquei antes tudo de data sai em cima de Python começa em bibliotecas como num pai sai pai que são feitos em seio fortran machine learning como um tensor full começa em coisas como cuida e C plus mesmo em JavaScript Depende de acesso a GPU
Via webgl dos navegadores não é a linguagem a parte mais importante e sim acesso a esses componentes de computação paralela de vetores e matrizes de dados eu disse no episódio anterior comentando sobre o chat GPT que no mundo de depilar nem criar modelos como de geração de imagem do Dali 2 Uma Geração de texto como GPT três custam astronomicamente caro e Nenhum de Nós vai ser capaz de criar nada perto disso só quem tiver acesso a conseguir trabalhar no centro de pesquisa de uma operar ou Microsoft da vida que vai ter essa oportunidade mas para
coisas úteis do dia a dia não precisamos de um GPT Machine com tensor flor e modelos ordens de grandeza mais simples já são para escopos específicos tipo detecção de movimentos é um exemplo para aplicações de realidade aumentada muitos não pensam nisso mas algoritmos mas simples como de relevância que é basicamente classificação estatística já é extremamente útil para coisas como e-commerce conseguirem mostrar produtos recomendados para você ou sistemas como elástico que terem pesquisa fase com relevância como um mini Google onde o usuário não precisa escrever os termos exatos mas mesmo assim ele consegue devolver resultados relevantes
tudo isso já existe e já usamos em diversos sistemas e cobra esses as redes sociais a maioria dos desenvolvedores nem sabe o que é um elástico que é o solo e acha que vai entender como funciona um chat GPT Tá longe bem longe enfim eu sei que o Episódio de hoje talvez tenha sido denso mas eram alguns pensamentos aleatórios que eu tinha na minha cabeça fazia tempo que eu queria dar um dump se você é iniciante não espere compreender tudo o que eu disse de uma só vez Pesquise os termos conhecia volte de novo Quem
já tem experiência já sabia tudo que eu falei talvez dê alguns insights para complementar e o objetivo não era dizer que essa ou aquela linguagem é melhor ou pior cada uma tava no lugar certo na hora certa não necessariamente foram escolhidas por serem as melhores e mesmo surgindo coisas novas consideradas melhores não saímos reescrevendo maturidade é sempre mais importante que novidade se ficar um com dúvidas mandem nos comentários abaixo se curtir o vídeo deixa o joinha assine o canal e não deixe de compartilhar o vídeo com seus amigos a gente se vê até mais [Música]
Copyright © 2024. Made with ♥ in London by YTScribe.com