WEBVTT 00:00:01.269 --> 00:00:04.569 Você já viu pequeno código javascript trosos 00:00:04.569 --> 00:00:08.119 Nesta seção, eu falo sobre o que conecta o mundo 00:00:08.119 --> 00:00:11.431 com o código de máquina na CPU 00:00:11.431 --> 00:00:13.595 Portanto, este será geralmente sobre o tema das linguagens de computador. 00:00:13.595 --> 00:00:18.682 Portanto, um programador trabalhando em algumas linguagens de programação. 00:00:18.682 --> 00:00:23.080 Diz-se que as linguagens de programação são funções de alto nível. 00:00:23.080 --> 00:00:27.020 E isso significa coisas como loops (ciclos), e se o "se" declarações 00:00:27.020 --> 00:00:30.032 e strings (cordas) e as instalações que são mais complicados 00:00:30.032 --> 00:00:32.512 e estão em um código de máquina única na CPU. 00:00:32.512 --> 00:00:36.298 Assim que o desenvolvedor escreve o que é chamado de código fonte 00:00:36.298 --> 00:00:39.515 em qualquer linguagem de programação que você está escrevendo 00:00:39.776 --> 00:00:42.498 Aqui é um exemplo de um código-fonte C + +. 00:00:42.498 --> 00:00:45.769 Isso aloca uma string (string), uma variável e, em seguida, coloca uma 00:00:45.769 --> 00:00:48.765 ponto de exclamação (!) no final da cadeia. 00:00:48.765 --> 00:00:50.218 Isto é algo semelhante ao código javascript que temos visto. 00:00:50.218 --> 00:00:52.465 Todas essas línguas ao nível da sintaxe 00:00:52.465 --> 00:00:54.166 são um tanto semelhante. 00:00:54.166 --> 00:01:02.805 Então, hum, como você obter o código fonte para C + +, por exemplo, em execução no CPU? 00:01:02.805 --> 00:01:06.735 estratégia usa o que é chamado de compilador. 00:01:06.735 --> 00:01:09.973 o compilador é um programa separado e que a 00:01:09.973 --> 00:01:13.597 compilador é olhar para todo o código fonte 00:01:13.597 --> 00:01:18.576 e faz com que uma tradução grande para criar uma grande corpo de código de máquina. 00:01:18.576 --> 00:01:23.155 Por exemplo, pode haver uma parte da fonte, 00:01:23.155 --> 00:01:26.967 onde há um "if" e não 00:01:26.967 --> 00:01:28.922 instruções específicas para uma instrução de código de máquina "se" 00:01:28.922 --> 00:01:31.002 mas pode haver uma sequência de instruções máquina 5 00:01:31.002 --> 00:01:33.726 que é na verdade um "se" 00:01:33.726 --> 00:01:36.515 Assim, o compilador faz esse tipo de expansão. 00:01:36.515 --> 00:01:40.923 Assim, apenas como exemplo, o Firefox é escrito em C + +. 00:01:40.923 --> 00:01:47.094 Portanto, para fazer uma nova versão do Firefox, alguém está 00:01:47.094 --> 00:01:51.909 o C + + e ele lê em diversos arquivos de fontes, 00:01:51.909 --> 00:01:54.594 o "corpo grande" do código-fonte que está em conformidade com o Firefox, 00:01:54.594 --> 00:01:57.156 e produz basicamente firefox.exe 00:01:57.156 --> 00:02:00.159 Firefox.exe é a saída do compilador para 00:02:00.159 --> 00:02:03.620 traduzir todo o código fonte. 00:02:03.620 --> 00:02:06.859 Algumas coisas a se notar é que, 00:02:06.859 --> 00:02:09.880 compilar basta passar uma vez. 00:02:09.880 --> 00:02:12.185 Assim, um corpo de código-fonte, alguém faz firefox.exe 00:02:12.185 --> 00:02:15.885 e, em seguida, ser enviado firefox.exe 00:02:15.885 --> 00:02:18.448 Os usuários finais não precisa do código-fonte e 00:02:18.448 --> 00:02:20.609 não exigir que o compilador. Ele realmente faz a compilação 00:02:20.609 --> 00:02:26.124 fábrica, na verdade. Outra característica é 00:02:26.124 --> 00:02:30.381 não funciona em sentido inverso. Para que eu possa distribuir firefox.exe 00:02:30.381 --> 00:02:34.295 Todo o código desta máquina, mas não algo que 00:02:34.295 --> 00:02:36.899 pode ler e voltar a dar-me um grande corpo de código-fonte. 00:02:36.899 --> 00:02:38.879 Pelo menos não perfeitamente, você pode fazê-lo de modo imperfeito. 00:02:38.879 --> 00:02:41.981 Idealmente, para produzir um investimento realmente quer 00:02:41.981 --> 00:02:44.761 o código-fonte. Então vamos falar sobre o código fonte. 00:02:44.761 --> 00:02:51.947 Portanto, se você deseja adicionar funcionalidade ou corrigir um bug no firefox, realmente 00:02:51.947 --> 00:02:53.965 o caminho é de volta para o código-fonte, 00:02:53.965 --> 00:02:56.591 e revê-lo, só que eu fiz em java script. 00:02:56.591 --> 00:02:58.266 Então adicione uma linha ou um comando if para alterar algumas 00:02:58.266 --> 00:03:01.664 comportamento de alguma forma, no código fonte e depois executar 00:03:01.664 --> 00:03:03.653 o compilador mais uma vez, na verdade, para fazer uma nova versão do 00:03:03.653 --> 00:03:07.143 Firefox tem esta pequena alteração tem 00:03:07.143 --> 00:03:10.971 no código fonte. Uma vez que estamos tendo em código-fonte, 00:03:10.971 --> 00:03:14.414 Isso também dá uma boa noção de como aberto 00:03:14.414 --> 00:03:18.870 software de código significa. Um software de código aberto é um 00:03:18.870 --> 00:03:21.860 formato que distribui o programa, mas também 00:03:21.860 --> 00:03:25.742 sem acesso à fonte original, o 00:03:25.742 --> 00:03:27.734 o programa. Isso normalmente vem com uma licença, 00:03:27.734 --> 00:03:29.714 dizendo: 'Ei, aqui está o código fonte. Se você quiser 00:03:29.714 --> 00:03:32.879 fazer sua própria versão ou corrigir um erro ou qualquer outra coisa, este programa 00:03:32.879 --> 00:03:36.755 Sinta-se livre. "Isso dos 2 principais características do software de código aberto 00:03:36.755 --> 00:03:42.555 uma distribuição normal de graça, para você saber, o seu barato. Mas 00:03:42.555 --> 00:03:45.985 Outra característica é que ele vem com um tipo de liberdade. 00:03:45.985 --> 00:03:50.944 Porque se o software é de código fechado e 00:03:50.944 --> 00:03:52.941 quero uma característica diferente, houve algumas falhas 00:03:52.941 --> 00:03:55.671 necessário aplicar, você realmente depende do provedor, que tem a 00:03:55.671 --> 00:03:58.311 código fonte, bem, eles se sentem como a aplicação 00:03:58.311 --> 00:04:01.097 Será que esse recurso? Em contraste com o software de fonte aberta, 00:04:01.097 --> 00:04:04.182 é como não esposas. O código fonte está disponível, 00:04:04.182 --> 00:04:06.861 e se há algo que você realmente quer fazer, 00:04:06.861 --> 00:04:10.060 ou dizer que o fornecedor original sai do negócio, em seguida, 00:04:10.060 --> 00:04:15.029 porque você tem o código-fonte, você sabe, você pode ser 00:04:15.029 --> 00:04:17.321 pagar alguém para fazer uma mudança e produzir sua própria 00:04:17.321 --> 00:04:19.577 versão personalizada. Para o que vem com esse tipo de profundidade, uh- 00:04:19.577 --> 00:04:21.649 pode ser considerado como uma apólice de seguro. 00:04:21.649 --> 00:04:26.142 Muitas vezes, há muitos tipos diferentes de termos de licença 00:04:26.142 --> 00:04:28.796 para software de código aberto, mas mais frequentemente 00:04:28.796 --> 00:04:31.015 necessária em alguns casos, se você levar o seu 00:04:31.015 --> 00:04:34.937 código-fonte e adicionar um recurso, em seguida, ele deve oferecer 00:04:34.937 --> 00:04:37.564 essas alterações para a comunidade. Assim, no mesmo 00:04:37.564 --> 00:04:39.767 forma se beneficiaram de um outro emprego, você pode se beneficiar de seu trabalho. 00:04:39.767 --> 00:04:43.644 Os detalhes de como você pode fazer é complicado. 00:04:43.644 --> 00:04:45.842 Existem muitas formas diferentes da mesma. 00:04:45.842 --> 00:04:47.530 Eu vou falar sobre um software de código aberto 00:04:47.530 --> 00:04:48.855 pouco mais tarde, eu só mencionei isso agora, 00:04:48.855 --> 00:04:51.186 porque nos dá a idéia do que é o código fonte 00:04:51.186 --> 00:04:54.602 programa contra apenas ter o algo. exe. 00:04:54.602 --> 00:05:01.681 Até agora eu falei sobre C + +, assim é esta 00:05:01.681 --> 00:05:04.771 qualquer outra grande categoria de línguas que 00:05:04.771 --> 00:05:07.218 Eu vou chamar, ou linguagens dinâmicas, por vezes, 00:05:07.218 --> 00:05:11.392 Interpretador da linguagem. E esta é uma espécie de um grande teste 00:05:11.392 --> 00:05:12.436 estratégia e há muitas línguas diferentes, com 00:05:12.436 --> 00:05:15.233 muitas qualidades diferentes e eu estou indo só para classificar de caroço, 00:05:15.233 --> 00:05:17.156 tumor são nesta classe grande. 00:05:17.156 --> 00:05:19.453 Exemplos de linguagens dinâmicas estão atualmente Java, 00:05:19.453 --> 00:05:24.389 Java Script, e Python. Por conseguinte, vai para uma forma que estes são 00:05:24.389 --> 00:05:26.506 trabalho é para ser aplicado pelo que é chamado 00:05:26.506 --> 00:05:30.293 um intérprete. Eu acho que o compilador se você estivesse tomando antes. 00:05:30.293 --> 00:05:36.156 Um intérprete é um programa que leva o código escrito em qualquer idioma 00:05:36.156 --> 00:05:42.729 e tipo de [inaudível] é executado. O melhor exemplo é 00:05:42.729 --> 00:05:45.703 é a linguagem de computador chamado java script, 00:05:45.703 --> 00:05:49.271 na verdade, têm vindo a utilizar e navegadores web são 00:05:49.271 --> 00:05:52.017 inclui programas como uma parte deles, um java 00:05:52.017 --> 00:05:55.148 shell. E quando vem para o navegador web 00:05:55.148 --> 00:05:57.471 através de uma página com código java script 00:05:57.471 --> 00:06:00.604 pode usar o shell para executar esse código a ser 00:06:00.604 --> 00:06:06.015 fazer tudo o que vai fazer. Assim, a forma como o interpretador 00:06:06.015 --> 00:06:10.808 obras estão lidando com a agenda da linha 1 de cada vez. 00:06:10.808 --> 00:06:13.891 Então aqui está algum código java script, 00:06:13.891 --> 00:06:16.138 Se o jogador queria correr esse bem 00:06:16.138 --> 00:06:17.726 ser visto na primeira linha e para procurar 00:06:17.726 --> 00:06:19.669 que diz que linha e, em seguida, o intérprete 00:06:19.669 --> 00:06:22.259 Eu o faria. Assim, neste caso, o intérprete dizer, 00:06:22.259 --> 00:06:24.181 UH-Então eu acho que preciso de uma variável chamada A, e 00:06:24.181 --> 00:06:25.992 Eu preciso colocar um 1 na mesma. Assim, uma vez feito com que a linha 00:06:25.992 --> 00:06:28.531 em seguida, indo para a frente, e assim que faz a linha seguinte. 00:06:28.531 --> 00:06:32.647 E assim por diante. O mesmo se aplica para o compilador do grande volume 00:06:32.647 --> 00:06:36.718 tradução de código fonte em código de máquina 00:06:36.718 --> 00:06:38.076 Mas isso realmente está executando o código, apenas a sua 00:06:38.076 --> 00:06:39.657 fazendo a tradução para executar no futuro. 00:06:39.657 --> 00:06:42.848 Por outro lado intérprete realmente viver o momento. 00:06:42.848 --> 00:06:45.144 Somente através do código linha por linha e só 00:06:45.144 --> 00:06:49.392 fazer. Então deixe-me falar um pouco sobre as diferenças 00:06:49.392 --> 00:06:53.283 entre estes dois. Devo dizer que como um aviso legal, 00:06:53.283 --> 00:06:55.773 Existem muitas linguagens de programação, não há melhor 00:06:55.773 --> 00:06:59.418 a velha piada sobre a linguagem é que realmente sabe, 00:06:59.418 --> 00:07:00.769 quando você está no seminário e quando você 00:07:00.769 --> 00:07:01.916 discutindo sobre os prós e contras de algo, 00:07:01.916 --> 00:07:04.871 finalmente, a resposta é simples, depende. 00:07:04.871 --> 00:07:08.106 Como não há melhor linguagem, mas sim o que é 00:07:08.106 --> 00:07:09.483 Melhores idiomas esta situação, todos os 00:07:09.483 --> 00:07:13.336 características. Então, em termos gerais, apenas o código compilador 00:07:13.336 --> 00:07:16.724 tende a correr mais rápido. Quando você compilar um código C + + 00:07:16.724 --> 00:07:19.426 e produzir isso. exe é um tipo de carne magra em uma direção, 00:07:19.426 --> 00:07:23.747 muitos detalhes e decisões tem sido despojado 00:07:23.747 --> 00:07:26.886 , tanto quanto possível. Além disso dinâmico ou 00:07:26.886 --> 00:07:30.714 intérprete de linguagem, tendem a ter mais recursos. 00:07:30.714 --> 00:07:32.964 Mais recursos do que faz o trabalho de um programador 00:07:32.964 --> 00:07:35.844 pouco mais fácil. Ou dito de outra forma, amplamente 00:07:35.844 --> 00:07:39.197 falando, o programador pode tendem a fazer mais trabalho 00:07:39.197 --> 00:07:41.907 por hora, linguagens dinâmicas, que fazem na compilação 00:07:41.907 --> 00:07:46.811 Idiomas. Entretanto, não há almoço grátis, é 00:07:46.811 --> 00:07:49.783 também o caso que o código de linguagem dinâmica tende a 00:07:49.783 --> 00:07:52.660 ficar mais lento do que o CPU em termos de apenas ficando apenas 00:07:52.660 --> 00:07:57.232 o trabalho realizado, em comparação com as línguas do compilador. 00:07:57.232 --> 00:07:59.344 Código-fonte do compilador vai fazer o mesmo. 00:07:59.344 --> 00:08:04.848 Então, um exemplo disso é um grande exemplo disso, 00:08:04.848 --> 00:08:06.884 Gerenciamento de memória. Por meio do qual a gestão de memória refere-se à 00:08:06.884 --> 00:08:09.868 problema no código de quantos bytes são 00:08:09.868 --> 00:08:12.285 ¿Necessário para armazenar algo em particular e por quanto tempo? 00:08:12.285 --> 00:08:16.173 Bem, eu preciso desses bytes para a linha 6, você sabe, mas 00:08:16.173 --> 00:08:18.276 talvez na linha 20, e não precisa mais 00:08:18.276 --> 00:08:20.593 e realmente eu possa reutilizar por outra coisa. 00:08:20.593 --> 00:08:23.144 E na verdade é um tipo de problema complicted. 00:08:23.144 --> 00:08:27.006 Em C e C + +, gerenciamento de memória é um grau 00:08:27.006 --> 00:08:29.773 Handbook. e isso apenas significa que o programador 00:08:29.773 --> 00:08:31.315 estão ocorrendo todas estas linhas de código para as coisas 00:08:31.315 --> 00:08:33.329 e será, por vezes, quando você pode ter um 00:08:33.329 --> 00:08:35.554 adicionar algumas linhas para fazer algum pensamento, para ajudar a orientar 00:08:35.554 --> 00:08:38.174 o gerenciamento de memória. Portanto, há alguns 00:08:38.174 --> 00:08:41.437 esforço programador necessário. Em contraste, a maioria 00:08:41.437 --> 00:08:43.925 Linguagens dinâmicas têm o que é chamado automático 00:08:43.925 --> 00:08:46.869 Gerenciamento de memória. E isto significa que, 00:08:46.869 --> 00:08:53.009 Entrada programador é necessário. A linguagem vai 00:08:53.009 --> 00:08:56.944 automaticamente notar quando a memória é necessária, 00:08:56.944 --> 00:08:58.064 Quando a memória não é necessário porque, 00:08:58.064 --> 00:09:03.489 podem ser reciclados e tomar a este conjunto 00:09:03.489 --> 00:09:04.805 problema. Portanto, se encaixa no interior da tendência dos 00:09:04.805 --> 00:09:06.976 linguagens dinâmicas foi mencionando anteriormente, 00:09:06.976 --> 00:09:09.405 Portanto, este é um exemplo de como, bem, você sabe, porque 00:09:09.405 --> 00:09:11.735 o programador tem menos a ver, eles podem apenas 00:09:11.735 --> 00:09:13.526 fazer as coisas um pouco mais rápido. Como o gerenciamento de memória 00:09:13.526 --> 00:09:15.735 é um grande exemplo. No entanto também pode imaginar 00:09:15.735 --> 00:09:17.189 Esta é uma das coisas que torna dinâmica 00:09:17.189 --> 00:09:19.060 código de idioma correr um pouco mais lento. Porque, 00:09:19.060 --> 00:09:22.914 o CPU agora tem livro suggestional mantendo problema 00:09:22.914 --> 00:09:25.292 olhando para onde a sua memória e tentar 00:09:25.292 --> 00:09:27.841 descobrir quando ele pode ser reutilizado. Por conseguinte, muito amplo 00:09:27.841 --> 00:09:32.320 falando, a tendência para a equipe de programação de hoje 00:09:32.320 --> 00:09:37.047 é para linguagens dinâmicas. A característica de que o 00:09:37.047 --> 00:09:40.776 programador conseguir algumas coisas Liitle rápidas 00:09:40.776 --> 00:09:43.242 à custa da utilização de uma CPU ou mais bits 00:09:43.242 --> 00:09:45.930 memória é um equilíbrio muito atraente 00:09:45.930 --> 00:09:49.162 muitos dos problemas. Este pode ser um pouco intuitivo, 00:09:49.162 --> 00:09:51.874 mas você pode pensar que a má qualidade 00:09:51.874 --> 00:09:54.876 para um programa de computador e é muitas vezes o 00:09:54.876 --> 00:09:59.389 programador, que tem programador experiente trabalhando 00:09:59.389 --> 00:10:01.204 que, você sabe, a trabalhar neste campo, muito 00:10:01.204 --> 00:10:06.287 das vezes são difíceis de encontrar. E assim 00:10:06.287 --> 00:10:09.105 suas horas, ou seja, usando algumas de suas horas, 00:10:09.105 --> 00:10:12.635 tem uma aparência atraente, em contraste, a CPU sempre 00:10:12.635 --> 00:10:13.929 Eu quero trabalhar o mais rapidamente possível, mas 00:10:13.929 --> 00:10:17.424 CPUs são muito barato e bastante eficaz 00:10:17.424 --> 00:10:19.073 e este efeito é ainda curioso onde este Moore 00:10:19.073 --> 00:10:24.255 Lei, é cada vez mais certo, onde a CPU fica mais barato a cada ano 00:10:24.255 --> 00:10:27.230 e se pensarmos o equilíbrio entre o programador 00:10:27.230 --> 00:10:29.184 custo e CPU custo de obter algo, 00:10:29.184 --> 00:10:31.781 Isto significa em termos de fatia do bolo, 00:10:31.781 --> 00:10:33.477 o programador se tornar cada vez mais caro 00:10:33.477 --> 00:10:36.169 cada ano um pouco mais escassos. Então, esses ajustes 00:10:36.169 --> 00:10:41.364 no padrão. Em todas as linguagens dinâmicas 00:10:41.364 --> 00:10:43.829 estão se tornando populares. A última coisa que será 00:10:43.829 --> 00:10:46.561 mencionar é que existe algo chamado "JIT" 00:10:46.561 --> 00:10:50.144 Just In compilador Time. E este tipo de 00:10:50.144 --> 00:10:52.646 o compilador síntese natural e intérprete 00:10:52.646 --> 00:10:54.772 estratégias, tentando obter o melhor dos dois mundos. 00:10:54.772 --> 00:10:56.795 Assim, seu gosto, bem, nós gostaríamos de uma linguagem dinâmica 00:10:56.795 --> 00:10:58.693 com todas estas características, todos estes programador favorável 00:10:58.693 --> 00:11:02.019 características, mas queremos correr rápido. E assim 00:11:02.019 --> 00:11:04.541 Este JIT assumir o código e teste 00:11:04.541 --> 00:11:07.086 e compilar na mosca. Por isso, é uma espécie de 00:11:07.086 --> 00:11:11.831 se casar com duas delas. Ele funciona 00:11:11.831 --> 00:11:14.629 bastante bem. Assim, todos os navegadores têm agora 00:11:14.629 --> 00:11:18.695 EIC para código Java script. Então, realmente quando você 00:11:18.695 --> 00:11:22.316 O código JavaScript executado nesta classe, 00:11:22.316 --> 00:11:24.616 dentro do navegador era um JIT que estava no 00:11:24.616 --> 00:11:28.408 voar, tendo aqueles pedaços de código e Java Script 00:11:28.408 --> 00:11:31.614 compilar em tempo real, em código de máquina. 00:11:31.614 --> 00:11:35.362 De qualquer forma, não será exatamente formatos compilador 00:11:35.362 --> 00:11:39.041 código, mas você chegar muito perto. OS. Isto é realmente 00:11:39.041 --> 00:11:41.983 Como as linguagens mais dinâmicas. Ele é um ativo 00:11:41.983 --> 00:11:44.390 área de pesquisa. Mas parece funcionar muito bem.