Come si integrano i linguaggi di programmazione con i runtime del sistema operativo

5

Ad esempio, Objective-C, Swift e Ruby (cioè RubyMotion) si integrano con il framework Cocoa.

Questo è fatto tramite librerie collegate? Presumo che chiamino funzioni nei binari esistenti invece di ricreare semplicemente un'interfaccia comune.

    
posta Brenden 02.07.2014 - 02:04
fonte

1 risposta

7

Con molti metodi diversi, non facilmente ridotti a pochi paras. Eccone alcuni, in ordine di astrazione all'incirca ascendente.

  1. Il sistema operativo implementa una o più istruzioni privilegiate (trap, syscall, ecc.). Il compilatore emette il codice per tradurre determinati costrutti di linguaggio in quelle istruzioni. [ASM]
  2. Il sistema operativo fornisce un'API in un formato compatibile con le interfacce esterne di una specifica lingua di destinazione (una che normalmente fornisce un meccanismo per chiamare unità di traduzione compilate separatamente). Le chiamate al sistema operativo sono indistinguibili dalle chiamate al codice utente. [C]
  3. Il sistema operativo fornisce strati vincolanti in un formato destinato a essere compatibile con le interfacce esterne di una specifica lingua di destinazione. Le chiamate al sistema operativo sono simili alle chiamate al codice utente. [C ++, molti]
  4. Il sistema operativo implementa un'API in un modulo progettato per essere richiamabile da vari linguaggi ma nativo a nessuno, insieme ai livelli di associazione. Questo meccanismo può anche essere utilizzato per le chiamate al codice utente. [VB, COM]
  5. Il sistema operativo fornisce un "framework" con una vasta gamma di funzionalità, al posto dell'accesso diretto ai suoi servizi. Il compilatore di solito fornisce un accesso privilegiato al framework, oltre a consentire chiamate indistinguibili dal codice utente. [C #, Java, Objective-C *]

Questi meccanismi sono spesso stratificati. Le chiamate a un livello superiore vengono tradotte in chiamate a un livello inferiore dietro le quinte. Objective-C è uno strano, nel fornire due diversi meccanismi API.

A livello di implementazione fisica, i servizi possono essere forniti da:

  1. Il codice generato "trap" direttamente nel sistema operativo, spesso fornito come macro.
  2. Il codice della libreria del SO è linkato staticamente (LIB), spesso fornito come file 'header'.
  3. Il codice della libreria del sistema operativo è collegato dinamicamente utilizzando meccanismi di basso livello simili a quelli utilizzati dal sistema operativo stesso, spesso tramite intestazioni e una libreria statica (DLL, SO) intervallata.
  4. Il codice della libreria del sistema operativo è collegato in modo dinamico utilizzando un meccanismo che fa parte delle specifiche API, utilizzando meccanismi specifici per le specifiche (COM, .NET)

Laddove due diverse tecnologie (come Ruby e Cocoa) sono in grado di interagire, di solito c'è uno strato vincolante creato da uno strumento o manualmente. Alla fine userà uno dei meccanismi sopra elencati (a meno che non mi sia sfuggito qualcosa).

    
risposta data 03.07.2014 - 16:56
fonte