Skip to main content
made some clarrification about inherrent differences.
Source Link
JonasH
  • 6.3k
  • 23
  • 21

There are several.

C calls are often the lowest common denominator supported by most languages. The problem is that it does not really support the notion of objects. For objects to be supported you need some standardized way to describe object structure and lifetimes, and there have been several attempts at this:

  1. Compontent Obect Model (COM) is one of the older ones
  2. The Java Virtual Machine can easily interop between all JVM languages
  3. The .Net Common Language Infrastructure allows for easy interop between all CLI languages.

But many languages have intrinsic differences that are difficult to reconcile. Memory management is a big one, and some language features are just not practical without some form of garbage collection. Mutability is another potential problem, if the languages do not agree on what can change or not you will have issues. Not to mention all the possible issues with dynamic vs static type systems. So unless all languages participate in the same interoperability scheme you will have issues. And participating in such a scheme will mean inherent limitations and dependencies that may not be very appealing to language designers.

A workaround is to use some Remote Procedure Call (RPC) protocol where data is serialized/deserialized instead. That would typically be easier to support by all languages, at the cost of some runtime overhead. See for example Open API or gRPC.

There are several.

C calls are often the lowest common denominator supported by most languages. The problem is that it does not really support the notion of objects. For objects to be supported you need some standardized way to describe object structure and lifetimes, and there have been several attempts at this:

  1. Compontent Obect Model (COM) is one of the older ones
  2. The Java Virtual Machine can easily interop between all JVM languages
  3. The .Net Common Language Infrastructure allows for easy interop between all CLI languages.

But many languages have intrinsic differences that are difficult to reconcile. Memory management is a big one, and some language features are just not practical without some form of garbage collection. Not to mention all the possible issues with dynamic vs static type systems. So unless all languages participate in the same interoperability scheme you will have issues. And participating in such a scheme will mean inherent limitations and dependencies that may not be very appealing to language designers.

A workaround is to use some Remote Procedure Call (RPC) protocol where data is serialized/deserialized instead. That would typically be easier to support by all languages, at the cost of some runtime overhead. See for example Open API or gRPC.

There are several.

C calls are often the lowest common denominator supported by most languages. The problem is that it does not really support the notion of objects. For objects to be supported you need some standardized way to describe object structure and lifetimes, and there have been several attempts at this:

  1. Compontent Obect Model (COM) is one of the older ones
  2. The Java Virtual Machine can easily interop between all JVM languages
  3. The .Net Common Language Infrastructure allows for easy interop between all CLI languages.

But many languages have intrinsic differences that are difficult to reconcile. Memory management is a big one, and some language features are just not practical without some form of garbage collection. Mutability is another potential problem, if the languages do not agree on what can change or not you will have issues. Not to mention all the possible issues with dynamic vs static type systems. So unless all languages participate in the same interoperability scheme you will have issues. And participating in such a scheme will mean inherent limitations that may not be very appealing to language designers.

A workaround is to use some Remote Procedure Call (RPC) protocol where data is serialized/deserialized instead. That would typically be easier to support by all languages, at the cost of some runtime overhead. See for example Open API or gRPC.

added 157 characters in body
Source Link
JonasH
  • 6.3k
  • 23
  • 21

There are several.

C calls are often the lowest common denominator supported by most languages. The problem is that it does not really support the notion of objects. For objects to be supported you need some standardized way to describe object structure and lifetimes, and there have been several attempts at this:

  1. Compontent Obect Model (COM) is one of the older ones
  2. The Java Virtual Machine can easily interop between all JVM languages
  3. The .Net Common Language Infrastructure allows for easy interop between all CLI languages.

But many languages have intrinsic differences that are difficult to reconcile. If one language has manual memoryMemory management and the other is garbage collected there is inherently the risk of bugs, since the GC cannot inspect the unmanaged memory for referencesa big one, and maysome language features are just not have the conceptpractical without some form of destructors often usedgarbage collection. Not to manage unmanaged memorymention all the possible issues with dynamic vs static type systems. So unless all languages participate in the same interoperability scheme you will have issues. And participating in such a scheme will mean inherent limitations and dependencies that may not be very appealing to language designers.

A workaround is to use some Remote Procedure Call (RPC) protocol where data is serialized/deserialized instead. That would typically be easier to support by all languages, at the cost of some runtime overhead. See for example Open API or gRPC.

There are several.

C calls are often the lowest common denominator supported by most languages. The problem is that it does not really support the notion of objects. For objects to be supported you need some standardized way to describe object structure and lifetimes, and there have been several attempts at this:

  1. Compontent Obect Model (COM) is one of the older ones
  2. The Java Virtual Machine can easily interop between all JVM languages
  3. The .Net Common Language Infrastructure allows for easy interop between all CLI languages.

But many languages have intrinsic differences that are difficult to reconcile. If one language has manual memory management and the other is garbage collected there is inherently the risk of bugs, since the GC cannot inspect the unmanaged memory for references, and may not have the concept of destructors often used to manage unmanaged memory. So unless all languages participate in the same interoperability scheme you will have issues. And participating in such a scheme will mean inherent limitations and dependencies that may not be very appealing to language designers.

A workaround is to use some Remote Procedure Call (RPC) protocol instead. That would typically be easier to support by all languages.

There are several.

C calls are often the lowest common denominator supported by most languages. The problem is that it does not really support the notion of objects. For objects to be supported you need some standardized way to describe object structure and lifetimes, and there have been several attempts at this:

  1. Compontent Obect Model (COM) is one of the older ones
  2. The Java Virtual Machine can easily interop between all JVM languages
  3. The .Net Common Language Infrastructure allows for easy interop between all CLI languages.

But many languages have intrinsic differences that are difficult to reconcile. Memory management is a big one, and some language features are just not practical without some form of garbage collection. Not to mention all the possible issues with dynamic vs static type systems. So unless all languages participate in the same interoperability scheme you will have issues. And participating in such a scheme will mean inherent limitations and dependencies that may not be very appealing to language designers.

A workaround is to use some Remote Procedure Call (RPC) protocol where data is serialized/deserialized instead. That would typically be easier to support by all languages, at the cost of some runtime overhead. See for example Open API or gRPC.

Source Link
JonasH
  • 6.3k
  • 23
  • 21

There are several.

C calls are often the lowest common denominator supported by most languages. The problem is that it does not really support the notion of objects. For objects to be supported you need some standardized way to describe object structure and lifetimes, and there have been several attempts at this:

  1. Compontent Obect Model (COM) is one of the older ones
  2. The Java Virtual Machine can easily interop between all JVM languages
  3. The .Net Common Language Infrastructure allows for easy interop between all CLI languages.

But many languages have intrinsic differences that are difficult to reconcile. If one language has manual memory management and the other is garbage collected there is inherently the risk of bugs, since the GC cannot inspect the unmanaged memory for references, and may not have the concept of destructors often used to manage unmanaged memory. So unless all languages participate in the same interoperability scheme you will have issues. And participating in such a scheme will mean inherent limitations and dependencies that may not be very appealing to language designers.

A workaround is to use some Remote Procedure Call (RPC) protocol instead. That would typically be easier to support by all languages.