Como as linguagens de programação se integram aos tempos de execução do sistema operacional?

5

Por exemplo, Objective-C, Swift e Ruby (ou seja, RubyMotion) integram-se ao framework Cocoa.

Isso é feito por meio de bibliotecas vinculadas? Eu suponho que eles chamam funções em binários existentes em vez de simplesmente recriar alguma interface comum.

    
por Brenden 02.07.2014 / 02:04
fonte

1 resposta

7

Por muitos métodos diferentes, não são facilmente reduzidos a apenas alguns paras. Aqui estão alguns, em ordem ascendente de abstração.

  1. O SO implementa uma ou mais instruções privilegiadas (trap, syscall, etc). O compilador emite código para traduzir certas construções de linguagem para essas instruções. [ASM]
  2. O sistema operacional fornece uma API em um formato compatível com as interfaces externas de um idioma de destino específico (que normalmente fornece um mecanismo para chamar unidades de tradução compiladas separadamente). As chamadas para o sistema operacional são indistinguíveis das chamadas para o código do usuário. [C]
  3. O sistema operacional fornece camadas de vinculação em um formulário destinado a ser compatível com as interfaces externas de vários idiomas de destino específicos. As chamadas para o sistema operacional são semelhantes às chamadas para o código do usuário. [C ++, muitos]
  4. O sistema operacional implementa uma API em um formulário projetado para ser chamado de vários idiomas, mas nativo para nenhum, junto com camadas de vinculação. Esse mecanismo também pode ser usado para chamadas para o código do usuário. [VB, COM]
  5. O sistema operacional fornece um 'framework' com uma ampla gama de recursos, em vez de acesso direto aos seus serviços. O compilador geralmente fornece acesso privilegiado à estrutura, bem como permite chamadas que são indistinguíveis do código do usuário. [C #, Java, Objective-C *]

Esses mecanismos geralmente são dispostos em camadas. As chamadas em uma camada superior são traduzidas em chamadas em uma camada inferior nos bastidores. O Objective-C é estranho, ao fornecer dois mecanismos API diferentes.

Em um nível de implantação física, os serviços podem ser fornecidos por:

  1. "traps" de código gerados diretamente no sistema operacional, geralmente fornecidos como macros.
  2. O código da biblioteca do SO é vinculado estaticamente (LIB), geralmente fornecido como arquivos 'header'.
  3. O código da biblioteca do SO é dinamicamente vinculado usando mecanismos de baixo nível semelhantes aos usados pelo próprio SO, geralmente por meio de cabeçalhos e um lib estático (DLL, SO) interveniente.
  4. O código da biblioteca do SO é vinculado dinamicamente usando um mecanismo que faz parte da especificação da API, usando mecanismos específicos para a especificação (COM, .NET)

Sempre que duas tecnologias diferentes (como Ruby e Cocoa) são capazes de interagir, geralmente há uma camada de vinculação criada por uma ferramenta ou manualmente. Eventualmente, ele usará um dos mecanismos acima (a menos que tenha perdido alguma coisa).

    
por 03.07.2014 / 16:56
fonte