Являются regex инструменты (как RegexBuddy) хорошей идеей?

В объекте struct file_operations ни одна из функций обратного вызова не является обязательной .

Когда VFS (Virtual FileSystem) находит какую-либо функцию равной NULL, она может интерпретировать ее как реализацию по умолчанию (например, .open() и .close() просто возвращает 0 по умолчанию) или как «для данного файла данная функциональность не поддерживается "(например, отсутствие .write() и некоторых других полей означает, что данный файл не поддерживает запись в него).

Заполните только те функции, которые необходимы для реализации нужной вам функции.


Единственное поле в struct file_operations, которое рекомендуется заполнить , - это поле owner. В большинстве случаев его следует установить на THIS_MODULE:

.owner = THIS_MODULE

Таким образом, вы защитите другие функции обратного вызова от выгрузки модуля .

11
задан Community 23 May 2017 в 12:16
поделиться

10 ответов

Плохое программирование редко является отказом инструмента. Это - отказ разработчика, не понимающего инструмент. Мне это похоже на высказывание, что плотник не должен владеть отверткой, потому что он мог бы использовать винт, где гвоздь будет более соответствующим.

44
ответ дан 3 December 2019 в 00:44
поделиться

Необходимо поощрить использование инструментов, которые делают разработчиков более эффективными. Однако важно удостовериться, что они используют правильный инструмент для задания. Необходимо будет обучить всех членов команды на том, когда будет уместно использовать регулярное выражение, и когда (less|more) требуются мощные методы. Наконец, любое регулярное выражение (по моему скромному мнению), должно быть полностью прокомментировано, чтобы гарантировать, что следующее поколение разработчиков может поддержать его.

4
ответ дан 3 December 2019 в 00:44
поделиться

Я не уверен, почему существует такая застенчивость против regex.

Да, они могут стать грязными и неясными, точно как любая другая часть кода кто-то может записать, но они имеют преимущество перед кодом: они представляют набор строк, каждому интересно официально указанным способом (по крайней мере, Вашим языком, если существуют расширения). Понимание, какой набор строк принят частью кода, потребует "инженерного анализа" кода.

Несомненно, Вы могли discurage использование regex, как был уже сделан с рекурсией и goto's, но это будет justifed мне, только если существует хорошая альтернатива.

Я предпочел бы, поддерживают одну строку regex код, чем замысловатые функции ручной работы, который пытается получить ряд строк.

При использовании инструмента, чтобы понять regex (или записать новый) я думаю, что оно прекрасно подходит! Если бы кто-то записал это с инструментом, то кто-то еще мог бы понять это с инструментом! На самом деле, если бы Вы волнуетесь по поводу этого, я видел бы инструменты как RegexBuddy Ваша лучшая страховка, что код не будет неудобен в сопровождении только из-за regex's

4
ответ дан 3 December 2019 в 00:44
поделиться

Регулярные выражения являются только одним из многих инструментов, доступных Вам. Я обычно не соглашаюсь с часто процитированной кавычкой Zawinski, как ни с какой технологией или техникой, существует и хорошие и плохие способы применить их.

Лично, я вижу вещи как RegexBuddy и свободный тренер Regex, прежде всего, как средства обучения. Существуют, конечно, времена, когда они могут быть полезными, чтобы отладить или понять существующий regexes, но вообще говоря, если Вы записали Вашему regex использование инструмента, затем будет очень трудным поддержать его.

Как программист Perl, я очень знаком и с хорошими и с плохими регулярными выражениями и использовал даже сложные в производственном коде успешно много лет. Вот несколько инструкций, которых мне нравится придерживаться, которые были собраны от различных мест:

  • Не используйте regex, когда строковое соответствие сделает. Я часто вижу код, где люди используют регулярные выражения для соответствия строке нечувствительно к регистру. Просто ниже - или верхний регистр строка и выполняют стандартное сравнение строк.
  • Не используйте regex, чтобы видеть, является ли строка одним из нескольких возможных значений. Это излишне трудно поддержать. Вместо этого поместите возможные значения в массив, хеш (независимо от того, что Ваш язык обеспечивает), и протестируйте строку против тех.
  • Тесты записи! Наличие ряда тестов, которые конкретно предназначаются для Вашего регулярного выражения, делает разработку значительно легче, особенно если это - неопределенно сложное. Плюс, несколько тестов могут часто отвечать на многие вопросы, которые программист обслуживания, вероятно, будет иметь о Вашем regex.
  • Создайте свой regex из меньших частей. Если Вы действительно нуждаетесь в большом сложном regex, создайте его из меньших, тестируемых разделов. Это не только делает разработку легче (поскольку можно разобраться в каждом меньшем разделе индивидуально), но это также делает код более читаемым, гибким и допускает полный комментарий.
  • Встройте свое регулярное выражение в специализированную подпрограмму/функцию/метод. Это делает это очень легким к тестам записи на regex (и только regex). это также делает код, в котором Ваш regex используется легче читать (приятно именованный вызов функции значительно менее страшен, чем блок случайной пунктуации!). Бросание огромных регулярных выражений в середину блока кода (где они не могут легко быть протестированы в изоляции) чрезвычайно распространено, и обычно очень легко избежать.
