Хороший пример это утилита jq.
Внутри у неё все функции имеют чистый вид: значения принимаются, а новые возвращаются — но при использовании проверяется, единственная ли это ссылка, если да, то изменения производятся по месту.
Я никогда не утверждал, что гит нельзя использовать. Просто гит делает хорошо только одно — управление версиями. Всё остальное делают другие инструменты.
Fossil же пример другого подхода, когда используется интегрированная и согласованная среда вместо набора инструментов. Возможно gitea также пример этого подхода, не могу этого сказать, так как не пользовался.
Оба подхода не отменяют друг друга, своими комментариями я пытался показать, что мир не однороден и бывают ситуации, когда требуются разные подходы.
Ближайшим аналогом того, что я хотел показать, это ситуация/спор про редакторы и IDE.
Принципиальной разницы нет, разница в удобстве: fossil — это как швейцарский нож, он не заменяет инструменты по отдельности, но всегда под рукой.
Например, в ситуации, когда интернета/связности нет вообще, рабочее место не твой и выделено ненадолго, а хочется иметь привычную среду разработки, лучше всего подходит fossil.
Но это по моему опыту, your mileage may vary.
Наличие жёстких ссылок на каталоги требует реализации специального сборщика мусора, зато появляются новые возможности типа анонимных временных каталогов.
Вот, например, любопытная статья GCFS: a Garbage-Collected Filesystem for Linux.
Небольшое замечание про обобщения: их компиляцию довольно трудно реализовать, так как появляются много нюансов и тонкостей, особенно если завязываться на Reflection.Emit.
Как пример рассмотрим аналог из статьи:
class TA<T> {
T x;
}
class TB<T, T2>: TA<T>
{
}
Первая неожиданность в том, что TA<T> и TA<T>, который базовый класс TB<T, T2>, — это разные типы.
Первый TA<T> — это обобщённый тип со свободным типом-параметром T.
Второй TA<T> — это конкретизированный обобщённый тип TA<T>, в котором тип-параметр T конкретизирован типом-аргументом T класса TB<T, T2>.
Чтобы было понятней, перепишу пример так:
class TA<T> {
T x;
}
class TB<D, N>: TA<D> {
}
Вторая неожиданность в том, что работа Reflection.Emit с обобщёнными типами описана довольно сжато и не всегда в итоге получалось сравнивать корректно типы и их методы.
Я поддерживал паскаль-подобный язык, компилирующийся в .Net, и обобщённые типы поддерживал только в контексте использования готовых, а реализацию объявления своих обобщённых типов отложил, так как слишком большие затраты на реализацию и поддержку с малым практическим результатом.
Третья неожиданность заключается в том, что авторы ICorDebug — набора интерфейсов для доступа к отладчику .NET, поддержку обобщённых типов добавили позже, с неполным отображением.
(Это всё моё мнение, поддержкой проекта я занимался 6-8 лет назад, сейчас с наличием .NET Core с открытыми исходниками, наверное, будет полегче).
Я проблему с поиском решал с помощью программы «Архивариус 3000»: всю информацию (html, pdf, прочие форматы) сохранял в определённый каталог, а потом с помощью запросов искал нужное.
Поэтому такие библиотеки не используют.
GPL ядра линукса покрывает только ядро и модули. Условия лицензии позволяют разрабатывать проприетарный код, который исполняется в userspace и взаимодействует с ядром через стандартный интерфейс.
ePub — конечный формат представления, такой же как и PDF, не предназначен для редактирования и преобразования
FB2 — семантический формат хранения и подготовки художественной литературы
ePub получил распространение как формат потребления
FB2 распространён на территории exСССР как формат хранения и подготовки художественной литературы (в силу определённых причин, не буду вдаваться), не предназначен для непосредственного потребления
ePub и FB2 — разные форматы и не конкурируют: тот же ePub успешно формируется из FB2
Этого я и не отрицал.
Факт в том, что из произвольного epub нельзя автоматически выделить семантику хотя бы наподобие того, что есть в fb2: сноски, иерархию секций, эпиграфы, цитаты, стихи и т.п.
Я не видел семантической разметки html в epub'ах.
FB2 со товарищи тем и хорош, что позволяет из одного источника подготовить необходимый формат для чтения на нужном устройстве.
Она свободна доступна для чтения здесь: pdf.
Внутри у неё все функции имеют чистый вид: значения принимаются, а новые возвращаются — но при использовании проверяется, единственная ли это ссылка, если да, то изменения производятся по месту.
Fossil же пример другого подхода, когда используется интегрированная и согласованная среда вместо набора инструментов. Возможно gitea также пример этого подхода, не могу этого сказать, так как не пользовался.
Оба подхода не отменяют друг друга, своими комментариями я пытался показать, что мир не однороден и бывают ситуации, когда требуются разные подходы.
Ближайшим аналогом того, что я хотел показать, это ситуация/спор про редакторы и IDE.
Например, в ситуации, когда интернета/связности нет вообще, рабочее место не твой и выделено ненадолго, а хочется иметь привычную среду разработки, лучше всего подходит fossil.
Но это по моему опыту, your mileage may vary.
Этой команды недостаточно.
Всё равно надо организовывать либо доступ, либо свой хостинг, либо использовать сторонние ресурсы.
Вот, например, любопытная статья GCFS: a Garbage-Collected Filesystem for Linux.
Информация в них как раз в формате Хабра: полезная и не излишне подробная.
Как пример рассмотрим аналог из статьи:
Первая неожиданность в том, что TA<T> и TA<T>, который базовый класс TB<T, T2>, — это разные типы.
Первый TA<T> — это обобщённый тип со свободным типом-параметром T.
Второй TA<T> — это конкретизированный обобщённый тип TA<T>, в котором тип-параметр T конкретизирован типом-аргументом T класса TB<T, T2>.
Чтобы было понятней, перепишу пример так:
Вторая неожиданность в том, что работа Reflection.Emit с обобщёнными типами описана довольно сжато и не всегда в итоге получалось сравнивать корректно типы и их методы.
Я поддерживал паскаль-подобный язык, компилирующийся в .Net, и обобщённые типы поддерживал только в контексте использования готовых, а реализацию объявления своих обобщённых типов отложил, так как слишком большие затраты на реализацию и поддержку с малым практическим результатом.
Третья неожиданность заключается в том, что авторы ICorDebug — набора интерфейсов для доступа к отладчику .NET, поддержку обобщённых типов добавили позже, с неполным отображением.
(Это всё моё мнение, поддержкой проекта я занимался 6-8 лет назад, сейчас с наличием .NET Core с открытыми исходниками, наверное, будет полегче).
GPL ядра линукса покрывает только ядро и модули. Условия лицензии позволяют разрабатывать проприетарный код, который исполняется в userspace и взаимодействует с ядром через стандартный интерфейс.
Давайте-ка проясним обсуждаемый вопрос, мои утверждения следующие:
И как таковой довольно успешен в своей нише.
Факт в том, что из произвольного epub нельзя автоматически выделить семантику хотя бы наподобие того, что есть в fb2: сноски, иерархию секций, эпиграфы, цитаты, стихи и т.п.
FB2 со товарищи тем и хорош, что позволяет из одного источника подготовить необходимый формат для чтения на нужном устройстве.