Задела меня за живое фраза
"И тогда создание поистине всемирных библиотек кода на этом языке можно сделать по принципу Wikipedia."Автор: iZEN
Дата: 25.09.05
Пока ходил на базар за картошкой
— сформулировал, как это могло бы выглядеть. Решил поделиться — авось кому польза будет
Дисклямер: в нижеследующем тексте я не учитываю возможных технических ограничений; исхожу из того, что сервер ориентирован на 1 язык (из мейнстримовых).
Цель сайта — собрать большую библиотеку полезных code snippets (кусочков кода), могущих легко быть re-used.
Единица хранения
Один snippet — это некий набор единиц языка (классов, функций), не зависящий от сторонних библиотек (кроме стандартной библиотеки данного языка), служащий однозначно формулируемой цели, и могущий быть использованным "как есть", без переделки.
Поскольку однозначного имени (по которому любой программист его найдет) snippet'у дать нельзя, ему дается краткое описание и набор тегов (соответственно, поиск сниппета на сайте — отбор по тегам).
Редактирование snippets
Редактировать сниппет может кто угодно.
Для редактирования сниппета сайт должен предоставлять полноценный редактор кода (подсветка, автоотступ, сворачивание веток, autocomplete стандартной библиотеки).
Необходимо ввести сниппет и юнит-тест на него (код выполняющий проверку корректности сниппета и одновременно — демонстрацию его возможностей).
После этого сервер выполняет проверку.
Проверяется: синтаксис и компилируемость кода, стиль (на сервере существуют некоторые правила, типа длины имен переменных и прочая); выполняется юнит-тест. Результатом выполнения юнит-теста является список тестов, которые код прошел/не прошел, а так же (в идеале) покрытие кода тестами (какие классы/функции в выполнении юнит-теста задействованы не были).
Код, не прошедший проверку на компилируемость, запостить нельзя. Код, не прошедший
критические тесты, запостить нельзя. Код, не прошедший некритические тесты, запостить можно, в каталоге он будет показан как "сниппет такой-то — проходит 80% тестов".
Поиск и выбор snippets
Поиск идет по тегам и просто через поисковую систему. В списке отображается сниппет, его краткое описание, покрытие юнит-тестами (рейтинг?). При просмотре сниппета можно посмотреть его код, юнит-тест, результат выполнения юнит-теста, автоматически сгененрированное summary (только definitions). При этом сайт должен поддерживать простой рефакторинг — единожды задав в своем профайле свои соглашения по кодированию (отступы, переносы, case переменных и прочая), дальше все сниппеты вижу отформатированными по этим соглашениям. Просматриваемый сниппет можно загрузить (в смысле, соответствующий исходник без html'я), отредактировать, отредактировать только юнит-тест (к примеру, добавить еще один тест, демонстрирующий некорректность кода, или нехватающие в нем фичи).
Административное устройство
По всей видимости, кроме модераторов (чья функция — как всегда — пресекать хулиганство и вандализм) нужны maintainers (добровольцы-энтузиасты), которые станут более-менее регулярно просматривать новые и измененные сниппеты, выбрасывать никому-не-нужные, рефакторить плохо-написанные и т.п.
На закуску — проблемы реализации
Крутейшая среда с рефакторингом и веб-интерфейсом, серверная, выдерживающая дикие нагрузки — это не шубу в трусы заправить. Других проблем не видать
Возможно, нагрузку можно каким-то образом перенести на клиента (скачивается программа, в которую уже встроен редактор; каким-то образом полагаться на установленный у клиента компилятор, и т.п.).
JetBrains, ау?!
Dixi, вроде как.