10
ответ дан 3 December 2019 в 00:44
поделиться

Инструменты тестирования Regex неоценимы. Я использую их все время. Мое задание даже не особенно regex тяжело, также - программа для руководства меня через нюансы, поскольку я создаю свою базу знаний, крайне важно.

1
ответ дан 3 December 2019 в 00:44
поделиться

Регулярные выражения являются большим инструментом для большого количества текста, решающего проблемы. Если у Вас есть кто-то в Вашей команде, которая пишет regexes, который остальная часть команды не понимает, почему бы не заставить их преподавать остальную часть Вас, как они работают? Вместо угрозы, Вы могли рассматривать это как возможность. Тем путем Вы не должны были бы чувствовать себя угрожаемыми неизвестным, и у Вас будет другой очень ценный инструмент в Вашем арсенале.

Комментарии Zawinski, хотя интересно бойкий, являются существенно дисплеем незнания и пишущий, что Регулярные выражения не являются всем кодированием, таким образом, я не волновался бы о тех кавычках. Никто никогда не получал весь аргумент в остроту так или иначе.

При случайной встрече с Регулярным выражением, которое было слишком сложным для понимания даже с комментариями, то, вероятно, regex не был хорошим решением для той конкретной проблемы, но это не означает, что у них есть быть бесполезное. Я был бы готов держать пари, что при преднамеренном предотвращении их будут места в кодовой базе, где у Вас есть много строк кода и сингл, простой, Regex сделал бы то же задание.

Regexbuddy является полезным ярлыком, чтобы удостовериться, что регулярные выражения, которые Вы пишете, делают то, что Вы ожидаете - он, конечно, делает жизнь легче, но это - вопрос использования их вообще, именно это кажется важным для меня о Вашем вопросе.

1
ответ дан 3 December 2019 в 00:44
поделиться

То, что необходимо делать, поднимало трубку другой devs с RB.

Не волнуйте по поводу того целого "2 probs" кавычка; кажется, что это, возможно, было уничтожением на Perl (отвеченный в 1997) не regex.

1
ответ дан 3 December 2019 в 00:44
поделиться

Как другие сказали, я думаю с помощью, или не использование такого инструмента является нейтральной проблемой. Главный: Если регулярное выражение является так сложным, что оно должно встроить комментарии, оно слишком сложно. Я никогда не комментирую свой regexps. Я приближаюсь к большим или сложным проблемам соответствия путем разламывания его на несколько шагов соответствия, любого с несколькими операторами соответствия (= ~), или путем создания regexp с sub regexps.

Сказав все это, я думаю, что любой достойный разработчик должен быть довольно опытным в записи регулярного выражения и чтении. Я использовал регулярные выражения в течение многих лет и никогда не встречался со временем, где я должен был записать или считать тот, который был ужасно сложен. Но умеренно размерный может быть самым изящным и кратким способом сделать проверку или соответствие, и regexps не должен быть уклонен от того, только потому, что неопытный разработчик не может читать его - лучше для обучения того разработчика.

1
ответ дан 3 December 2019 в 00:44
поделиться

Я предпочитаю не использовать regex инструменты. Если я не могу записать это вручную, то это означает, что вывод инструмента - что-то, что я не понимаю и таким образом не могу поддержать. Я очень провел бы время, читая на некоторой regex функции, чем изучая regex инструмент. Я не понимаю отношения многих программистов, от которых regexes являются черной магией, которая избежится/изолируется. Это - просто другой язык программирования, который будет изучен.

Совершенно возможно, что regex инструмент сохранил бы меня некоторое время, реализовав regex опции, которые я действительно знаю, но я сомневаюсь относительно этого... Я могу ввести довольно быстро, и если Вы понимаете синтаксис хорошо (использующий текстовый редактор, где regexes идиоматичны, действительно помогает - я использую gVim), большинство regexes действительно не является тем комплексом. Я думаю, что Вы почти всегда лучше обслуживаетесь путем изучения технологии лучше вместо того, чтобы изучить опору, если инструмент не что-то, где можно вставить простую информацию и вынуть много шаблонного кода.

0
ответ дан 3 December 2019 в 00:44
поделиться

Ну, это кажется, что средство исправления для этого - чтобы некоторый умный человек представил regex инструмент, который аннотирует себя, поскольку это соответствует. Это предположило бы, что использование инструмента не является так же проблемой как существует ли большой разрыв между тем, что понимает инструмент и что понимает программист.

Так, документация может помочь.

Это - реальный тривиальный пример, таблица как следующее (просто предложение)

Expression        Match     Reason
^                 Pos 0     Start of input
\s+               "      "  At least one space
(abs|floor|ceil)  ceil      One of "abs", "floor", or "ceil"
...

Я вижу проблему, все же. Вы, вероятно, хотите отговорить людей создавать более сложное регулярное выражение, чем они могут проанализировать. Я думаю, что стандарты могут обратиться, это, всегда требуя развернуло REs, и проверьте, что аннотация является надлежащей.

Однако, если они просто хотят отладить РЕ, удостовериться, что оно действует, поскольку они думают, что оно действует, затем это действительно очень не отличается от написания кода, которое необходимо отладить.

Это относительно.

0
ответ дан 3 December 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: