Является ли знание C# какого-либо использования в системе Linux?

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

Обратите внимание, что я специализируюсь на Unity3D, но я все еще хочу создавать приложения для Linux с использованием C#.

5 ответов

Решение

Скорее всего, вы наткнетесь на http://www.mono-project.com/

Как сказано на странице About Mono:

Mono, платформа разработки с открытым исходным кодом, основанная на.NET Framework, позволяет разработчикам создавать кроссплатформенные приложения с повышенной производительностью разработчиков. Внедрение Mono.NET основано на стандартах ECMA для C# и инфраструктуры общего языка.

Поддерживаемые платформы включают Linux.

Да, вы можете разрабатывать программное обеспечение на Ubuntu, которое само будет работать на Ubuntu, в C#. И Mono, и .NET Core поддерживают системы GNU/Linux, такие как Ubuntu. (Вы можете использовать их и в других дистрибутивах, таких как Debian, Raspbian, Fedora, CentOS, Arch, Gentoo и т. Д.) Игровой движок Unity3D также поддерживает Ubuntu, как вы, наверное, знаете. Unity3D встраивает моно.

Ряд пакетов для Ubuntu, устанавливаемых с помощью менеджера пакетов Ubuntu из официально поддерживаемых сообществом источников программного обеспечения, написаны на C# и используют Mono. Сюда входят музыкальный проигрыватель Banshee, приложение для заметок Tomboy, редактор растровой графики Pinta и менеджер паролей KeePass (начиная с версии 2).

Большинство текстовых редакторов, таких как Gedit, Vim и Emacs, имеют подсветку синтаксиса для C#. MonoDevelop и Visual Studio Code - две популярные интегрированные среды разработки, которые работают в Ubuntu и поддерживают разработку на C#.

  1. Теперь вы можете разрабатывать серверные приложения для Linux с использованием C# ( .NET Core framework), как вы можете использовать Java или Python. Под серверными приложениями я имею в виду, в основном, веб-приложения и веб-службы (REST). Это идеально подходит для контейнеров Linux ( Docker/ K8s) и облаков.
  2. Вы можете разрабатывать настольные приложения на C#, используя Mono Framework (реализация.NET) и GTK# (GtkSharp), набор инструментов (оболочка GTK). На нем разработано много проектов. Эта структура имела некоторое сопротивление со стороны сообщества Linux в прошлом. Некоторым дистрибутивам и пользователям не нужны приложения Mono.
  3. Вы можете разрабатывать игры с Unity Engine, используя C# на Linux. Unity Editor пока работает на Linux.

Так да. Знания о C# могут быть очень полезны в системах Linux сегодня.

Теперь вы даже можете создавать кросс-платформенные приложения на основе XAML (Linux, Mac, Windows, Android, iOS, UWP), используя.Net Core и новый проект под названием Avalonia. Авалония находится в бета-версии, но теперь работает довольно хорошо. Он похож на WPF, но с некоторыми CSS-подобными улучшениями стиля.

Я считаю, что в Linux Avalonia в настоящее время нацелена на Gtk, но они хотят перейти к чему-то другому. Это упоминается в этом видео, но я лично не мог понять, что он сказал: https://www.youtube.com/watch?v=WESJUJWBLJ0

Linux предоставляет собственные API на языке программирования C. Нативная программа Linux использует эти API для доступа к файлам, устройствам ввода-вывода, сокетам (сети), межпроцессному взаимодействию, многопоточности и т. д. Чтобы создать собственное приложение Linux, вы должны написать свое приложение на C, а затем скомпилировать его с помощью скорее всего) GCC получит исполняемый файл. Вы даже можете пойти дальше и использовать библиотеки графического интерфейса в своей программе, чтобы добавить графический интерфейс (GTK и Qt являются двумя популярными) или использовать систему упаковки для упаковки вашего приложения (например, файлы .deb и .rpm).

C#, F# и VB имеют свой собственный компилятор (который обычно создает код IL вместо машинного кода) и вместо прямого использования собственных API-интерфейсов Windows или Linux (оба на C) имеют свои собственные оболочки вокруг них. Это означает, что между скомпилированным кодом и ОС должен быть еще один дополнительный слой. Этот дополнительный уровень должен считывать код IL и преобразовывать его в собственные API-интерфейсы Windows, Linux или macOS. Этот дополнительный уровень может быть .NET Framework, Mono или .NET Core (в настоящее время только .NET).

Теперь, чтобы ответить на вопрос «Можно ли использовать C# для системного программирования Linux?», в большинстве случаев да.

В .NET есть библиотеки для обработки файлов, работы в сети, многопоточности и некоторых устройств ввода/вывода. Теперь, например, скажем, вам нужно получить доступ к Bluetooth в вашем приложении. В .NET нет никаких API для Bluetooth, поэтому в таких случаях у вас есть два варианта:

  1. Найдите нативный API на C и вызовите его на C#
  2. Выполните поиск в NuGet, чтобы узнать, сделал ли это уже кто-то.

Другими примерами могут быть WiFi Direct, геймпад, температура процессора, информация об аккумуляторе, камера, GPS, датчики ноутбука и т. д. Таким образом, для низкоуровневых приложений вы сами (это касается даже Windows, если вы не используете UWP). . Для таких приложений в Linux C или Python были бы лучшим выбором.

Если вы хотите добавить графический интерфейс в свое приложение, в .NET есть библиотеки графического интерфейса, но только для Windows. Mono, с другой стороны, имеет привязки для GTK, называемые GTK#, но, естественно, GTK# всегда будет отставать от разработки GTK (что не является проблемой, если вы не хотите использовать новейшие функции).

В .NET 6 есть еще одно решение для кроссплатформенного графического интерфейса. В .NET 6 вы можете создать приложение Blazor с помощью C#, HTML и CSS и использовать Electron для создания из него настольного приложения (на момент написания этой статьи оно еще не готово).

Подводить итоги:

Плюсы C# в Linux

  • Вы бы использовали свои существующие навыки
  • Если вы придерживаетесь библиотек .NET, ваше приложение будет переносимым на Windows и Mac.
  • Вы имеете дело с современным чистым языком, а не с 50-летним (хардкорные программисты на C могут не согласиться:D)

Минусы C# в Linux

  • Многие нативные API недоступны
  • На бумаге собственный код C будет быстрее, чем код C#, зависящий от фреймворка. Хотя можно напрямую скомпилировать для Linux, но мы потеряли бы переносимость, и с сегодняшним оборудованием пользователи все равно не почувствуют разницы.
  • Ваши руки крепче для приложения с графическим интерфейсом
Другие вопросы по тегам