Переносимый язык сценариев для администратора с несколькими серверами?

Обратите внимание: переносимый, как в portableapps.com, а не в традиционном понимании языка, который может использоваться на нескольких архитектурах или операционных системах. Тот, кто придумал такое использование слова «переносной», должен быть уничтожен. :)

Я администратор баз данных и системный администратор, в основном работаю с Windows-машинами, на которых работает SQL Server. Я ищу язык программирования / сценариев для Windows, который не требует доступа администратора или установщика и не требует процесса установки, кроме развертывания его в папку. Я намерен создать язык для автоматизации, который можно было бы стандартизировать.

До этого момента я использовал комбинацию командных файлов и оболочки Unix, используя sh.exe из UnxUtils но это далеко не идеальное решение.

Я оценил несколько вариантов, у всех есть хотя бы один серьезный недостаток. Я сильно предпочитаю что-то с открытым исходным кодом или двойную лицензию, но меня больше интересует поиск подходящего инструмента, чем что-либо еще. Меня не интересует что-либо, что полагается на Cygwin или Java, но на данный момент я бы согласился с тем, что требует .NET.

Требования:

  • Управляемый размер (от 1 до 100 файлов, установлено менее 30 МБ)
  • Работает на Windows XP и Server (2003+)
  • Нет установщика (exe, msi)
  • Нет необходимости полагаться на установку JVM или Cygwin
  • Работает с внешними каналами, процессами и файлами
  • Поддержка соединений MS SQL Server или ODBC

Бонусные баллы:

  • Открытый источник
  • FFI для вызова функций в собственных библиотеках DLL
  • Поддержка графического интерфейса (собственный или gtk, wx, fltk и т. Д.)
  • Поддержка Linux, AIX и / или OS X
  • Динамический, объектно-ориентированный и / или функциональный, интерпретируемый или компилированный в байт-код; интерактивное развитие
  • Возможность упаковки или компиляции скриптов в исполняемые файлы

Пока что я пробовал:

  • Ruby: 148 МБ на диске, 23000 файлов
  • Portable Python: 54 МБ на диске, 2800 файлов
  • Strawberry Perl: 123 МБ на диске, 3600 файлов
  • REBOL: Отлично, кроме закрытого исходного кода и отсутствия MSSQL или ODBC в бесплатной версии
  • Squeak Smalltalk: Отлично, за исключением плохой поддержки скриптов.

person Aaron    schedule 25.01.2010    source источник
comment
Кто-нибудь из тех, что вы пробовали, работал? Кстати, я большой поклонник Python.   -  person Hamish Grubijan    schedule 26.01.2010
comment
Может быть, это вопрос о сбое сервера?   -  person Tom Duckering    schedule 26.01.2010
comment
@Hamish: Приношу извинения за то, что не прояснил, но перечисленные языки были теми, которые я пробовал, но по той или иной причине не смог. Я мог бы уточнить больше, но Ruby, Python и Perl не подходили из-за относительной сложности установки, количества файлов и размера установки. В других ответах предлагались Iron Ruby и Iron Python, варианты, которые я на самом деле не рассматривал - я больше работал с Unix и оценивал дистрибутивы Windows для основных Ruby и Python. Python был первым языком, которым я был восхищен еще в 99-м году, и мне до сих пор нравится работать на нем!   -  person Aaron    schedule 26.01.2010
comment
Я знаю, что откладывать выбор лучшего ответа - плохой тон, но мне нужно немного времени, чтобы сравнить лидеров: tclkit, некоторую форму lua, Iron Python или Iron Ruby. Завтра обещаю!   -  person Aaron    schedule 26.01.2010
comment
Я понимаю требования к размеру, но почему вас волнует количество файлов в движке ??   -  person Perica Zivkovic    schedule 26.01.2010
comment
@Perica: Я понимаю, что это может показаться немного странным, но установка с тысячами файлов в конечном итоге доставляет мне проблемы. Что-то инкапсулированное в меньшее количество файлов устанавливается быстро, легко обновляется и обычно не требует обширных изменений реестра или среды. Я администратор баз данных и Unix; Я не хочу наступать на пятки администраторам Windows и их установкам, иметь дело с глобальным набором переменных ENV или возиться со сложными путями. Может показаться глупым, но возможность работать только с копией \\ unc \ tclkit.exe c: \ dba &. \ Tclkit abc.tcl привлекает меня в среде, в которой я работаю.   -  person Aaron    schedule 26.01.2010
comment
@Aaron: Я понимаю вашу озабоченность скоростью установки. Это действительно момент, который я также пытаюсь улучшить в следующей версии Portable Python. Пользователи смогут выбирать пакеты для установки вместо установки всего дистрибутива. Однако изменения реестра и среды совершенно не нужны, если вы используете портативное приложение. Портативные приложения по определению не изменяют ОС хоста. Простое обновление также не должно быть проблемой, поскольку вы можете установить новую версию одновременно. Это дает вам возможность сначала протестировать все ваши приложения, прежде чем удалять старую версию движка.   -  person Perica Zivkovic    schedule 28.01.2010


Ответы (7)


Tclkit - это однофайловая автономная система Tcl / Tk. У меня версия для Mac составляет около 3,8 мегабайт. Вы можете получить версию практически для любой современной ОС. Я ношу с собой флешку с двоичными файлами Mac, Windows и Linux, поэтому я могу запускать свои скрипты на любой платформе. Установка не требуется, просто скопируйте один файл куда хотите.

Единственное, чего не хватает в исходной спецификации, - это поддержка MS SQL Server / ODBC из коробки. Я знаю, что люди используют для этого tcl, но я думаю, вам придется добавить дополнительную библиотеку или что-то в этом роде. Дополнительную информацию см. В вики-записи Tcl'ers на MS SQL Server.

person Bryan Oakley    schedule 25.01.2010
comment
У некоторых людей есть ментальный блок, который мешает им понимать Tcl. Я не уверен, почему, потому что это действительно один из наиболее читаемых языков. Есть только 12 правил, которые управляют всем языком, так что это не совсем сложный язык. - person Bryan Oakley; 26.01.2010
comment
Tcl отлично подходит для этого. Возможно, вы захотите добавить несколько библиотек в среду разработки, если вы работаете с Windows (tcom для OLE, twapi для хорошего доступа к Windows API и одна из привязок ODBC для доступа к SQL Server). WITS - хороший пример того, что можно сделать с этим: wits.magicsplat.com - person schlenk; 26.01.2010
comment
Tcl сложен, потому что основан на текстовой подстановке. Профессора Беркли и Стэнфорд должны знать лучше, чем создавать языки программирования, модели оценки которых основаны на подстановке. (Дон Кнут, позвоните в ваш офис.) Я признаю, что интерфейс Tcl для C является самым простым и легким, что я когда-либо видел. Но это возлагает на программиста огромную ношу по тому, чтобы все нативные типы представлялись в виде строк. - person Norman Ramsey; 26.01.2010
comment
@Norman: Ну, lisp / scheme такая же, только строительные блоки - это списки символов, а не списки текста. Но вся любовь к lisp, а к tcl - вся ненависть. - person slebetman; 26.01.2010
comment
@slebetman: Ключевым моментом в cons-ячейках является то, что вы можете составлять их для создания более сложных структур данных. Строки атомарны (а в Tcl неизменны). Это не было бы таким уж большим делом, если бы Tcl не был встроен, а отображение сложных структур данных C на строки Tcl - огромная головная боль. (Я делал это много раз в начале 1990-х. Затем я открыл для себя Lua и навсегда оставил Tcl.) - person Norman Ramsey; 26.01.2010
comment
@Norman: Тогда не используйте строки напрямую, это оооочень 90-е ;-) В наши дни большая часть кода tcl имеет дело со списками (и dicts). Тогда нет реальной разницы между структурами данных tcl и lisp. Единственное отличие состоит в том, что самый низкий уровень lisp - это сама cons-ячейка, которая похожа на слово tcl в списках. Но в tcl: dict - это просто специально отформатированный список, список - это просто специально отформатированная строка, а строка - это просто последовательность символов. Меня утешает такое объединение данных с нуля. - person slebetman; 26.01.2010
comment
Правда, Tcl - не самое лучшее средство для сложных структур данных. Это не значит, что это вообще плохо - существует огромный мир приложений, для которых идеально подходит tcl. Я потратил 15 лет на тестирование этой теории и за это время создал множество сложных и успешных tcl-приложений. В языке есть бородавки, а на каком - нет? Я искренне верю, что большинство людей, которые отвергают Tcl (и я не предполагаю, что это кто-то сам по себе), просто не могут согласиться с тем, что его простота - это одна из его самых сильных сторон. - person Bryan Oakley; 26.01.2010
comment
У меня не было времени, чтобы лучше рассмотреть все ответы сегодня, но я, скорее всего, выберу этот ответ. Я действительно использовал tclkit, но несколько лет назад на Windows Mobile. Честно говоря, tcl или tclkit мне даже в голову не приходило, когда я начинал искать язык, который хотел бы стандартизировать - я искал переносимые дистрибутивы Python, Perl и Ruby с привязками Tk, но не Tcl. Я думаю, что tcl подошел бы для моих нужд и соответствовал моей привязанности к Lisp и Rebol. Я в основном занимаюсь автоматизацией своих задач, требуя большого количества операций с файлами и каналами. - person Aaron; 26.01.2010

Я настоятельно рекомендую вам попробовать Lua. Что касается ваших требований:

  • Крошечный след (56 исходных файлов, скомпилировано менее 150 КБ)
  • Работает везде (использует только ANSI C)
  • Установщик не требуется; вы компилируете из исходного кода (есть также пакет с включенными батареями, который я не исследовал
  • Не требует JVM и работает с любым компилятором ANSI C, поэтому вы можете компилировать с помощью Visual Studio, а не Cygwin.
  • Работает с внешними процессами и файлами, но только в той степени, в которой поддерживается ANSI C. Если предоставляется POSIX popen, то он также поддерживается.

И ваши бонусные баллы:

  • Открытый исходный код (лицензия MIT)
  • FFI to C блестяще задуман и выполнен не так просто, как Tcl, но загружается более мощно. Намного лучшая интеграция с C, чем с Python или Ruby.
  • Поддержка графического интерфейса смешанная, но есть хорошие привязки для виджетов wx. Поддержка QT была когда-то, но я не знаю, поддерживалась ли она.
  • Linux поддерживается
  • Language/compiler features:
    • Dynamic
    • Функциональный
    • Объекты на основе прототипов и наследование с помощью метаметодов (вы захотите увидеть примеры в книге ниже
    • Самый быстрый компилятор байт-кода на Западе
    • Интерактивный цикл чтения-оценки-печати; загружать новый код динамически
  • Возможность упаковывать скрипты в исполняемые файлы; либо используйте srlua Луиса де Фигейредо, либо я могу отправить вы 120-строчный сценарий Lua, который преобразует исходный код Lua в файл .c, который вы связываете со своим приложением и интерпретатором для создания исполняемого файла.

Дополнительные бонусные баллы:

person Norman Ramsey    schedule 26.01.2010
comment
Отличное предложение. Также стоит обратить внимание на Idle, особенно для Windows. Это надлежащий надмножество Lua 5.1 (каждая синтаксически правильная программа Lua 5.1 также является синтаксически правильной и семантически идентичной Idle-программой), но она поставляется предварительно скомпилированной и предварительно связанной с некоторыми специфичными для Windows или трудно компилируемыми Lua. расширения. Все функции и преимущества, перечисленные здесь, в равной степени применимы к Idle, с двумя оговорками: размер сообщества и отсутствие Роберто Иерусалимши. - person Jörg W Mittag; 26.01.2010
comment
@Norman и @ Joerg- что вы думаете о murgaLua? Похоже, что это похоже на то, но трудно понять, направляется ли он в мусорное ведро или нет ... Не Lua в целом, это не похоже, что оно никуда не денется. У меня есть некоторый опыт работы с NewtonScript, и Lua мне во многом его напоминает. Я посмотрю на библиотеки и дистрибутивы, которые вы порекомендовали! - person Aaron; 26.01.2010
comment
@Aaron: Похоже, вещь Мурги бездействует. Кажется, что реальное преимущество у FLTK, но он не поспевает за FLTK. А для XML у меня были действительно хорошие результаты с lxp и lxp.lom от PUC-Rio. Что касается графического интерфейса, у меня возникнет соблазн попробовать IUP также из PUC-Rio, просто потому, что он изначально был разработан для работы с Lua. (Я использовал привязки wxLua и Lua для QT, и ни один опыт не оставил у меня энтузиазма.) - person Norman Ramsey; 26.01.2010

Есть несколько вариантов Python, которые могут удовлетворить ваши требования:

  • Первый - это IronPython, который можно запускать без установщика и который прекрасно работает с API .net. Это дает вам доступ ко всему с помощью .net API или библиотеки типов COM, для которой вы могли бы создать PIA. Я использовал at в качестве механизма сценариев именно по этой причине - он мог быть помещен в каталог внутри системы и не требовал явной установки ..

    Вам потребуется соответствующая среда выполнения .Net установлен, но .Net 2.0 устанавливается вместе с SQL Server 2005. Доступ к SQL Server можно получить через ADO.net, а создание графического интерфейса пользователя с помощью Winforms довольно просто.

  • Второй - Portable Python, который предназначен для работы с USB-ключа. Хотя я вижу, что вы уже пробовали это, вы могли бы уточнить, в чем были недостатки. Если что-то недоступно в базовой установке, вы всегда можете подумать о создании собственной версии с ее включением. TkInter (по крайней мере) входит в комплект.

    Вы также можете использовать Py2EXE для создания автономных приложений Python с удаленным лишним мусором. Это даст вам около 10 файлов (в зависимости от количества DLL), которые можно запустить из одного каталога, возможно, на USB-накопителе.

Запуск локальной установки Python в ОС Unix-oid довольно прост, так что это почти не проблема. Кроме того, python входит в состав большинства дистрибутивов Linux и доступен в качестве «дополнительного программного обеспечения» от большинства, если не всех поставщиков trad unix. IIRC он также связан с MacOS.

person ConcernedOfTunbridgeWells    schedule 25.01.2010
comment
+1 за разъяснение недостатков Portable Python. Если это размер, вы можете разделить его и удалить ненужные пакеты. Если вам нужны дополнительные модули, уточните, и я посмотрю, что я могу сделать для следующего выпуска ;-) - person Perica Zivkovic; 26.01.2010
comment
Поставляется ли он с модулем ODBC в стандартной сборке? Ничего не увидел в документации на сайте. - person ConcernedOfTunbridgeWells; 26.01.2010

Для tcl, помимо Tclkit, freewrap - еще один небольшой переносимый автономный интерпретатор для tcl.

Просто переименуйте исполняемый файл freewrap во что-нибудь еще, чтобы преобразовать его в автономный интерпретатор. Переименование его обратно в freewrap преобразует его в оболочку скрипта.

Кроме того, бесплатные приложения содержат интерпретатор tcl. В крайних случаях вы можете попробовать открыть приложение в виде zip-файла и отредактировать / заменить код tcl, содержащийся в нем (просто не забудьте сначала сделать копию). Это спасало меня несколько раз, когда я нахожусь на клиентском сайте без инструментов разработки, но мне нужно что-то устранить. Я просто делаю копию одного из моих развернутых приложений и готово - мгновенную среду разработки!

person slebetman    schedule 26.01.2010

Взглянем на исчерпывающий список портативного программного обеспечения в Википедии. В Википедии снова есть компилятор Tiny C здесь и его собственная домашняя страница здесь.

Подводя итог, цитируя список функций Википедии:

  • Маленький - может компилировать и выполнять код C везде, например, на аварийных дисках (около 100 КБ для исполняемого файла x86 TCC, включая препроцессор C, компилятор C, ассемблер и компоновщик).
  • Быстро - tcc генерирует оптимизированный код x86. Нет накладных расходов на байтовый код. Он компилирует, собирает и связывает примерно в 9 раз быстрее, чем GCC.
  • Любую динамическую библиотеку C можно использовать напрямую. TCC стремится к полному соответствию ISOC99. TCC, конечно, может компилироваться сам.
  • Включает дополнительную память и проверку привязки. Связанный проверенный код можно свободно смешивать со стандартным кодом.
  • Скомпилируйте и запустите исходный код C. Не требуется связывание или сборка. Включены полный препроцессор C и GNU-подобный ассемблер.
  • Поддерживается сценарий C: просто добавьте '#! / Usr / local / bin / tcc -run' в первую строку исходного кода C и выполните его прямо из командной строки.
  • С libtcc вы можете использовать TCC как бэкэнд для генерации динамического кода.
  • Мало зависимостей. Он включает собственный рукописный лексер и реализован с использованием парсера рекурсивного спуска. Таким образом, для построения TCC требуется несколько других библиотек.
  • Его лицензия LGPL позволяет кому угодно использовать, изменять и / или распространять программное обеспечение, и его можно использовать для разработки программного обеспечения с открытым исходным кодом или проприетарного программного обеспечения.

Надеюсь, это поможет и будет полезно, С уважением, Том.

person t0mm13b    schedule 26.01.2010

Помимо предложения Lua, существует также Idle. По сути, это надмножество Lua 5.1 с языком (и библиотеками) и реализацией, основанными на Lua. Первоначально он был создан как более полное решение для написания сценариев для Windows: поскольку Lua в первую очередь предназначен для встраивания, он имеет довольно небольшую стандартную библиотеку, и обычно ожидается, что приложение для встраивания предоставляет богатую библиотеку для Lua.

Это имеет смысл для встроенного языка, потому что, в конце концов, между Adobe Lightroom, Nginx и World of Warcraft не так много общих функций, поэтому просто нет ничего, что можно было бы добавить в стандарт библиотека. Но для языка сценариев ОС более общего назначения нужна библиотека немного большего размера. Таким образом, Idle объединяет пару сторонних библиотек (которые иногда трудно заставить работать в Windows) в Lua в своей стандартной библиотеке.

Некоторые из вещей, которые стандартная библиотека Idle добавляет поверх Lua, - это тесная интеграция с Win32, поддержка SQLite3, поддержка сети, генератор парсера PEG и поддержка архивов.

Кроме того, Idle поддерживает встраивание кода Perl и C в ваши Idle-программы.

person Jörg W Mittag    schedule 26.01.2010

Каждая современная версия Windows поставляется с предустановленными как VBScript, так и JScript. Они не соответствуют всем вашим функциям (на ум приходит компиляция в исполняемый файл), но они, безусловно, имеют неоспоримое преимущество с размером установки: их трудно превзойти 0.

person Jörg W Mittag    schedule 26.01.2010