stringtranslate.com

Язык программирования общего назначения

В компьютерном программном обеспечении язык программирования общего назначения ( GPL ) — это язык программирования для создания программного обеспечения в самых разных областях применения . И наоборот, предметно-ориентированный язык программирования (DSL) используется в определенной области. Например, Python — это лицензия GPL, а SQL — это DSL для запросов к реляционным базам данных .

История

Ранние языки программирования, как и компьютерное оборудование, были разработаны для научных вычислений (численных расчетов) или коммерческой обработки данных. Научные языки, такие как Fortran и Algol , поддерживают вычисления с плавающей запятой и многомерные массивы, а бизнес-языки, такие как COBOL , поддерживают форматы файлов с фиксированными полями и записи данных . Гораздо менее широко использовались специализированные языки, такие как IPL-V и LISP , для обработки символьных списков ; COMIT для манипуляций со строками; APT для станков с числовым программным управлением . Системное программирование , требующее манипулирования указателями, обычно выполнялось на языке ассемблера , хотя JOVIAL использовался для некоторых военных приложений. [1]

IBM System /360 , анонсированная в 1964 году, была разработана как унифицированная аппаратная архитектура, поддерживающая как научные, так и коммерческие приложения, и IBM разработала для нее PL/I как единый язык общего назначения, поддерживающий научное, коммерческое и системное программирование. . Действительно, подмножество PL/I использовалось в качестве стандартного языка системного программирования для операционной системы Multics .

Со времени PL/I различие между научными и коммерческими языками программирования уменьшилось: большинство языков поддерживают основные функции, необходимые обоим, а большая часть обработки файлов специального формата делегируется специализированным системам управления базами данных .

Начиная с 1960-х годов также были разработаны многие специализированные языки: GPSS и Simula для моделирования дискретных событий; MAD , BASIC , Logo и Pascal для обучения программированию; C для системного программирования; JOSS и APL\360 для интерактивного программирования. [1]

GPL против DSL

Различие между языками программирования общего назначения и языками программирования предметной области не всегда четкое. [2] Язык программирования может быть создан для конкретной задачи, но использоваться за пределами этой исходной области и, таким образом, считаться языком программирования общего назначения. Например, COBOL , Fortran и Lisp были созданы как DSL (для бизнес-обработки, числовых вычислений и символьной обработки), но со временем перешли под лицензию GPL. [ сомнительно ] И наоборот, язык может быть разработан для общего использования, но применяться на практике только в конкретной области. [3] Язык программирования, который хорошо подходит для решения задачи, будь то язык общего назначения или DSL, должен минимизировать требуемый уровень детализации, оставаясь при этом достаточно выразительным в предметной области. [4] Как следует из названия, язык общего назначения является «общим» в том смысле, что он не может обеспечить поддержку нотации, специфичной для предметной области, в то время как DSL могут быть разработаны для различных проблемных областей для решения этой проблемы. [4] Языки общего назначения предпочтительнее DSL, когда предметная область приложения недостаточно понятна, чтобы гарантировать использование собственного языка. В этом случае вместо него может использоваться язык общего назначения с соответствующей библиотекой типов данных и функций для предметной области. [5] Хотя DSL обычно меньше GPL, поскольку они предлагают меньший диапазон обозначений абстракций, некоторые DSL фактически содержат целую GPL в качестве подъязыка. В этих случаях DSL способны предложить выразительную силу для конкретной предметной области наряду с выразительной силой GPL. [6]

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

Преимущества и недостатки

Языки программирования общего назначения чаще используются программистами. Согласно исследованию, C , Python и Java были наиболее часто используемыми языками программирования в 2021 году. [7]  Одним из аргументов в пользу использования языков программирования общего назначения по сравнению с предметно-ориентированными языками является то, что больше людей будут знакомы с этими языками. , преодоление необходимости изучать новый язык.

Кроме того, для многих задач (например, статистического анализа, машинного обучения и т. д.) существуют тщательно протестированные и оптимизированные библиотеки. Теоретически наличие этих библиотек должно устранить разрыв между языками общего назначения и предметно-ориентированными языками. [4]

