Как вы используете язык сценариев (PHP, Python и т. Д.) Для повышения производительности? - PullRequest
14 голосов
/ 09 апреля 2010

Я разработчик Delphi на платформе Windows, недавно прочитал учебник по PHP на W3CSchools, это выглядит интересно.

Мы все знаем, что языки сценариев очень хороши в разработке веб-сайтов, но я также хочу использовать их для повышения своей производительности или быстрого выполнения некоторых утомительных задач, может быть, быстрой и грязной обработки строк / файлов?

Что вы обычно делаете с языками сценариев помимо разработки программного обеспечения? И нам нужен отзывчивый, достойный IDE / редактор, чтобы повысить производительность при написании сценариев для этой цели?

Ответы [ 10 ]

17 голосов
/ 09 апреля 2010

Я расскажу вам, как я улучшил свою производительность с помощью Python для Windows. Я просто пытаюсь написать все на Python - каждое нужное мне приложение, если я не знаю, что оно не масштабируется, и мне понадобятся более эффективные инструменты (в этом случае я лично использую C ++, но вы также можете использовать C # / Delphi).

Оказывается, что для большинства (> 95%) инструментов и утилит необходим Python (в сочетании с PyQt для GUI) достаточно хорош, и для меня это гораздо более производительный язык, чем C ++. Ключ в том, чтобы перестать думать о Python как о «языке сценариев». Это не менее язык программирования, чем C ++ / Java / C # / Delphi / что скажете вы. У него есть свои сильные стороны, и у него есть свои ограничения. Если вы знакомы с ними и знаете, как выбрать подходящий инструмент для работы, у вас все будет хорошо.

Вам не нужно никаких специальных IDE. Я использую Scite для всех моих кодов Python (кстати, в Windows и Linux), и он прекрасно работает.

11 голосов
/ 09 апреля 2010
  1. Вы, безусловно, можете помочь себе, автоматизируя множество задач с помощью языков сценариев.

    Обратите внимание: некоторые из этих языков "сценариев", таких как Perl, на самом деле являются очень мощными языками разработки программного обеспечения общего назначения, которые просто помечены как "сценарии" , потому что их первоначальная ниша и / или происхождение были скриптинг (и потому, что с ними легко делать простые скрипты).

    Лично я использую Perl для быстрой автоматизации сценариев (использование 2%), веб-разработки (использование 8%) и разработки финансового программного обеспечения предприятия (оставшиеся 90%).

  2. Что касается примеров того, что вы можете сделать - ответ «почти все» и во многом зависит от того, какова ваша типичная работа, требующая автоматизации. Я использую Perl для вещей, связанных с файловой системой (организация / очистка / переименование файлов), для манипулирования содержимым файлов (происхождение Perl и один из самых сильных наборов, все еще занимающихся обработкой текста) и различных отчетов («R» в Perl означает «Отчетность»), и для различного перехвата данных, который слишком сложен для быстрого выполнения в Excel.

    Обратите внимание, что Perl имеет чрезвычайно широкий набор библиотек (называемых модулями), доступных через CPAN, которые можно использовать для выполнения практически всего, кроме поджаривания хлеба или путешествий во времени; а также многочисленные рамки для серьезной разработки программного обеспечения.

    Чтобы отразить ответ Python, Perl также можно использовать для графического интерфейса в Windows - я не буду здесь останавливаться, так как SO проводит всесторонние обсуждения по этой теме, если вы решите пойти с Perl.

  3. В качестве очень конкретного примера , иллюстрирующего вышеизложенное, последние 2 проекта, которые я сделал для себя, были системами индексации, которые индексировали имена файлов, метаданные и содержимое и предоставляли способ поиска по индекс. Первым был локальный поиск по коду (версия устройства Google Code Search для бедных), а второй - система управления сбором файлов для моих mp3-файлов (я использую все существующие программы, чтобы позволить мне случайный поиск по регулярным выражениям по тегам ключевые слова). Оба использовали SQLite back-end и Perl для индексации и front-end. Вторым конкретным примером был двухстрочный подсчет подсчета количества голосов за определенный тег в StackOverflow:)

  4. Вы получите большую пользу от хорошей IDE или просто программного редактора для ЛЮБОГО программирования, включая сценарии. В Windows вы можете использовать Notepad ++ или UltraEdit или многое другое - ТАК где-то должен быть список. Любой редактор с «intellisense» (интеллектуальное завершение работы) получает преимущество.

