Изучение исходного кода 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 список рассылки.