Эмпирическое исследование 2010 года было направлено на измерение эффективности решения проблем и производительности между GPL и DSL, предлагая пользователям задачи, которые были знакомы с GPL ( C# ) и незнакомы с DSL ( XAML ). В конечном итоге пользователи этого конкретного предметно-ориентированного языка показали лучшие результаты на 15%, хотя они были лучше знакомы с GPL, что требует дальнейших исследований. [4]

Примеры

С

Предшественник C , B , был разработан в основном для конкретной цели: системного программирования . [8] Напротив, C нашел применение в различных вычислительных областях, таких как операционные системы , драйверы устройств , прикладное программное обеспечение и встроенные системы .

C подходит для использования в самых разных областях из-за своей универсальности. Он обеспечивает экономичность выражения, управление потоками, структуры данных и богатый набор операторов, но не ограничивает пользователей использовать его в каком-либо одном контексте. [9] В результате, хотя его создатели впервые использовали его для переписывания ядра операционной системы Unix , [10] он был легко адаптирован для использования в разработке приложений, встроенных системах (например, программировании микропроцессоров), видеоиграх ( например, Doom ) и так далее. Сегодня C остается одним из самых популярных и широко используемых языков программирования. [11]

С++

Задуманный как расширение C, C++ представил объектно-ориентированные функции, а также другие удобства, такие как ссылки, перегрузка операторов и аргументы по умолчанию. Как и C, универсальность C++ позволяла использовать его в широком диапазоне областей. Хотя основной областью применения C++ является системное программирование (из-за способности C++ предоставлять доступ к низкоуровневой архитектуре), [12] он широко использовался для создания настольных приложений, видеоигр, баз данных, финансовых систем и многого другого. . [13] Крупнейшие компании-разработчики программного обеспечения и финансовые компании, такие как Microsoft , Apple , Bloomberg и Morgan Stanley , по-прежнему широко используют C++ в своих внутренних и внешних приложениях. [13]

Питон

Python был задуман как язык, в котором особое внимание уделяется читаемости и расширяемости кода. [14] [15] Первое позволяло инженерам, не связанным с программным обеспечением, легко учиться и писать компьютерные программы, а второе позволяло специалистам в предметной области легко создавать библиотеки, подходящие для их собственных случаев использования. По этим причинам Python использовался в широком спектре областей.

Ниже приведены некоторые области использования Python: [16]

Список

Ниже приведены некоторые языки программирования общего назначения:

Рекомендации

  1. ^ аб Джин Э. Саммет, «Языки программирования: история и будущее», Communications of ACM 15 : 7: 601-610 (июль 1972 г.) doi : 10.1145/361454.361485
  2. ^ «Языки конкретной предметной области: аннотированная библиография». CiteSeerX 10.1.1.33.8207 .  {{cite journal}}: Требуется цитировать журнал |journal=( помощь )
  3. ^ Берри, Джерард (май 2006 г.). «Программирование в реальном времени: языки специального или общего назначения». HAL Открытая наука .
  4. ^ abcd Косар, Томаз (май 2010 г.). «Сравнение языков общего назначения и языков, специфичных для предметной области: эмпирическое исследование» (PDF) . Информатика и информационные системы . 7 (2): 247–264. дои : 10.2298/CSIS1002247K.
  5. ^ ван Дёрсен, Ари (декабрь 1998 г.). «Маленькие языки: мало ухода?». Журнал обслуживания программного обеспечения: исследования и практика . 10 (2): 75–92. doi :10.1002/(SICI)1096-908X(199803/04)10:2<75::AID-SMR168>3.0.CO;2-5.
  6. ^ ван Дёрсен, Ари; Клинт, Пол; Виссер, Йост (июнь 2000 г.). «Предметно-ориентированные языки: аннотированная библиография». Уведомления ACM SIGPLAN . 35 (6): 26–36. дои : 10.1145/352029.352035 . ISSN  0362-1340. S2CID  1049872.
  7. ^ «Самые популярные языки программирования – 1965/2021 – Новое обновление – Статистика и данные» . Статистикаanddata.org . Проверено 3 июня 2022 г.
  8. ^ Томпсон, К. (1972-01-07). «Титульный лист технического меморандума» (PDF) . Телефонные лаборатории Белла . Архивировано (PDF) из оригинала 11 июня 2015 г. Проверено 3 июня 2022 г.
  9. ^ В., Керниган, Брайан (2016). Язык программирования Си. Прентис Холл. ISBN 978-0-13-110370-2. ОСЛК  1004153413.{{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  10. ^ Ричи, Деннис (апрель 1993 г.). «Развитие языка Си» (PDF) . Уведомления ACM SIGPLAN . 28 (3): 201–208. дои : 10.1145/155360.155580.
  11. ^ "Индекс ТИОБЕ" . ТИОБЕ . Проверено 3 июня 2022 г.
  12. ^ Страуструп, Бьярн (1995). Язык программирования C++ . Аддисон-Уэсли.
  13. ^ ab «Приложения C++». www.stroustrup.com . Проверено 3 июня 2022 г.
  14. ^ "Артима - Создание Python" . www.artima.com . Проверено 3 июня 2022 г.
  15. ^ «Общие часто задаваемые вопросы по Python — документация по Python 3.10.4» . docs.python.org . Проверено 3 июня 2022 г.
  16. ^ «Приложения для Python». Python.org . Проверено 3 июня 2022 г.
  17. ^ «Популярность языков программирования в 12 086 исследовательских статьях – количественная оценка здоровья» . Проверено 3 июня 2022 г.
  18. ^ Педрегоса, Фабиан (2011). «Scikit-learn: машинное обучение на Python» (PDF) . Журнал исследований машинного обучения . 12 : 28 :25–28:30. arXiv : 1201.0490 . Бибкод : 2011JMLR...12.2825P.

Смотрите также