AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1248519
Accepted
Vaibhav Madan
Vaibhav Madan
Asked: 2020-06-10 06:12:45 +0800 CST2020-06-10 06:12:45 +0800 CST 2020-06-10 06:12:45 +0800 CST

Como o Gedit pode detectar e destacar idiomas que não estão instalados?

  • 772

Como o gedit pode detectar idiomas, mesmo que não estejam instalados?

captura de tela do gedit

Aqui está um exemplo onde o Gedit detecta Java.

Mas quando tento executar o Java a partir do terminal, ele diz que o java não está instalado .

Da mesma forma, ele pode detectar ada mesmo que não esteja instalado no meu sistema.

E o mesmo acontece com outras línguas...

Se um idioma não estiver instalado, como o gedit pode exibir a formatação de acordo com a sintaxe do idioma?

Se eu selecionar Objective-C em vez de Ada, ele não exibirá a formatação.

No entanto, se eu substituir o código de Ada por Objective-C, ele exibirá a formatação adequada

Mesmo que esses idiomas não sejam instalados por padrão, como o gedit pode diferenciá-los?

Este artigo diz que PHP, Ruby e Python vêm pré-instalados com o Ubuntu. No entanto, meu sistema também pode executar C e C++. Por que isso acontece e como isso se relaciona com o realce de sintaxe do Gedit?

programming gedit language
  • 1 1 respostas
  • 435 Views

