Изучение исходного кода Mono

Я заинтересован в том, чтобы внести что-то моно, будь то документация или что-то еще. В качестве первого шага я загрузил исходное дерево для прохождения кода. Однако я подумал, что если кто-то потратит достаточно времени, чтобы понять структуру проекта, которая поможет всем здесь. Кто-нибудь указывает, где хорошо объясняется структура проекта?

ПРИМЕЧАНИЕ. Это не дубликат вопроса https://stackoverflow.com/info/1655090/mono-source-code-walkthrough-tutorial, ответ на этот вопрос не достаточен для моего ожидания.

Ответ 1

Вы должны вынести (URL-адрес проверки subversion здесь):

  • багажник /libgdiplus

    Это библиотека, используемая System.Drawing.

  • Ствол/моно

    Это то, что мы называем Mono runtime. Содержит в основном исходный код C. В этом каталоге вы найдете:

    • data/: несколько файлов конфигурации для разных версий (1.x, 2.x,...).
    • msvc */: файлы решений Visual Studio для создания среды выполнения Mono.
    • libgc/: источники коллекционера мусора Boehm.
    • mono/: источники времени исполнения Mono.
      • mini/: исходный код JIT
      • метаданные /: это почти все функции, используемые средой исполнения Mono (маршалинг, пул потоков, сокеты ввода/вывода, ввод/вывод файлов, консольный ввод-вывод, домены приложений, счетчики производительности,...). Это более или менее один файл C каждый.
      • использовать: различные функции.
      • io-layer/: функции эмуляции Win32 I/O.
  • ствол /MCS

    Здесь компилятор С#, библиотеки классов, тесты библиотек классов и другие инструменты.

    • class/: одна папка на сборку. Каждый из них содержит исходный код для каждой сборки, разделенной в каталогах с именем пространства имен (например, System/System.Configuration и т.д.) И обычно также в тестовом каталоге. Единственным исключением является mscorlib, соответствующая папка которого называется corlib.

      Например, если вы хотите увидеть исходный код System.Net.HttpWebRequest, который находится в сборке System.dll, перейдите в trunk/mcs/class/System/System.Net, и там должен быть файл названный HttpWebRequest.cs, содержащий код, который вы ищете.

    • mcs/: источники для компиляторов С# (mcs, gmcs, smcs, dmcs...)

    • tools/: это набор инструментов, используемых для разработки (sn, wsdl,...), документация (monodoc) и т.д. Большинство имен инструментов соответствуют MS.

Существует гораздо больше каталогов, но вам нужно искать коды C и С#. Кроме того, я предложил багажник для проверки, так как вы получите самые современные источники.

Обновление: Моно сейчас находится в github, а mcs интегрирован в моно-репозиторий. p >

Ответ 2

Gonzalo предоставил хороший обзор различных модулей.

Поскольку вы также упомянули о желании внести свой вклад в документацию, вам понадобится еще несколько фрагментов информации.

Во-первых, документация хранится в XML файлах внутри mcs/class/[assembly]/Documentation/, например. mcs/class/corlib/Documentation. Цель состоит в поддержке нескольких человеческих языков (хотя в настоящее время работает только английский), поэтому в Документация находится языковой каталог, обычно en. Внутри en есть файлы ns-*.xml, например. mcs/class/corlib/Documentation/en/ns-System.xml содержит документацию для пространства имен System. Кроме того, в en находятся "точечные пространства имен", а внутри них - файлы XML, по одному на тип, например mcs/class/corlib/Documentation/en/System.Collections.Generic/IEnumerable`1.xml.

Это также описано в документации mdoc(5) в разделе FILE/DIRECTORY STRUCTURE.

После того, как вы нашли документацию, вам необходимо знать формат XML, который также описан в документации mdoc(5), в разделе NamespaceName/TypeName.xml File Format. Используемый диалект XML представляет собой вариант ECMA 335 XML-документация, изменено на один файл для каждого типа (вместо всех типов в одном монолитном файле). Это также надстройка документация на С# XML (см. Annex E. Documentation Comments, с. 487).

Наконец, возникает вопрос о добавлении новых типов/членов в каталог mcs/class/[assembly]/Documentation. Если вы создали Mono, вы можете использовать цель doc-update Makefile. Это запустит соответствующую сборку через mdoc (1) и обновит соответствующие файлы в каталоге Документация.

Если у вас есть другие вопросы по документации, не стесняйтесь спрашивать в mono-docs-list список рассылки.