3 голосов
/ 09 апреля 2010

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

  • Центральными данными является ассоциативный массив (изменяемая хеш-таблица). Реализация Lua чрезвычайно эффективна и хорошо работает как хэш, таблица, набор и список.

  • Обработка строк находится в отличном месте: почти такая же мощная, как регулярные выражения, и намного более читаемая. Экранирующий символ шаблона % отличается от экранирующей строки char \. «Шаблон с захватом» Lua проще, чем регулярные выражения POSIX, и на намного проще, чем регулярные выражения Perl, и удовлетворяет 90% моих потребностей в сканировании строк. Прекрасный пример инженерного проектирования.

Эти две функции охватывают основные данные. Кроме того,

  • Таблица является единственным изменяемым типом, что упрощает анализ программ.

  • Lua имеет первоклассные вложенные функции, поэтому вся мощь функциональной парадигмы доступна, если она вам нужна - но если вы ее не используете, вы не платите.

  • Lua имеет встроенную итерационную конструкцию, встроенную в язык, которая подходит для перебора коллекций, файловых систем, как вы ее называете. Намного лучше, чем иметь некоторый «объект итератора» с «методами итератора». Итерация достаточно важна, поэтому мне очень полезно иметь выделенную ей языковую конструкцию (общий цикл for).

  • Язык достаточно прост, чтобы после скромного изучения я понял все его.

  • Существует молниеносная интерактивная реализация.

  • При необходимости я могу импортировать любую существующую библиотеку C в Lua.

  • Стандартные библиотеки Lua удовлетворяют большинству моих потребностей, оставаясь достаточно маленькими, чтобы быть понятными. Если мне нужна специализированная библиотека (XML, HTTP, синтаксический анализ), она, как правило, уже доступна и достаточно проста для понимания.

  • Опять при необходимости я могу легко расширять свои собственные типы данных.

Я обнаружил, что использую Lua для всех задач, которые я выполнял с sh, awk, sed, perl и той толпой. Я также обнаружил, что в 90% случаев я могу написать простую, полезную программу на Lua гораздо быстрее, чем простую, полезную программу на Си. (Остальные 10% - это когда я в основном совершаю системные вызовы.)

Хотя я потерял счет количества языков, которые я хорошо знаю (написано более 10 000 строк кода), в наши дни почти все мои потребности удовлетворяются всего за 3:

  • Lua для почти всех легких программ, включая быструю и грязную обработку строк / файлов, о которой вы упомянули

  • C для обучения (потому что я должен преподавать C)

  • Haskell для создания прототипов (и иногда реализации) сложных или больших систем, особенно компиляторов

Я также использовал сочетание Lua и C для некоторых довольно важных приложений, таких как nbibtex и noweb 3 .

2 голосов
/ 09 апреля 2010

Таким образом, вы, вероятно, уже получили картину, вы будете выполнять определенные задачи намного быстрее, используя язык сценариев (и в отношении слова scripting : я просто больше не считаю это уничижительным, скорее наоборот). Черт, у меня есть друзья (случайно программисты только на Delphi), которые все еще используют Delphi для выполнения однократных задач, поиска в текстовых файлах и т. Д., Тратят часы на написание классов и форм Delphi, многократно компилируют, вместо того, чтобы писать пару минут Однострочники Python / Ruby / Perl.

Но я думаю, что есть еще более важная вещь (при правильном выборе): вы изучите новые концепции программирования . Вы будете расти как программист. Вы перерастете ту старую точку зрения «у вас есть молоток, поэтому все выглядит как гвоздь». Вы снова научитесь дышать.

