LINUX.ORG.RU

История изменений

Исправление proud_anon, (текущая версия) :

Ну как бы ты понимаешь, что это жопа?

А сколько ты знаешь современных языков, которые можно вот так просто вызывать из Си? Кроме Си, C++ (и то с правильными заголовками) и ассемблера (и то может быть несогласование конвенций вызовов)? Ну, может быть, ещё Rust, но я его не щупал. Особенно со сборкой мусора и собственным управлением потоками.

Можешь ли ты, например, написать библиотеку на Java, которую можно дёргать из Си? Или на Python? Или на Haskell?

Некоторые языки — в том числе Go — позволяют дёргать код на Си и организовывать коллбэки, при условии, что main() написан на этом языке, а вызываемая функция «ведёт себя хорошо» и не лезет, например, менять память в непредсказуемых (с точки зрения рантайма и компилятора) местах или манипулировать потоками. Насколько я знаю, некоторые реализации Haskell позволяют писать main() на Си при условии, что оно будет компилироваться специальным компилятором.

Но возможность писать библиотеки, которые можно безо всяких костылей и оговорок дёргать из любого языка, — это отнюдь не тривиальная вещь. Она накладывает сильные ограничения на свободу в дизайне языка. Поэтому её отсутствие — это вовсе не такая «жопа», как кажется на первый взгляд. Во многих областях без неё можно прекрасно обойтись. Но не во всех. Это одна из причин популярности Си и Си++.

Исправление proud_anon, :

Ну как бы ты понимаешь, что это жопа?

А сколько ты знаешь современных языков, которые можно вот так просто вызывать из Си? Кроме Си, C++ (и то с правильными заголовками) и ассемблера (и то может быть несогласование конвенций вызовов)? Ну, может быть, ещё Rust, но я его не щупал. Особенно со сборкой мусора и собственным управлением потоками.

Можешь ли ты, например, написать библиотеку на Java, которую можно дёргать из Си? Или на Python? Или на Haskell?

Некоторые языки — в том числе Go — позволяют дёргать код на Си и организовывать коллбэки, при условии, что main() написан на этом языке, а вызываемая функция «ведёт себя хорошо» и не лезет, например, менять память в непредсказуемых (с точки зрения рантайма и компилятора) местах или манипулировать потоками. Насколько я знаю, некоторые реализации Haskell позволяют писать main() на Си при условии, что оно будет компилироваться специальным компилятором.

Но возможность писать библиотеки, которые можно безо всяких костылей и оговорок дёргать из любого языка, — это отнюдь не тривиальная вещь. Она накладывает сильные ограничения на свободу в дизайне языка. Поэтому её отсутствие — это вовсе не такая «жопа», как кажется на первый взгляд.

Исправление proud_anon, :

Ну как бы ты понимаешь, что это жопа?

А сколько ты знаешь современных языков, которые можно вот так просто вызывать из Си? Кроме Си, C++ (и то с правильными заголовками) и ассемблера (и то может быть несогласование конвенций вызовов)? Ну, может быть, ещё Rust, но я его не щупал. Особенно со сборкой мусора и собственным управлением потоками.

Можешь ли ты, например, написать библиотеку на Java, которую можно дёргать из Си? Или на Python? Или на Haskell?

Некоторые языки — в том числе Go — позволяют дёргать код на Си и организовывать коллбэки, при условии, что main() написан на этом языке, а вызываемая функция «ведёт себя хорошо» и не лезет, например, менять память в непредсказуемых (с точки зрения рантайма и компилятора) местах или манипулировать потоками. Насколько я знаю, некоторые реализации Haskell позволяют писать main() на Си при условии, что оно будет компилироваться специальным компилятором.

Возможность писать библиотеки, которые можно дёргать из любого языка, — это отнюдь не тривиальная вещь. Она накладывает сильные ограничения на свободу в дизайне языка. Поэтому её отсутствие — это вовсе не такая «жопа», как кажется на первый взгляд.

Исходная версия proud_anon, :

Ну как бы ты понимаешь, что это жопа?

А сколько ты знаешь современных языков, которые можно вот так просто вызывать из Си? Кроме Си, C++ и ассемблера (и то в последнем случае может быть несогласование конвенций вызовов)? Ну, может быть, ещё Rust, но я его не щупал. Особенно со сборкой мусора и собственным управлением потоками.

Можешь ли ты, например, написать библиотеку на Java, которую можно дёргать из Си? Или на Python? Или на Haskell?

Некоторые языки — в том числе Go — позволяют дёргать код на Си и организовывать коллбэки, при условии, что main() написан на этом языке, а вызываемая функция «ведёт себя хорошо» и не лезет, например, менять память в непредсказуемых (с точки зрения рантайма и компилятора) местах или манипулировать потоками. Насколько я знаю, некоторые реализации Haskell позволяют писать main() на Си при условии, что оно будет компилироваться специальным компилятором.

Возможность писать библиотеки, которые можно дёргать из любого языка, — это отнюдь не тривиальная вещь. Она накладывает сильные ограничения на свободу в дизайне языка. Поэтому её отсутствие — это вовсе не такая «жопа», как кажется на первый взгляд.