Если ПО написано на скриптовых языках, например, на Python/Ruby/Perl/JS и т.д., где проходит граница, что творение является скриптом, а не программой или утилитой?

Некоторые пользователи считают, что решает кол-во строк, условно если в ПО более 100 строк, то это уже не скрипт. Часть пользователей руководствуются наличием интерфейса у ПО, если подтянут GUI/TUI на замену CLI, то это уже не скрипт. Кто-то смотрит на компиляцию ПО: если проект написан на скриптовом языке, но собран, например, через Pyinstaller или Nuitka, то это уже не скрипт. А кто-то читает исходник и если трудно разобрать его логику/алгоритм, то это уже не скрипт, а программа.

Отбросим в некотором роде устаревшую, официальную матчасть и проголосуем за признаки отличия скрипта от программы на одном из самых популярных IT ресурсов в Рунете.

Комментарии (36)


  1. ainu
    28.07.2024 21:03
    +6

    Скрипт - сценарий, буквально. Он один. Он конвертирует, отправляет, сжимает.

    А программа - это, например, Word, Windows, сайт. Любой скрипт это программа. Но не любая программа сводится к сценарию.


  1. YegorP
    28.07.2024 21:03
    +1

    Очевидно же. Скрипт это программа в программе.


    1. dyadyaSerezha
      28.07.2024 21:03

      Такие называются подпрограммами.


      1. YegorP
        28.07.2024 21:03

        Подпрограмма это часть программы, а я говорю о программе в программе. То есть такая дочерняя программа, которая управляет своей же средой исполнения.


        1. dyadyaSerezha
          28.07.2024 21:03
          +1

          Типа как Control panel в Windows?


    1. ne555 Автор
      28.07.2024 21:03
      +1

      Совсем неочевидно.

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


    1. red_dragon
      28.07.2024 21:03

      То есть, всё, что не операционная система, есть скрипт?


  1. D4rQ
    28.07.2024 21:03
    +1

    Скрипт - это что-то вспомогательное. Например, проект калькулятора на js - это программа, а если эту программу встроить в какой-то более крупный проект, то она станет скриптом. В таком случае выходит, что один и тот же кусок кода может быть и скриптом, и программой


    1. drr8593
      28.07.2024 21:03
      +1

      эту программу встроить в какой-то более крупный проект, то она станет скриптом

      это называется библиотека, а не скрипт.


      1. PanDubls
        28.07.2024 21:03

        Мне кажется, или библиотека это чисто этимологически несколько программ, а никак не одна?


  1. aleks-th
    28.07.2024 21:03
    +3

    Собственно зачем заморачиваться, как ни назови ни лучше не хуже от этого не станет.

    Мне ближе определение выше, что скриптом обзываем вспомогательные программы, а самодостаточные программы обзываем программами )

    Но можно обозвать и все программами и хуже оно от этого работать не станет.


  1. SadOcean
    28.07.2024 21:03
    +1

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

    То есть у них абстрактный смысл разный.

    Скрипт - это сабсет, часть программы, работающая в рамках какой то среды интерпретатора.

    Скрипт может быть программой только потому, что у нас есть среды, делающие процесс приближенным к этому.

    С семантической точки зрения программа это ведь тоже набор команд


  1. Biga
    28.07.2024 21:03

    Скрипт - это то, что ты делаешь для себя, ну или для друзей, единомышленников. Даже если это очень красиво оформлено, а не просто слеплено на коленке.

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

    Конечно, возникает вопрос: если я выложил скрипт на гитхаб - становится ли он от этого программой? Ответ: если никто не понимает, зачем это нужно, то не становится.

    Очень спорное получилось определение, ну и ладно, не воспринимайте слишком серьёзно.

    А ведь есть ещё замечательное слово "утилита"...


  1. mc2
    28.07.2024 21:03
    +2

    IMHO разница между скриптом и программой сугубо в запуске интерпретатора: для программы он исполняется единожды, во время компиляции; для скриптов, каждый раз при вызове скрипта.


  1. olivera507224
    28.07.2024 21:03
    +5

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


    1. voidinvader
      28.07.2024 21:03

      А если во время исполнения скрипта понадобится доввести какое либо значение? Скажем, 'y' или 'n'? Станет ли он от этого программой или нет?


      1. olivera507224
        28.07.2024 21:03

        Для меня - да, станет. Маленькой, считывающей буквально одно нажатие клавиши, но станет.

        Но твоё определение мне нравится больше, чем моё.


  1. voidinvader
    28.07.2024 21:03
    +2

    Внесу и свои пять копеек.

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

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


    1. eyeDM
      28.07.2024 21:03
      +1

      Выходит, всякие консольные полезняшки типа ping, grep - это скрипты?


      1. voidinvader
        28.07.2024 21:03

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


      1. bogolt
        28.07.2024 21:03

        нет это программы, но они могут быть вызваны скриптом.

        Сам ping и grep программы. Однако когда вы делает

        `grep -r fuck src` это уже комана ( хотя взывает программу )

        а когда у вас

        `грепнуть процессы, если найден такой-то убить его и перезапустить`

        то это уже будет скрпит ( хоть он внутри использует штук 10 разных программ ).


  1. 19Zb84
    28.07.2024 21:03

    Все, что признается системой в рамках выполняемой работы - это программа, иначе это скрипт.


  1. Andrey7070
    28.07.2024 21:03

    Программа - пишется на языке программирования.

    Скрипт - пишется на "языке" командной оболочки ОС (bash, cmd.exe, и т.п.)


    1. 19Zb84
      28.07.2024 21:03

      Программа ведь может писаться и без языка, на перфокартах.


      1. SAPetrovich77
        28.07.2024 21:03

        Возможно я кого-то удивлю, но на перфокартах, программа тоже пишется на вполне конкретном языке.


        1. 19Zb84
          28.07.2024 21:03

          А как язык называется ? И где посмотреть можно ? Я не смог найти название и упоминание языка.


          https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D1%84%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D0%B0

          При работе с перфокартами в текстовом режиме каждая колонка обозначает один символ; таким образом, одна перфокарта представляет строку из 80 символов. Допускаются лишь некоторые комбинации пробивок. Наиболее просто кодируются цифры — одной пробивкой в позиции, обозначенной данной цифрой. Буквы и другие символы кодируются несколькими пробивками в одной колонке. Отсутствие пробивок в колонке означает пробел (в отличие от перфоленты, где отсутствие пробивок означает пустой символ, NUL). В системе IBM/360 были определены комбинации пробивок для всех 256 значений байта (например, пустой символ NUL обозначался комбинацией 12-0-1-8-9), так что фактически в текстовом режиме можно было записывать и любые двоичные данные.

          Для упрощения работы с текстовыми данными, часто на верхнем крае перфокарты также проставлялись те же символы в обычном, понятным человеку, виде.


    1. Feromagnits
      28.07.2024 21:03

      А если вся программа написана в таком стиле:

      import os
      os.startfile("script.bat")

      В вашем случае называться тогда как будет "скрипт-программа"?


  1. sergey-gornostaev
    28.07.2024 21:03
    +2

    Нет никакой границы. Скрипт - это класс программ по типу среды исполнения. Утилита - это класс программ по функциональному назначению.

    Стандарт ISO/IEC/IEEE 24765:2010 даёт следующее определение термину программу: "Комбинация компьютерных инструкций и данных, позволяющая аппаратному обеспечению вычислительной системы выполнять вычисления или функции управления".

    Стандарт ISO/IEC 2382-1:1993 даёт следующее определение термину программу: "Синтаксическая единица, которая соответствует правилам определённого языка программирования, состоящая из определений и операторов или инструкций, необходимых для определённой функции, задачи или решения проблемы."

    Как видим, скрипты тоже попадают в оба определения.


  1. pda0
    28.07.2024 21:03

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


  1. a-tk
    28.07.2024 21:03

    Из точки А в точку Б выехала машина. Если с ней ничего интересного больше не происходит, то скрипт. Если происходит - то программа.


  1. deafcafe
    28.07.2024 21:03

    Скрипт человекочитаемый, можно открыть и поправить в текстовом редакторе; большинство программ можно редактировать только в hex-редакторе, иначе она перестанет работать.


  1. evtomax
    28.07.2024 21:03
    +1

    Компьютерная программа - любая последовательность действий, написанная на специальном языке, которую может выполнить компьютер. То есть любой скрипт, даже из одной строчки - это компьютерная программа. Всегда думал, что всё очевидно, и разногласий по этому вопросу нет, но опрос показывает другие результаты...


  1. SAPetrovich77
    28.07.2024 21:03

    Ну как бы да, любой скрипт это тоже программа.

    Но вот пожалуй не каждая программа это скрипт.

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


  1. phaggi
    28.07.2024 21:03

    Скрипт - линейная последовательность команд, без функций и классов, в одном файле или модуле (без импортов кода из других самописных файлов/модулей), не требующая вмешательства пользователя при исполнении, не зацикленная (грубо говоря, без while True), содержащая все необходимые параметры для работы (ссылки на внешние ресурсы, например, на файл с данными), не принимающая параметров и не возвращающая специальных итогов (сохранить итог в файл можно).

    Если любой из указанных нюансов присутствует - это не скрипт, а полноценная программа.

    Пример: открыть файл с данными, перебрать там строки, обработать каждую, сформировать результат, сохранить его, все закрыть и завершить работу.


  1. onets
    28.07.2024 21:03

    Ууу, как же бесили мамкины бизнесмены на фриласнерских биржах - напиши СКРИПТ, чтоб работало как одноклассники за 1000 рублей


  1. bioGavs
    28.07.2024 21:03

    Если код пишется с намерением что он будет использоваться другой программой это скрипт.

    Например python интерпретатор и любой код написанный для него.