Подтвердить что ты не робот

На каких языках, кроме C, я могу написать C-библиотеку?

Я хочу написать библиотеку, динамически загружаемую и вызываемую из кода C, но я действительно не хочу писать ее в C - код критически критичен, поэтому мне нужен язык, который упрощает уверенность что мой код верен. Каковы мои варианты?

Чтобы быть более конкретным, я хочу, чтобы программисты C имели возможность #include this и -l, и начали использовать мою библиотеку так же, как если бы я написал ее на C. Я хотел бы распространять я 'd как программисты на других языках, чтобы иметь возможность использовать свои любимые инструменты для связывания с библиотеками C, чтобы ссылаться на него. В идеале я бы хотел, чтобы это было возможно на каждой платформе, поддерживающей C, но я соглашусь на Linux, Windows и MacOS.

4b9b3361

Ответ 1

Наконец, есть достойный ответ на этот вопрос: Rust.

Ответ 2

Все, что компилируется в собственный код. Таким образом, вы можете использовать Google для этого - "языки, которые компилируются в собственный код". См., Например, Языки программирования, которые компилируются на собственный код и содержат батареи

С++ часто является выбором для этого. Компиляция с собственным кодом и при условии, что ваши интерфейсы просты и легки в написании адаптера.

Возможны также C и Fortran.

Ответ 3

Похоже, вы ищете язык с ABI или который может быть описан как результат native. До тех пор, пока он может быть скомпилирован в действительный объектный файл (обычно файл .obj или .o), который принимается компоновщиком, это должен быть главный критерий. Кроме того, вы хотите написать файл заголовка в качестве удобства для любого клиентского кода, который написан на C (или близкого родственного языка/варианта).

Как уже упоминалось другими, вам нужна довольно веская причина для выбора языка, отличного от C, поскольку это lingua-franco низкоуровневого/системного программного обеспечения. Ассемблер является вариантом, хотя сложнее переносить между платформами. D - это более портативная, но менее распространенная альтернатива, которая предназначена для создания безопасного, эффективного нативного кода с минимальным шумом. Есть много других.

Ответ 4

Почти каждое критичное для безопасности приложение, о котором я знаю, написано на C. Я не верю, что есть другие языки, которые имеют более высокий реальный статус при создании безопасных приложений.

C считается бедным языком для безопасности людьми, которые не понимают.

Если вы хотите, чтобы программисты C использовали вашу библиотеку, используйте C. Выполнение чего-либо еще связывает одну руку за вашей спиной, пытаясь ходить на балансировочном барабане (оборудование для гимнастики). Несомненно, существуют десятки других языков, которые CAPABLE взаимодействуют с C, но обычно он включает в себя использование слоя C, а затем наложение типов данных C на тип данных, специфичный для языка (объекты Java, объекты Python и т.д. И т.д.) И когда вызов завершен, вы используете то же преобразование обратно к типу данных C. Просто затрудняет работу и потенциально медленнее, если вы не получите все проектные решения. И люди не поймут исходный код, поэтому не захотят его использовать (подробнее об этом см. Ниже).

Если вам нужна безопасность, тогда напишите очень хороший код, надежно одетый в ваши "аспекты безопасности", навсегда, найдите список рассылки или веб-сайт безопасности и разместите его там для ознакомления, просмотрите комментарии на форуме, поймите комментарии и исправить любые комментарии, которые имеют смысл исправить. Распространяйте исходный код для пользователей, чтобы люди могли видеть, что делает ваш код. Те, кто понимает безопасность, будут знать, что искать и понимать, что вы проделали хорошую работу (или плохая работа, в зависимости от того, что применимо), и те, кто этого не сделает, надеются, что верят правильному поплю. Если это хорошо, люди будут его использовать. Если он "скрыт" и нелегко получить доступ, вы не получите много клиентов, независимо от того, какой язык вы используете.

