как определить язык программирования по коду
Как определить язык программирования по коду
Как узнать язык программы, на которой она была написана?
Для того, чтобы написать компьютерную программу, необходимо использовать определенный язык программирования. И после того, как исходный код скомпилируется, можно получить исполняемый файл.
Сложность определения языка написания программы состоит в том, в каком виде вам попала данное программное приложение, поскольку это может быть, как и исходный код, так и исполняемый файл.
В первом случае, определить язык очень легко, так как достаточно лишь взглянуть на код, чтобы узнать его конструкцию. И не смотря на то, что языков программирования существует на сегодня большое количество, широко известными стали лишь некоторые из них.
Если вы увидели, что исходный код программы содержит такие операторы, как begin и end, тогда это язык программирования под названием Delphi, который ведет свое начало еще от Паскаля. И если вы посмотрите исходник, написанный на языке Делфи, вы больше не спутаете его с другим.
Распознать язык программы, которая написана в С++, также не представляет особого труда, поскольку у него есть свои характерные черты. Если впервые взглянуть на данный программный код, то перед вашим взором откроется большое количество фигурных скобок. Вместе с тем, для языка С++ характерно наличие комментариев, которые указываются после двойного слеша (//), тем более, что каждый комментарий имеет следующую конструкцию: /* текст комментария */.
Такой язык программирования, как C#, появился совсем недавно и активно используется для создания программных приложений компанией Microsoft. Он достаточно удобен, а также имеет некие черты с языком С++.
Распознать Visual Basic достаточно просто, благодаря своеобразному синтаксису. Аналогично распознается и Ассемблер. Данный язык имеет не столь много уровней, как другие языки программирования. Создавать программы с его помощью достаточно сложно, но полученное в результате приложение имеет небольшой размер и функционирует очень быстро.
Если же вам нужно узнать язык уже откомпилированной программы, тогда придется прибегнуть к утилите Protection ID, поскольку большинство из программных приложений закриптованы от взлома. Для этого вначале распакуйте скачанный архив, а затем распакуйте сам установочный файл при помощи специальной утилиты.
Чтобы узнать, на каком языке программирования написана программа, воспользуйтесь утилитой PEID, скачать которую вы можете в интернете. Установите ее и запустите. Откройте интересующий вас исполнимый файл. И результат не заставит себя ждать, так как в нижнем окошке появится интересующая вас информация о языке программирования.
Как узнать на чём написана программа и на чём она сделана
Для того, чтобы написать компьютерную программу, необходимо использовать определенный язык программирования. И после того, как исходный код скомпилируется, можно получить исполняемый файл.
Сложность определения языка написания программы состоит в том, в каком виде вам попала данное программное приложение, поскольку это может быть, как и исходный код, так и исполняемый файл.
В первом случае, определить язык очень легко, так как достаточно лишь взглянуть на код, чтобы узнать его конструкцию. И не смотря на то, что языков программирования существует на сегодня большое количество, широко известными стали лишь некоторые из них.
Если вы увидели, что исходный код программы содержит такие операторы, как begin и end, тогда это язык программирования под названием Delphi, который ведет свое начало еще от Паскаля. И если вы посмотрите исходник, написанный на языке Делфи, вы больше не спутаете его с другим.
Распознать язык программы, которая написана в С++, также не представляет особого труда, поскольку у него есть свои характерные черты. Если впервые взглянуть на данный программный код, то перед вашим взором откроется большое количество фигурных скобок. Вместе с тем, для языка С++ характерно наличие комментариев, которые указываются после двойного слеша (//), тем более, что каждый комментарий имеет следующую конструкцию: /* текст комментария */.
Такой язык программирования, как C#, появился совсем недавно и активно используется для создания программных приложений компанией Microsoft. Он достаточно удобен, а также имеет некие черты с языком С++.
Распознать Visual Basic достаточно просто, благодаря своеобразному синтаксису. Аналогично распознается и Ассемблер. Данный язык имеет не столь много уровней, как другие языки программирования. Создавать программы с его помощью достаточно сложно, но полученное в результате приложение имеет небольшой размер и функционирует очень быстро.
Если же вам нужно узнать язык уже откомпилированной программы, тогда придется прибегнуть к утилите Protection ID, поскольку большинство из программных приложений закриптованы от взлома. Для этого вначале распакуйте скачанный архив, а затем распакуйте сам установочный файл при помощи специальной утилиты.
Чтобы узнать, на каком языке программирования написана программа, воспользуйтесь утилитой PEID, скачать которую вы можете в интернете. Установите ее и запустите. Откройте интересующий вас исполнимый файл. И результат не заставит себя ждать, так как в нижнем окошке появится интересующая вас информация о языке программирования.
Как определить язык программирования по коду
Реализовать алгоритм, который сможет определить язык программирования небольшого фрагмента исходного кода (сниппета), подаваемого ему на вход. Задача должна решаться с помощью машинного обучения.
Используемые инструменты и библиотеки
Одна из самых сложных частей данной работы – создание обучающей выборки. Необходимо было найти большое количество размеченных исходных кодов (исходный код + метка языка програмирования, на котором этот код написан). В качестве сайтов для парсинга рассматривались сервисы, предоставляющие в свободном доступе короткие программные коды на разных языках программирования. Например, gist.github.com или ideone.com. Сайтом для парсинга был выбрал ideone.com по причине удобства парсинга, большего разнообразия и качества исходных кодов.
Главная страница сайта ideone.com представляет из себя текстовый редактор с возможностью написания кода и дальшейшего его выполнения. В данной задаче нас интересует не она, а страница с адресом ideone.com/recent. На ней отображаются последние исполненные на сайте сниппеты кода. На странице внизу присутствует блог пагинации, с помощью которого можно просматривать более старые сниппеты (так же навигацию можно осуществлять с помощью дописывания к адресу ideone.com/recent/ номер интересующей страницы). Каждый блок с исходным кодом помимо прочего содержит ссылку на страницу сниппета и полезные для нас строки: строку с языком кода и строку с результатом выполнения (компилируется, ошибка компиляции, успешно и т.д.). Перейдя по ссылке из блока мы попадаем на страницу исходного кода, на которой полностью отображается исходный код и ссылка на файл.
Парсер работает следующим образом:
Парсер в процессе своей работы посылает много запросов на сайт ideone.com, из-за чего часто возникают http-ошибки. Чтобы ошибки не прерывали процесс парсинга, написана функция-обёртка с обработчиком исключений, который при возникновении ошибки продолжает процесс парсинга.
С помощью вышеописанного алгоритма была собрана выборка размером 12923 объектов. Из-за нехватки времени и того факта, что скрипт-парсер работает медленно, создать выборку большего объёма не представилось возможным. Так же из недостатков собранной выборки стоит отметить дисбаланс классов. Например, исходных кодов на языке «C» в десятки раз больше, чем на языке «Python».
Следующий этап работы – обработка выборки. Идеальным алгоритмом обработки сырых данных в данной работе будет алгоритм, который сможет удалить из исходных кодов все «малозначащие» элементы. Забегая вперёд стоит отметить, что алгоритм машинного обучения, который мы будем использовать далее, будет оперировать численными представлениями слов наших исходных кодов. Соответственно, классификация будет основана на различии комбинаций этих численных представлений. Чтобы качественно выполнить эту задачу, алгоритму необходимо подготовить данные таким образом, чтобы тексты кодов на разных языках программирования имели разные особенности, т.е. нужно удалить всё общее, что имеют коды на разных языках программирования. Эти общие части я и называю в данном контексте «малозначащами» элементами (например, имена переменных и их значения или комментарии в тексте кода).
К сожалению, реализовать такой алгоритм не получится, т.к. найти общее правило обработки для разных языков программирования не представляется возможным.
Однако, небольшую обработку кодов сделать можно. А именно:
Построение модели и результаты
После обработки текстов можно приступить к построению модели. В этой работе я использую линейный классификатор (минимизация с помощью стохастического градиентного спуска), векторизацию данных с помощью TF-IDF и схему n-грамм (1, 4).
По результатам валидации, лучшая модель имеет следующие параметры: alpha – 0.0001, penalty – none, loss – hinge.
Как определить на чем написана программа?
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Я сказал там будет нужная информация.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Т.к. вы неавторизованы на сайте. Войти.
Т.к. тема является архивной.
Да, но обычно не напрямую, должны быть биндинги к библиотеке. Т.е. например, если из ненативной программы нужно работать с zip файлами, для использования zip.dll должен существовать биндинг к этой библиотеке на этом языке (класс на java, в питоне это модули и т.д.). Хотя, некоторые языки позволяют напрямую использовать сишные библиотеки.
Но в любом случае, например программа на VB, например, обязательно использует какие-то специальные библиотеки, зависимость от которых явно указывает что программа на VB, аналогично с другими языками. То есть, можно исследуя зависимости от библиотек, выяснить, написана ли программа на C или C++.
Является ли HTML языком программирования
В последнее время всё чаще и чаще различные интернет ресурсы устраивают холивары на тему: является ли HTML языком програмирования или нет. Как водится, аргументов в пользу обеих точек зрения приводят немалое количество, поэтому я решил поставить для себя точку в этом ненужном споре.
Определение языка программирования
Язы́к программи́рования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.
Язык программирования — множество заранее определенных, однообразных и понятных исполнителю (читай: интерпретатору/компилятору/компьютеру/программисту) инструкций, предназначенных для записи последовательно с целью их исполнения неким устройством, являющимся частью вычислительной машины. Также язык программирования должен обладать рядом особенностей: инструкций должно быть ограниченное число, и все их должны знать; инструкции должны выстраиваться определенным образом для получения определенных результатов, и все должны об этом знать; должны существовать правила написания инструкций и все должны их знать; каждая конструкция языка должна однозначно соотносить то что написано с тем, что требовалось обозначить.
Вот так громоздко и некрасиво получилось, зато без сложных слов. Мы вернемся к этому определению чуть позже.
Виды языков программирования
Часто употребляют также разделение на низкоуровневые и высокоуровневые языки. Эти виды отличаются «толщиной прослойки» между процессором и программистом. Говоря простыми словами — в низкоуровневых языках каждая инструкция представляет собой одну или небольшое число процессорных команд, а в высокоуровневом языке каждая инструкция это большой набор процессорных команд.
Императивный и декларативный подход
Все языки программирования делятся на две группы: декларативные и императивные.
Программа на императивном языке программирования с математической точки зрения представляет собой общее решение поставленной задачи, иными словами, ответ на вопрос «как делать?». Это последовательность команд, которые должен выполнить исполнитель.
Программа на декларативном языке программирования является сочетанием формализованной в рамках языка программирования задачей и всех необходимых для её решения теорем, проще говоря, ответ на вопрос «что делать?». Конкретную последовательность выполняемых действий выполняет компилятор, или чаще интерпретатор – программа, в реальном времени выполняющая код программы без его преобразования в машинный код.
Полнота по Тьюрингу
В теории вычислимости исполнитель (множество вычисляющих элементов) называется тьюринг-полным, если на нём можно реализовать любую вычислимую функцию. Другими словами, для каждой вычислимой функции существует вычисляющий её элемент (например, машина Тьюринга) или программа для исполнителя, а все функции, вычисляемые множеством вычислителей, являются вычислимыми функциями (возможно, при некотором кодировании входных и выходных данных).
Название пошло от Алана Тьюринга, который придумал абстрактный вычислитель — машину Тьюринга и дал определение множества функций, вычислимых посредством машин Тьюринга.
Другими словами язык является полным по Тьюрингу, если любая вычислимая функция, которая Вам нужна, может быть записана на этом языке и решена его исполнителем.
Не полные по Тьюрингу языки также существуют, но так как их создают в основном в академических целях, то они малоизвестны и широко не применяются.