Кстати, когда я говорю «предоставлен правильный выбор», я настоятельно советую выбирать правильно разработанный язык с мощными концепциями функционального программирования. Так что я бы на самом деле пропустил PHP и выбрал бы Python или Ruby.

2 голосов
/ 09 апреля 2010

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

Но, отвечая на ваши вопросы, я считаю, что наиболее полезной в моей работе для повышения производительности является множество сценариев shell / perl / python.

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

Некоторые ключевые слова подсказки для вас: сценарии оболочки, регулярные выражения, форматирование вывода.

Спасибо

1 голос
/ 09 апреля 2010

Я использую скриптовые языки, чтобы выполнять большую часть предварительной / последующей обработки данных. Маленький или большой.

Почти все скриптовые языки имеют превосходную / быструю обработку файлов, текста, графики и т. Д. И очень очень легко без масс кода котельной плиты и этапа компиляции.

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

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

1 голос
/ 09 апреля 2010

Я TextMate пользователь и активно разрабатываю расширения («связки») для него для собственного использования в php, ruby ​​и javascript.

1 голос
/ 09 апреля 2010

Как пользователь windows / linux 50/50 на работе, python особенно полезен, поскольку почти все, что я пишу, является кроссплатформенным, а также потому, что на самом деле окна не имеют очень полезного языка оболочки. С pyqt я могу создать впечатляющий графический интерфейс всего за несколько часов. Я уверен, что в ближайшие несколько лет Python захватит весь мир.

1 голос
/ 09 апреля 2010

Итак, я часто использую Python для создания прототипов решений для различных задач программирования (хорошо получить алгоритм прямо перед реализацией со всеми наворотами на каком-либо другом языке программирования), и я использовал сценарии оболочки BASH для автоматизировать различные задачи (например, запуск программы с использованием различных наборов входных данных, сохранение результатов, конвейерная передача в grep и другие утилиты и т. д.).

Когда дело доходит до скуки, я бы настоятельно рекомендовал BASH. Вы можете получить его на Windows, установив Cygwin. Например, я часто делаю что-то вроде следующего для моих различных курсов:

for i in {1..10} ; do
    ./process_data input-$i.txt | tee result-$i.transcript
done

Вам не нужен хороший редактор ... любой текстовый редактор подойдет просто отлично. Тем не менее, если вы ищете хорошего редактора Python, Eclipse с PyDev довольно хорош. Лично я просто использую Xcode в качестве редактора кода общего назначения для всего ... хотя он на самом деле ничего не приносит в таблицу для сценариев оболочки Python или BASH ... конечно, у вас нет Xcode в Windows. Однако вы можете использовать Блокнот ++, Блокнот или Wordpad.

0 голосов
/ 17 декабря 2016

Я использую стандартные библиотеки каждого языка сценариев для быстрого выполнения задач с использованием хорошо документированного API. Например, вот инструменты, которые я использую на самых популярных языках сценариев:

  • PHP

    • XSLT - генерация отчета XML
    • imagemagick - оптимизация изображения
    • curl - интеграционное тестирование
    • intl - интернационализация
  • Python

    • черепаха - ностальгия
    • plistlib - конфигурация OSX
    • sqlite - быстрое создание прототипов базы данных
    • sched - быстрое планирование задач
    • difflib - diffing
    • шутил - архивация файлов
  • Рубин

    • Rake - автоматизация резервного копирования и журналов
    • Ожидайте - автоматизация запросов аутентификации
    • аббревиатура - автозаполнение
    • RSS - создание каналов
    • fileutils - сравнение файлов
    • gdbm - сериализация состояния программы
    • win32ole - MSXML / IE автоматизация
    • did_you_mean - Как избежать опечаток
  • Perl

    • Env - исправление проблем с путями
    • Memoize - алгоритмы тестирования
    • TAP - организация тестов
    • Params :: Check - проверка API

Ссылки

...