Не волнуйтесь, вы не увидите ничего больше от выпуска источника. Если в коде есть недостаток, и он популярен (или важен) достаточно, кто-то найдет недостаток, даже если вы публикуете только двоичные файлы. Для специалистов в области обратной инженерии отсутствие исходного кода является лишь небольшим препятствием.

Безопасность не связана с использованием определенного языка или конкретного инструмента, это связано с хорошим дизайном и хорошим базовым пониманием проблем безопасности.

И помните, что безопасность по неизвестности (означает ли это "скрытый исходный код" или "необычный язык" или что-то еще неявное) является ложной защитой.

Ответ 5

Вам может быть интересен ATS, http://ats-lang.sourceforge.net/. Компиляция ATS через C может быть столь же эффективной, как и C, и может использоваться таким образом, что ABI-совместимо с C. На веб-сайте проекта:

ATS - это статически типизированный язык программирования, который унифицирует реализацию с формальной спецификацией. Он оснащен системой с очень выразительным типом, внедренной в структуру Applied Type System, которая дает название языка. В частности, в ATS доступны как зависимые типы, так и линейные типы. Текущая реализация ATS (ATS/Anairiats) написана в САД. Он может быть таким же эффективным, как C/С++ (см. "Тесты компьютерных игр" для конкретных доказательств) и поддерживает множество парадигм программирования.

Система зависимого от ATS и линейного типа помогает создавать статические гарантии относительно вашего кода, включая различные аспекты безопасности управления ресурсами.

Chris Double пишет серию статей, посвященных изучению возможностей системы ATS для системного программирования здесь: http://bluishcoder.co.nz/tags/ats/. Особо следует отметить эту статью: http://bluishcoder.co.nz/2012/08/30/safer-handling-of-c-memory-in-ats.html

В этом документе рассматриваются аспекты вызова между кодом ATS и C: https://docs.google.com/document/d/1W6DYQApEqKgyBzMbvpCI87DBfLdNAQ3E60u1hUiMoU0

Основной недостаток заключается в том, что программирование с зависимой печатью остается сложной перспективой даже для несистемного программирования. Синтаксис языка также немного странный: рассмотрите лексические причуды, такие как использование [email protected] в качестве ключевого слова. Наконец, ATS в какой-то степени является исследовательским проектом, и я лично не знаю, было бы разумно принять его для коммерческих целей.

Ответ 6

Теоретически, это будет Fortran: меньше косвенности (как в: мой массив [здесь], а не только указатель на здесь, и это относится к большинству, но не ко всем вашим структурам данных и переменным).

Однако... В Фортране много ошибок и причуд: не, возможно, столько же, сколько в C, но вы, вероятно, знаете свой путь вокруг C, а не Fortran. В чем смысл большинства комментариев: "Знай свой код" - но знаете ли вы, что делает ваш компилятор?

Зная вас, я готов взять это на веру, что вы делаете, для C. Большинство программистов этого не делают. Вы не знаете и не можете знать, что делает локальный JVM или JIT-компилятор, и что черная дыра в вашей модели безопасности, если вы используете языки сценариев Java или С# r.

Игнорируйте всех, кто говорит вам, что пожилые люди с безопасными вычислениями пишут свой собственный ассемблер: они, вероятно, даже не знают ошибок безопасности, которые они создают в любых нетривиальных проектах, которые они выпускают. Знай свой компилятор.

Ответ 7

Вы можете написать его в lua - предоставление C API для библиотеки Lua относительно прямолинейно. С++ также является вариантом, хотя, конечно, вам придется писать C-обертки и не исключать, что никакие исключения не смогут избежать ваших функций. Но, честно говоря, если безопасность критически важна, незначительные неудобства языка C не должны быть столь значительными. То, что вы действительно должны делать, доказывает правильность вашей программы там, где это возможно, и тщательно тестируйте, где это не так.

Ответ 8

Вы можете написать библиотеку на Java. JNI обычно используется для вызова C из Java, но его можно использовать по-другому.