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 / unix / Perguntas / 789871
Accepted
Даниил Носиков
Даниил Носиков
Asked: 2025-01-20 16:08:21 +0800 CST2025-01-20 16:08:21 +0800 CST 2025-01-20 16:08:21 +0800 CST

Alternativas ao GNU assembler

  • 772

Estou tentando construir meu sistema do zero, já que gosto muito da ideia de atomicidade de cada programa na abordagem do tipo Unix. Gostaria de preservá-la o máximo possível na minha construção.

Como o GNU binutils, de certa forma, viola esse princípio, gostaria de saber se existe apenas o GNU assembler, que não seria dependente do binutils?

Se não, há alguma alternativa mínima e performática ao GNU assembler? Eu conheço o yasm, mas caso haja um melhor, eu gostaria de saber.

Agradeço antecipadamente.

gnu
  • 1 1 respostas
  • 49 Views

1 respostas

  • Voted
  1. Best Answer
    Marcus Müller
    2025-01-21T02:13:06+08:002025-01-21T02:13:06+08:00

    já que eu realmente gosto da ideia de atomicidade de cada programa na abordagem unix-like

    Não sou eu que vou lhe dizer como interpretar alguma filosofia, mas acho que sua suposição de que um assembler sem um linker seria útil para construir software está errada. O mesmo vale para um compilador; esses três precisam trabalhar bem juntos, e eles pertencerem a um e ao mesmo projeto de software faz muito sentido.

    Geralmente, a "filosofia UNIX", como quer que você a defina, definitivamente não diz "todos os programas são completamente independentes sem código compartilhado entre si". O contrário deve ser o caso - uma das coisas legais sobre o UNIX "original" era que ele rapidamente suportava memória virtual e vinculação com bibliotecas. Então, de forma alguma os programas UNIX são "atômicos"! Isso é literalmente o oposto do que ser capaz de usar chamadas de sistema POSIX como dlopen, ou a ideia de memória compartilhada POSIX sugere (e isso existe desde pelo menos desde SysV, por volta de 1983, até onde uma busca rápida me diz.
    Então, talvez reduza seu "desejo por pureza" aí; o UNIX em si não foi feito para lhe dar programas atômicos, mas para permitir que você componha programas a partir de partes em bibliotecas de funções e faça com que eles trabalhem juntos em arquivos trocados por meio de um sistema de arquivos estável.
    É por isso que C existe - porque Kernighan e Ritchie precisavam de uma linguagem que lhes permitisse fazer exatamente isso, construir programas que interagissem com componentes, e o assembler não fornecia uma convenção de chamada definida.
    As pessoas confundem "nenhum pedaço de código pode ter mais de um propósito" com "compor scripts complexos canalizando a saída para a entrada padrão do próximo processo", mas esse conceito é na verdade muito menos central do que a ideia de que você pode chamar funções de bibliotecas que você poderia compartilhar com outras pessoas¹.


    Dito isto:

    Você pode, é claro, construir e instalar o GNU assembler sozinho, mas não será muito útil. Então, não há problema aqui para resolver; apenas ignore as coisas que você não quer.

    Se você quiser construir um kernel, precisará usar o GNU assembler ou talvez o llvm-asconcorrente (que é ainda mais modular e praticamente inútil sem o frontend clang C).


    ¹ E, francamente, estou meio incomodado com a afirmação de que "cada programa tem apenas um propósito muito singular e esse é um bom design de sistema para tudo". Tenho certeza de que você prefere editar seus arquivos de texto em edem vez de vimou emacs, e tenho certeza de que, como um purista do UNIX, você odeia awkcom paixão, pois ele permite que você escreva programas complexos de processamento de texto em vez de compô-los por meio de concatenações infinitas de programas por meio de descritores de arquivo, e a ideia de que seu shell pode ser usado para iniciar programas e contar até 1000 é uma farsa para você - mas, para mim, programas com conjuntos de recursos úteis em vez de mínimos parecem tornar meu dia mais produtivo. Não tenho certeza de como alguém conciliaria "ferramentas de propósito único são as ideais" com o uso de um navegador da web, que explicitamente é tudo - um leitor de notícias, um cliente de plataforma de perguntas e respostas, um cliente de e-mail, um reprodutor de vídeo, uma coleção praticamente infinita de jogos, um cliente para redes de bate-papo por texto, ...

    • 1

relate perguntas

  • GNU coreutils precisa de sugestões [fechadas]

  • Divida o arquivo em 4 partes usando a versão macOS do pacote dividido

  • Como posso serializar parcialmente com GNU make

  • bsdtar: Como evitar sobrescrever as informações do arquivo existente?

  • gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

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