1 respostas

  • Voted
  1. Best Answer
    Eliah Kagan
    2020-06-11T10:57:50+08:002020-06-11T10:57:50+08:00

    TL;DR: Diferentes funcionalidades relacionadas à mesma linguagem são fornecidas por diferentes programas e bibliotecas, que geralmente podem ser instaladas separadamente. Aplicar realce de sintaxe, compilar código-fonte em código executável e executar código executável requerem software diferente . Nenhum dos programas ou bibliotecas envolvidos em fazer essas coisas são, na verdade , a própria linguagem .

    Uma linguagem de programação, como qualquer tipo de linguagem, é uma ideia abstrata. É conceitualmente distinto de qualquer software que facilite o desenvolvimento de programas reais nele, e também de qualquer software necessário para suportar tais programas e permitir que eles sejam executados. Um idioma não pode realmente ser instalado em seu computador. É um tanto comum escrever e falar de uma maneira que não faça distinção entre uma linguagem e suas implementações . Este hábito é difícil de evitar. Mas pode levar à confusão, o que aconteceu aqui.

    Como Puspam e N0rbert mencionaram, geralmente é possível ter uma ferramenta instalada que analisa a sintaxe de uma linguagem e aplica realce , sem também ter outras ferramentas de desenvolvimento para a linguagem instaladas. Você pode até criar sua própria linguagem que não tem implementação (ainda), cujos programas nunca (ainda) podem realmente ser executados, e escrever regras de realce de sintaxe para que um editor de texto como o Gedit a destaque corretamente. O realce de sintaxe não requer que você tenha outras ferramentas de desenvolvimento para uma linguagem; nem mesmo requer que tais ferramentas existam.

    Algumas linguagens, como Perl e C++ , têm sintaxe extremamente complexa, onde qual parte da gramática sintática corresponde a partes específicas do seu código-fonte, na verdade depende do significado de algo que veio muito antes. Para essas linguagens, aplicar 100% de realce de sintaxe correta sempre reduz a um fragmento substancial de toda a tarefa de implementação da linguagem. Para essas linguagens, o realce de sintaxe geralmente é implementado de maneira aproximada , aplicando a gramática corretamente na maioria dos casos práticos.

    Adivinhar em que idioma você está escrevendo algo também é uma questão de aproximação. Em geral, não é possível dizer com certeza. A razão usual dada para isso, o que é verdade, é que é possível escrever um programa que esteja simultaneamente em várias linguagens (possivelmente com significados diferentes em cada uma). Uma razão mais importante é que, durante o curso da escrita, seu código provavelmente está errado, inclusive de maneiras que o tornam tecnicamente não na linguagem em que você está escrevendo. Por exemplo, imagine digitar um programa simples em C. Se você fosse interrompido em um ponto aleatório enquanto fazia isso, o que você tem até agora seria realmente um programa C válido?

    No entanto, as ferramentas muitas vezes podem fazer boas suposições sobre qual idioma você está usando. Além disso, se você nomear seu arquivo com um sufixo que é comumente usado para arquivos de código-fonte em algum idioma específico, os editores normalmente o usarão primeiro para decidir como destacá-lo.

    O que as pessoas querem dizer quando dizem que uma linguagem interpretada está "instalada"

    Esse artigo que você estava lendo inclui declarações como:

    Perl já está instalado em seu sistema Ubuntu por padrão.

    Fora da caixa, o Ubuntu vem com Python e muitos módulos de extensão.

    Ruby também é instalado por padrão em seu sistema.

    O que isso realmente significa é que o Ubuntu vem com implementações dessas linguagens. Às vezes, as pessoas se referem a uma implementação de uma linguagem com o mesmo nome da própria linguagem.

    Essas três linguagens são mais frequentemente interpretadas, embora uma forma de compilação (compilar para um bytecode especial , que conceitualmente é a linguagem de máquina de um tipo de computador inventado, uma máquina abstrata , em termos da qual a linguagem é definida) possa ser envolvidos como parte do processo de interpretação.

    Se uma linguagem é interpretada ou compilada é realmente uma estratégia de implementação e não uma propriedade da linguagem, e algumas linguagens têm implementações interpretadas e compiladas separadas. Mas as linguagens são mais frequentemente projetadas com uma ou outra estratégia em vista, então as frases "linguagem interpretada" e "linguagem compilada" são populares, e vou usar essas frases aqui.

    A implementação de uma linguagem interpretada consiste em:

    • um interprete
    • geralmente, uma biblioteca de suporte (muitas vezes chamada de "biblioteca padrão"), que quase sempre vem com o interpretador e às vezes é até considerada parte do interpretador.

    Para executar seu programa, o usuário geralmente deve ter:

    • o código-fonte do seu programa (embora possa ser reduzido ou ofuscado e, ocasionalmente, pode ser executado apenas com bytecode)
    • quaisquer bibliotecas adicionais das quais seu programa dependa, se houver.

    É possível desenvolver software em tal linguagem usando apenas as ferramentas necessárias para executar um programa. Isso é diferente das linguagens compiladas (veja abaixo). Mas você pode querer ter ferramentas adicionais que saibam algo sobre a linguagem, como um editor de texto que saiba como destacar sua sintaxe.

    Intérpretes no Ubuntu

    Perl tem apenas uma implementação (embora existam muitas versões diferentes dela). O perlcomando executa o interpretador. Na comunidade Perl , a implementação é mais frequentemente escrita como "perl" (sem letra maiúscula) e a linguagem é mais frequentemente escrita como "Perl". Isso distingue a linguagem de sua implementação, mas essa convenção ortográfica não é universal.

    Python tem várias implementações . Ubuntu vem com CPython , que (entre outros componentes) fornece o python3comando, ou especialmente em versões mais antigas do Ubuntu, o python2comando. CPython é a implementação de referência oficial do Python e também a implementação mais popular. Mesmo no site oficial do Python , algumas das afirmações feitas sobre "Python" são sobre a linguagem, enquanto outras são sobre a implementação oficial. Outras implementações incluem PyPy , Jython e IronPython .

    Ruby também tem várias implementações . Ubuntu vem com Ruby MRI ("Matz's Ruby Interpreter"), que (entre outros componentes) fornece o rubycomando. MRI é a implementação de referência oficial do Ruby e também a implementação mais popular. Existem menos implementações amplamente usadas de Ruby do que implementações amplamente usadas de Python, mas uma implementação importante de Ruby além de Ruby MRI é JRuby .

    O que as pessoas querem dizer quando dizem que uma linguagem compilada está "instalada"

    As pessoas não deveriam dizer isso, porque é sempre (e não apenas às vezes) ambíguo. Esse artigo que você está lendo (felizmente) não fala sobre compiladores dessa maneira. No entanto, muitas vezes as pessoas o fazem, e as questões conceituais contêm a resposta para sua pergunta, então vale a pena examinar isso.

    A implementação de uma linguagem compilada consiste em:

    • um compilador,
    • às vezes outras ferramentas usadas junto com o compilador , como um linker ,
    • geralmente, uma biblioteca de suporte (muitas vezes chamada de "biblioteca padrão").

    Em algumas linguagens, a biblioteca de suporte às vezes pode ser vinculada estaticamente ao seu programa para que não seja necessária separadamente para executar seu programa. Essa é uma abordagem muito comum em algumas linguagens, como Go , mas é feita com menos frequência na maioria das outras, como C, C++ e Objective C.

    Para executar seu programa, um usuário deve ter:

    • o arquivo executável gerado pela construção do programa (executando o compilador e ferramentas associadas),
    • a biblioteca de suporte da linguagem, a menos que esteja vinculada estaticamente ao seu executável, ou a menos que (e isso é raro) seu programa não use nenhum recurso da biblioteca de suporte e tenha sido construído de uma maneira que evite vincular a ela,
    • quaisquer bibliotecas adicionais das quais seu programa dependa, se houver, a menos que estejam vinculadas estaticamente ao seu executável.

    Para construir seu programa , deve-se ter:

    • o código-fonte do programa,
    • um compilador e outras ferramentas de compilação, como um vinculador,
    • a biblioteca de suporte da linguagem, a menos que (e isso é raro) seu programa não use nenhum recurso dele e seja construído de uma maneira que evite vincular a ele,
    • quaisquer bibliotecas adicionais das quais seu programa depende, se houver
    • em alguns idiomas, arquivos que descrevem a interface das bibliotecas. Em C, C++ e Objective C, esses são arquivos de cabeçalho . (Você provavelmente também tem arquivos de cabeçalho como parte de seu programa, para ajudá-lo a escrever código que chama funções de uma unidade de tradução em outra, mas estes são considerados parte do código-fonte do seu programa.)

    Quando as pessoas falam sobre ter uma linguagem como C++ instalada, elas geralmente querem dizer que alguma implementação de um compilador e outras ferramentas necessárias para construir programas C++ estão instaladas. Mas o usuário não precisa disso para executar seu programa. Ubuntu vem com programas C e C++, mas (dependendo de como você instala o Ubuntu) pode não vir com ferramentas de desenvolvimento C e C++, que não são necessárias para executar os programas. O Ubuntu também vem com programas Perl e Python (e possivelmente programas Ruby), que precisam de intérpretes para serem executados.

    Compiladores no Ubuntu - o caso de C e C++

    Esta resposta já será muito longa, então vou apenas descrever a situação com C e C++, que são linguagens compiladas extremamente importantes. Isso ocorre apesar do Ubuntu ser enviado com programas escritos em algumas outras linguagens compiladas, incluindo Go.

    C e C++ são linguagens separadas. Ambos são padronizados internacionalmente. Suas bibliotecas de suporte - bibliotecas padrão no sentido mais forte da frase - também são padronizadas, nos mesmos documentos que padronizam os idiomas. Nenhuma implementação de C ou C++ é abençoada como implementação de referência; essas linguagens têm várias implementações em pé de igualdade. Fora das situações de nicho, um punhado é muito mais popular do que os outros. (Nada disso é realmente porque são linguagens compiladas - por exemplo, Go tem uma implementação de referência e não é padronizado.)

    É possível implementar C ou C++ sem implementar o outro, mas os compiladores mais populares fornecem ambos (e fornecer C++ sem C é incomum).

    Os compiladores C e C++ mais populares são GCC ( gcc,g++ ), Clang ( clang,clang++ ) e MSVC++ ( cl.exe). GCC e Clang estão prontamente disponíveis ou Ubuntu.

    A implementação de biblioteca padrão C mais popular em um sistema GNU/Linux como o Ubuntu é GNU libc . Também é provavelmente a implementação mais popular do mundo. Ele está associado ao GCC, mas outros compiladores, como o Clang, o direcionam sem problemas. (No Windows, uma implementação diferente (MSVCRT) é mais comumente usada.) No Ubuntu e na maioria dos outros sistemas GNU/Linux, GNU libc é sempre instalado e fornecido pelo arquivo libc.so.6. Quase todos os programas, escritos em C ou não, o utilizam, direta ou indiretamente. É considerado uma parte essencial do sistema operacional. Mas é possível escrever um programa que não o use, e pelo menos uma outra implementação de biblioteca padrão C, musl , está prontamente disponível para o Ubuntu.

    A implementação de biblioteca padrão C++ mais popular em um sistema GNU/Linux como o Ubuntu é libstdc++ . Ele está associado ao GCC, mas alguns outros compiladores podem direcioná-lo. Você também pode instalar o libc++ , que está associado ao Clang (ambos fazem parte do projeto LLVM ), mas o Clang também pode direcionar o libstdc++ sem problemas (que é o que você obtém por padrão no Ubuntu). A outra grande implementação da biblioteca padrão C++ é o MS STL , que foi lançado recentemente como software livre de código aberto, mas não está disponível para o Ubuntu.

    Pacotes Ubuntu

    Programas, bibliotecas e arquivos de cabeçalho para bibliotecas geralmente são fornecidos em pacotes diferentes, o que facilita a instalação de alguns, mas não de outros - como ter uma biblioteca instalada para executar programas que precisam dela, sem ter os arquivos de cabeçalho instalados que seriam necessários para desenvolver programas usando a biblioteca.

    Os pacotes que fornecem bibliotecas geralmente são nomeados começando com lib. Os pacotes que fornecem arquivos de cabeçalho geralmente são nomeados com terminação -dev. Consulte Como pacotes diferentes podem ter código-fonte idêntico? para detalhes sobre isso.

    build-essentialinstala o GCC e também suporta bibliotecas para C e C++, arquivos de cabeçalho para essas bibliotecas de suporte e várias outras ferramentas úteis. Se você estiver desenvolvendo programas em C, C++ ou Objective C, mesmo com outro compilador, você desejará instalar esse metapacote. Se por algum motivo você quiser instalar o GCC sozinho, existe o gccpacote, mas isso não instala todos os compiladores. (GCC é a "GNU Compiler Collection.) Para C++, você também instalaria o g++. Mas eu recomendo apenas instalar o build-essential.

    clanginstala o Clang, incluindo o compilador C++.

    GNU libc é fornecido pelo libc6pacote. Você já tem isso. Se você não fizer isso, seu sistema Ubuntu está severamente quebrado e quase nada nele será executado. Seus arquivos de cabeçalho são fornecidos pelo libc6-devpacote, que você pode ter ou não, mas que build-essentialirá instalar.

    libstdc++ é normalmente, dependendo da versão, fornecida pelo libstdc++6pacote. (Isso não significa que você está usando a versão 6. A nomenclatura é por motivos históricos e de compatibilidade.) Seus arquivos de cabeçalho são fornecidos por um -devpacote com nome semelhante, não necessariamente com um 6no nome. Na maioria dos sistemas Ubuntu atuais, isso é libstdc++-9-dev. A instalaçãobuild-essential de , ou g++, traz os arquivos de cabeçalho necessários se você não os tiver.

    libc++ é atualmente fornecido por pacotes nomeados como libc++1-10e libc++abi1-10, e seus arquivos de cabeçalho são fornecidos por libc++-10-dev, com o número da versão real no lugar de 10(se for diferente). Assim como no libstdc++, normalmente você não deve instalar diretamente nenhum desses pacotes para obter o que precisa para construir programas direcionados ao libc++. Em vez disso, instale olibc++-dev . Isso fornece a você libc++-10-devou qualquer outra versão do pacote de arquivos de cabeçalho que é o padrão para seu sistema, que por sua vez depende dos pacotes que fornecem os binários da biblioteca real, garantindo que você os obtenha também.

    • 4

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve