Чи є сенс писати сценарії побудови на C ++?


15

Я використовую CMake для генерації своїх проектів IDE / makefiles, але мені все одно потрібно викликати спеціальні "скрипти", щоб маніпулювати моїми компільованими файлами або навіть генерувати код.

У попередніх проектах я використовував Python, і це було нормально, але зараз у мене виникають серйозні проблеми з управлінням багатьох залежностей у двох дуже великих проектах, над якими я працюю, тому хочу скрізь мінімізувати залежності.

Хтось запропонував мені використовувати C ++ для написання моїх скриптів побудови, а не додавати залежність мови саме для цього. Теми проектів уже використовують C ++, тому я можу побачити кілька переваг:

  • щоб побудувати весь проект, потрібен був би лише компілятор C ++ і CMake, нічого іншого (всі інші залежності - C або C ++);
  • Безпека типу C ++ (при використанні сучасних C ++) полегшує все, щоб стати "правильним";
  • це також мова, яку я краще знаю, тому мені більше зручно з нею, навіть якщо мені вдається написати хороший код Python;
  • потенційний приріст швидкості виконання (але я не думаю, що це дійсно буде відчутним);

Однак я думаю, що можуть бути деякі недоліки, і я не впевнений у реальному впливі, оскільки ще не намагався:

  • може бути довше писати код (це сказав, що я не впевнений, тому що я достатньо ефективний в C ++, щоб написати щось, що працює швидко, тому, можливо, для цієї системи писати не так довго) (час компіляції не повинен ' не бути проблемою для цього випадку);
  • Я повинен припустити, що всі текстові файли, які я читатиму як вхідні дані, знаходяться в UTF-8, я не впевнений, що це можна легко перевірити під час виконання в C ++, і мова не перевірить це для вас;
  • бібліотеками на C ++ важче керувати, ніж мовами сценаріїв;

Мені не вистачає досвіду та проникливості, тому, можливо, мені не вистачає переваг та недоліків. Отже, питання: чи є сенс використовувати для цього C ++? чи є у вас досвід для звітування і чи бачите ви переваги та недоліки, які можуть бути важливими?


1
Залежно від перекладача єдиної мови для складання не здається занадто поганим, тим більше, що це Python - дуже портативний, широко поширений в Linux і легко доступний в Windows. Якщо вам потрібні додаткові бібліотеки Python, ви можете використовувати virtualenv, і він не додасть нічого, крім одного файлу Python (який ви могли б доставити), підключення до Інтернету та трохи сантехніки, щоб налаштувати virtualenv, встановити їх у та запустити фактичну будувати сценарії в цьому середовищі. Ви можете перейти до додаткового сценарію у вашій збірці та підключення до Інтернету як вимоги.

Ви можете здогадатися про кодування тексту з досить хорошою надійністю.
DeadMG

@DeadMG Так, але робити це вручну, якщо дуже багато роботи (якщо ви хочете добре здогадатися і не обмежувати себе "це аscii чи unicode, і якщо це unicode, скільки біт і який порядок байт?") І додавання іншої залежності (якщо для цього взагалі є вільна і вільно стояча бібліотека) перемагає точку падіння на C ++, щоб зупинитися залежно від Python.

@delnan Так, але це все ще на іншій мові для встановлення. З вашого опису, будь-яка додаткова залежність не здасться "надто поганою", але я вважаю, що це вже багато для управління, тому, можливо, це може допомогти обмежити мови, які також використовуються. Я також використовую вбудовану мову сценаріїв (реалізовану в C ++ безпосередньо в проекті), javascript / HTML / CSS, XML та інші формати, про які вже багато пам’ятати.
Клаїм

2
що ви будете використовувати для створення сценарію збірки c ++?
jk.

Відповіді:


24

Просто використовуйте Python.

Я розвиваюсь в C ++ і роблю сценарії побудови в Python, і мені буде боляче робити сценарії збирання в C ++:

  • Python робить тривіальним маніпулювання словниками, списками, вкладеними словниками словників списків тощо (Наприклад, один із моїх сценаріїв використовує багаторівневу ієрархію всіх моїх інструментів, версій інструментів та шляхів версій інструментів. ) C ++ може робити те ж саме з шаблонами та спеціальними класами, але це набагато більш багатослівно (що перекладає на більше рядків коду, що, як правило, означає нижчу продуктивність).
  • Python надає бібліотеки та підпрограми високого рівня, такі як його обробка XML та JSON, підпроцес та os.walk . Знову ж таки, C ++ може це зробити, але це набагато більше роботи, щоб знайти бібліотеки, вивчити їх API, правильно зібрати дзвінки (які часто нижчого рівня) тощо.
  • Сценарії побудови - це діяльність, яка не додає вартості (запозичити термін у складі). Краще використовувати мову на високому рівні, щоб якнайшвидше їх виконати, щоб повернутися до роботи, яка приносить користь вашим користувачам.
  • На мій досвід, сценарії побудови, як правило, зростають непередбачуваними способами. Навіть якщо завдання здається для C ++ спочатку простим, воно може поспішати складніше. Коли з'являється нова вимога, часто набагато простіше братися за обробку в сценарії Python, ніж це робити в C ++ (що може зажадати пошуку чи читання нових API бібліотеки тощо).

Щодо переваг, які ви перераховуєте для C ++:

  • Додавання єдиної залежності (Python) не повинно суттєво ускладнити збірку. Наприклад, це вже стандартно для більшості установок Linux. Завдяки бібліотекам "включених батарей" Python, можливо, навіть простіше керувати, ніж бібліотеками C ++, від яких залежатимуть ваші сценарії побудови.
  • Безпека типу, яку надає C ++, є найбільш корисною для великих проектів, а не малих сценаріїв.
  • Python дуже добре доповнює C ++ (високий рівень проти нижчого рівня, динамічно набирається проти статично набраного тексту тощо) і навіть може дуже добре інтегруватися з C ++ (завдяки SWIG та Boost.Python), якщо згодом ви хочете це зробити, тож це варто вчитися програмісту на C ++.
  • Як ви вже говорили, швидкість виконання повинна бути непередаваною.

Ми зробили це (python build) після року боротьби з cmake за проектом хрестової долоні. Врешті-решт, ми навіть не турбувались, намагаючись зробити перевірку залежності (найскладніша частина збірки). Оскільки для автоматизованих побудов ви хочете відновити все, що завгодно, і в C ++ існує так багато складних залежностей
Мартін Беккет

1

Я вважаю, що це конкретне питання. Я стверджую, що немає правильної відповіді, чи є сенс використовувати C ++ для створення скриптів, єдиний спосіб це зрозуміти - це спробувати це на практиці.

Особисто я бачив, що Python перевершує C ++ через кращу виразність мови та легше (звичайно, особиста думка) стандартних інструментів бібліотеки для управління завданням маніпулювати бінарними файлами та генерувати код. Звичайно, можуть бути доступні складні бібліотеки, розроблені для цього завдання, але якщо ні, то я особисто б точно ставку на те, що Python є "найчастіше правильною" відповіддю - загалом.


1

Не пишіть сценарії самостійно, ви дублюєте зусилля та переосмислюєте колеса.

Використовуйте щось на зразок SCONS або навіть Maven 3, який підтримує системи побудови C ++ .

Хороша система побудови, незалежно від мови, не повинна вимагати власної логіки у вигляді скриптів для створення функціонуючого виконавчого артефакту.

Якщо вам доведеться писати сценарії для системи збирання, щоб налаштувати її, це не є хорошою системою збирання. Написання плагіна для системи збирання - це вже інша історія, але все-таки це має бути особливо специфічним для середовища / обладнання та має бути тим, до чого рідко вдаються.


1
Як я пояснив, я вже використовую cmake, але мені все ще потрібні спеціальні сценарії. Я говорю про ці власні сценарії, а не сам процес збирання.
Клаїм

1
Я люблю Мейвен - сценарій, необхідний для створення програми "Світ пекла", довший за програму!
Quant_dev

@quant_dev, я пам’ятаю, коли я вперше заглянув у користування Maven на їхній власній веб-сторінці, вони рекомендують почати роботу з тим, хто вже знає Maven, оскільки його важко налаштувати в перший раз. Це була перша ознака того, що я взагалі нічого не хочу з цим робити!
Брейді

Мені сподобалось SCons, він трохи повільний, але дуже простий у використанні.
Quant_dev

1
@JarrodRoberson я використовував "сценарії" занадто вільно. Я маю на увазі його конфігураційні файли. Я не впевнений, що якщо декларативність робить Maven автоматично більш портативним та легшим у обслуговуванні. Однак це робить його менш гнучким, що може викликати біль у великих проектах.
Quant_dev

0

Щоб зосередитись на питанні:

Чи є сенс писати сценарії побудови на C ++?

Відповідь - простий ні .

В даний час прийнята відповідь фокусується на python і перераховує цілу купу дійсних проблем, але я хотів би додати мовну незалежну причину:

Ви дійсно не хочете нічого писати на будь-якій компільованій мові, якщо можете допомогти:

  • Вам знадобиться сценарій для завантаження сценарію!
  • Або вам потрібно буде перевірити в складеному скрипті джерело управління (і тримати його в синхронізації з зареєстрованим у джерелах!)
  • Сценарій раптом також має вбудовану конфігурацію для доданого сценарію. (Це потрібно підтримувати!)

Крім того, перейдіть з іншою відповіддю:

Ймовірно, ви також не хочете використовувати "сировинну" мову сценаріїв для створення сценаріїв побудови (я розумію, що тонкощі C ++ оброблялися б CMake).

Що ви, мабуть, повинні зробити, це вибрати один з Build . Системи . з . там . і подивіться, чи підходить ваш рахунок Wrt. сценарій / розширюваність / гра-приємно-з-CMake / кросплатформованість.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.