История изменений
Исправление 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() на Си при условии, что оно будет компилироваться специальным компилятором.
Возможность писать библиотеки, которые можно дёргать из любого языка, — это отнюдь не тривиальная вещь. Она накладывает сильные ограничения на свободу в дизайне языка. Поэтому её отсутствие — это вовсе не такая «жопа», как кажется на первый взгляд.