Программирование Викиданных/Языки программирования
Исследуем свойства языков программирования на основе базы знаний международного проекта Викиданные. С помощью SPARQL-запросов, вычисляемых на объектах типа "язык программирования" в Викиданных, решен ряд задач. Получен перечень всех языков программирования под пермиссивными лицензиями. Построена пузырьковая диаграмма по количеству форматов файлов исходного кода. Построены карты, отображающие месторасположение учебных заведений и компаний, в которых учились или работали люди, связанные с созданием языков программирования. Получен список всех объектно-ориентированных языков программирования. Получен вывод об исчерпывающей полноте Викиданных относительно объектно-ориентированных языков программирования.
Факультет компьютерных технологий |
Программирование Викиданных Главы: Математики: Для авторов: |
Постановка задачи[править]
Исследуем языки программирования, а именно информацию о них в Русской Википедии, Английской Википедии и Викиданных.
Задачи:
- Построить упорядоченный список языков программирования по числу интервик.
- Построить список языков по числу посещений статей в Русской Википедии.
- Построить направленный ациклический граф зависимостей языков программирования друг от друга (или найти циклы в зависимостях, если такой граф нельзя построить). См. свойство "influenced by" в Java.
Экземпляры объекта "Язык программирования"[править]
- Объекты: язык программирования (Q9143).
- Свойства: instance of (P31).
Построим список всех языков.
#added 2016-10
#List of `instances of` "programming language"
SELECT ?lang ?langLabel
WHERE
{
?lang wdt:P31 wd:Q9143. # instances of programming language
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
}
SPARQL-запрос, 732 записи (2017), 1422 записи (2020).
👍 Наиболее полными и проработанными языками программирования на Викиданных на 2017 год являются: Java, Python, C. На 2020 год наиболее проработанными на Викиданных языками программирования являются: C++ (26 свойств), Java (26 свойств), JavaScript (25 свойств), R (25 свойств).
👎 Почти пустыми и малоинформативными языками на 2017 год оказались: CLIPS, Dylan, Go!.
Недостаток полученного списка в том, что ряд объектов получился безымянным на Викиданных (No label defined). Попробуем получить список языков, у которых поле "label" будет непустым.
#List of `instances of` "programming language" only with a label.
SELECT ?item ?item_label
WHERE
{
?item wdt:P31 wd:Q9143 # instances of programming language
; rdfs:label ?item_label .
FILTER (LANG(?item_label) = "ru") .
}
SPARQL-запрос, 709 записей (2017), 1422 записи (2020).
Если в 2017 году число языков уменьшилось на два десятка записей, то на 2020 год все языки в списке имеют заполненное поле label.
Демонстрация работы с операциями над множествами в SPARQL[править]
В данном разделе представлен пример операции со множествами. Задание следующее: вывести все языки программирования, являющиеся открытым программным обеспечением (free software) и испытавшие на себе влияние, хотя бы одного из следующих языков программирования: Си, Python, Java, при этом разработанные какой-либо из фирм, кроме: Sun Microsystems, Космический центр имени Линдона Джонсона.
В запросе формируются два множества: множество языков программирования, испытавших на себе влияние Си, Python, Java и множество языков программирования, не являющихся открытым программным обеспечением (free software), после чего из первого множество вычитается второе.
Используются:
- Объект: programming language (Q9143).
- Свойство: influenced by (P737).
- Свойство: developer (P178).
SELECT DISTINCT ?item ?item_label
WHERE
{
?item wdt:P31 wd:Q9143 # instances of programming language
; rdfs:label ?item_label .
FILTER (LANG(?item_label) = "ru") .
{
{ ?item wdt:P737 wd:Q15777 } UNION # influenced by C
{ ?item wdt:P737 wd:Q28865 } UNION # influenced by Python
{ ?item wdt:P737 wd:Q251 } UNION # influenced by Java
{ ?item wdt:P31 wd:Q341 }
} MINUS
{
{ ?item wdt:P178 wd:Q14647 } UNION # developer Sun Microsystems
{ ?item wdt:P178 wd:Q208371 } # developer Космический центр имени Линдона Джонсона
}
}
SPARQL-запрос, 115 записей (2017), 122 записи (2020).
Пермиссивные лицензии[править]
Выведем все языки программирования находящиеся под пермиссивными лицензиями (практически не ограничивают свободу действий пользователей ПО и разработчиков).
Используются:
- Объект: programming language (Q9143).
- Свойство: license (P275).
SELECT DISTINCT ?item ?item_label
WHERE
{
?item wdt:P31 wd:Q9143 # instances of programming language
; rdfs:label ?item_label .
FILTER (LANG(?item_label) = "ru") .
{ ?item wdt:P275 wd:Q308915 } UNION # license Mozzila Public
{ ?item wdt:P275 wd:Q334661 } UNION # license MIT
{ ?item wdt:P275 wd:Q191307 } UNION # license BSD
{ ?item wdt:P275 wd:Q6905323 } # license CC
}
SPARQL-запрос, 37 записей (2017), 82 записи (2020).
В этот список из 37 "свободных" языков попали, например CoffeeScript, Go, Haml.
Рассмотрим соотношение языков с пермиссивной лицензией и языков с проприетарной или закрытыми лицензиями.
#The script calculates the percentage of programming languages with a free license in relation to languages with a closed license
SELECT (COUNT(?not_free)* 100 / (COUNT(?free)) as ?total) WHERE
{
{
SELECT ?free WHERE
{
?free wdt:P31 wd:Q9143 # instances of programming language
; rdfs:label ?item_label .
FILTER (LANG(?item_label) = "ru") .
{ ?free wdt:P275 wd:Q308915 } UNION # license Mozzila Public
{ ?free wdt:P275 wd:Q334661 } UNION # license MIT
{ ?free wdt:P275 wd:Q191307 } UNION # license BSD
{ ?free wdt:P275 wd:Q6905323 } # license CC
}
}
UNION
{
SELECT ?not_free WHERE
{
?not_free wdt:P31 wd:Q9143 # instances of programming language
; rdfs:label ?lang_label .
FILTER (LANG(?lang_label) = "ru") .
{ ?not_free wdt:P275 wd:Q6165015 } UNION # Java Research License
{ ?not_free wdt:P275 wd:Q218616 } UNION # proprietary software
{ ?not_free wdt:P275 wd:Q3238057 } UNION # proprietary license
{ ?not_free wdt:P275 wd:Q31202214 } UNION # proprietary software license
{ ?not_free wdt:P275 wd:Q979794 } # Aladdin Free Public License
}
}
}
SPARQL-запрос, на 2020 год отношение языков программирования с закрытой лицензией к "свободным" языкам равно примерно 20%.
Количество форматов файлов исходного кода[править]
В зависимости от языка программирования, файлы с исходным кодом программ могут иметь разные расширения. Построим пузырьковую диаграмму по количеству допустимых форматов файлов исходного кода.
Используются:
- Объект: programming language (Q9143).
- Свойство: instance of (P31).
- Свойство: file extension (P1195).
#added 2017-04
#defaultView:BubbleChart
SELECT ?lang_name (count(*) as ?count)
WHERE
{
?lang wdt:P31 wd:Q9143. # instance of programming language
?lang wdt:P1195 ?count. # file extension
?lang rdfs:label ?lang_name.
filter (lang(?lang_name) = "ru").
}
GROUP BY ?lang_name
ORDER BY DESC(?count)
Из рисунка видно, что самыми исторически богатыми на форматы и расширения файлов являются такие языки программирования, как: C++ (10 форматов), Geometric Description Language (GDL) (8), Racket (7). Например, файлы с программой на языке Racket могут иметь расширения rkt, rktl, rktd, scrbl, plt, ss или scm.
К 2020 году C++ и Geometric Description Language (GDL) остались на месте (10 и 8 форматов-расширений). За три года подтянулись и вошли в первую восьмёрку также такие языки, как Raku (9 форматов), REXX и Scratch (по 6 форматов), Java и Wolfram Language (по 5 форматов).
Где живут разработчики и располагаются организации, связанные с созданием языков программирования[править]
Отобразим на карте страны, в которых живут люди и располагаются организации, связанные с созданием языков программирования. Заметим, что разработчиком языка может выступать как организация, так и отдельный человек. Для определения месторасположения (свойство: coordinate location) организации будем использовать координаты её штаб-квартиры (свойство: headquarters location), для человека - координаты места его рождения (свойство: place of birth).
Используются:
- Объект: programming language (Q9143).
- Свойство: instance of (P31).
- Свойство: developer (P178).
- Свойство: headquarters location (P159).
- Свойство: place of birth (P19).
- Свойство: coordinate location (P625).
#defaultView:Map
SELECT ?item_label ?developer_label ?location_label ?coord
WHERE
{
?item wdt:P31 wd:Q9143 # instances of programming language
; rdfs:label ?item_label.
FILTER (LANG(?item_label) = "ru").
?item wdt:P178 ?developer. # developer
?developer rdfs:label ?developer_label.
FILTER (LANG(?developer_label) = "ru").
{ ?developer wdt:P159 ?location. } UNION # headquarters location
{ ?developer wdt:P19 ?location } # place of birth
?location rdfs:label ?location_label.
FILTER (LANG(?location_label) = "ru").
?location wdt:P625 ?coord. # coordinate location
SERVICE wikibase:label {
bd:serviceParam wikibase:language "ru".
}
}
Построим также пузырьковую диаграмму, чтобы выявить наиболее благоприятные страны для появления людей, способных к разработке языков программирования и размещению в этих странах штаб-квартир. Видим на рисунке, что наиболее благоприятными странами оказались США (159 человек и штаб квартир) и Великобритания (15). В России было разработано только два языка программирования: РЕФАЛ и Встроенный язык программирования 1С:Предприятие.
На 2020 год число штаб-квартир в США равно 241, в Великобритании — 24, в Франции — 18, а в России — 5.
Университеты, в которых учились будущие разработчики языков программирования[править]
Отобразим на карте учебные заведения, в которых учились студенты, впоследствии разработавшие языки программирования.
Используются:
- Объект: programming language (Q9143).
- Свойство: instance of (P31).
- Свойство: developer (P178).
- Свойство: educated at (P69).
- Свойство: coordinate location (P625).
#defaultView:Map
SELECT ?item_label ?developer_label ?educational_institution_label ?coord
WHERE
{
?item wdt:P31 wd:Q9143 # instances of programming language
; rdfs:label ?item_label.
FILTER (LANG(?item_label) = "ru").
?item wdt:P178 ?developer. # developer
?developer rdfs:label ?developer_label.
FILTER (LANG(?developer_label) = "ru").
?developer wdt:P69 ?educational_institution. # educated at
?educational_institution rdfs:label ?educational_institution_label.
FILTER (LANG(?educational_institution_label) = "ru").
?educational_institution wdt:P625 ?coord. # coordinate location
SERVICE wikibase:label {
bd:serviceParam wikibase:language "ru".
}
}
SPARQL-запрос, 142 записи (2017), 282 результата (2020).
По карте видно, что большая часть людей, причастных к созданию языков программирования, учились в Европе или в США.
Построим также пузырьковую-диаграмму по самым популярным учебным заведениям, среди будущих создателей языков программирования. Видим на рисунке, что на первых местах оказались: Принстонский университет (8 студентов) и Стэнфордский университет (8). МГУ оказался в конце списка, в нем учился Э́нтони Ри́чард Хо́ар, разработавший ALGOL60, и Валентин Фёдорович Турчин, разработавший РЕФАЛ. МГУ попал в этот список, включающий 142 вуза мира.
Профессии создателей языков программирования[править]
Построим пузырьковую диаграмму, отображающую какие профессии преобладают среди людей, разрабатывающих языки программирования.
Используются:
- Объект: programming language (Q9143).
- Свойство: instance of (P31).
- Свойство: developer (P178).
- Свойство: occupation (P106).
#defaultView:BubbleChart
SELECT ?occupation_label (count(*) as ?occupation)
WHERE
{
?item wdt:P31 wd:Q9143. # instances of programming language
?item wdt:P178 ?developer. # developer
?developer wdt:P106 ?occupation. # occupation
?occupation rdfs:label ?occupation_label.
FILTER (LANG(?occupation_label) = "ru").
}
GROUP BY ?occupation_label
ORDER BY DESC(?count)
SPARQL-запрос, 48 записей (2017), 74 записи (2020).
Наиболее распространенными профессиями оказались: специалист в области компьютерных наук, инженер, учитель. Интересно заметить, что встречаются такие профессии как: джазовый музыкант, политик (Герберт Александер Саймон).
На 2020 год среди разработчиков языков программирования оказалось больше всего специалистов в области компьютерных наук (172 человека), а также 96 инженеров, 57 учителей, 56 программистов и 43 математика.
Объектно-ориентированные языки программирования[править]
Помимо самих языков программирования, Викиданные описывают также и парадигмы программирования. С помощью скрипта https://w.wiki/oLg и иллюстрации видно, что по числу языков программирования самой популярной является объектно-ориентированное программирование (399 языков на 2020 год), следом идут процедурные языки (297 языков на 2020 год). Стоит заметить, что мультипарадигменное программирование (программирование с одновременным использованием множества парадигм) также представлено большим числом языков программирования.
Выведем список всех объектно-ориентированных языков программирования.
Используются:
- Объект: object-oriented programming language (Q899523).
- Свойство: instance of (P31).
SELECT DISTINCT ?item ?item_label
WHERE
{
?item wdt:P31 wd:Q899523 # instances of object-oriented programming language
; rdfs:label ?item_label .
FILTER (LANG(?item_label) = "ru") .
}
SPARQL-запрос, 116 записей (2017), 118 записей (2020).
Таким образом 16% языков программирования являются объектно-ориентированными.
Полнота викиданных[править]
По данным Боровского исследовательского университета [1] существует как минимум 26 языков программирования, которые поддерживают объектно-ориентированную парадигму. В статьях посвященных объектно-ориентированному программированию к этому списку добавляются ещё 4[2] и 3[3] языка программирования. SPARQL-запрос вернул 116 результатов. Судить о полноте данных в трех приведенных выше источниках сложно, так как большое количество малоизвестных, устаревших и узконаправленных языков, которые не освещаются в авторитетных источниках. Из этого можно сделать вывод, Викиданные предоставляют достаточно полный список объектно-ориентированных языков программирования.
Степень заполненности объектов[править]
Выведем список всех людей, которые связаны с разработкой языков программирования и у объектов которых заполнено поле 'label' на английском языке:
SELECT ?item_label ?item ?developer_label ?developer
WHERE
{
?item wdt:P31 wd:Q9143 # instances of programming language
; rdfs:label ?item_label.
FILTER (LANG(?item_label) = "en").
?item wdt:P178 ?developer. # developer
?developer wdt:P31 wd:Q5. # instances of human
?developer rdfs:label ?developer_label.
FILTER (LANG(?developer_label) = "en").
}
SPARQL-запрос, 133 записи (2017), 223 записи (2020).
На 2017 год имелось 133 таких записи. Выведем аналогичный список, но с заполненным полем 'label' на русском языке. Таких записей 88. Заполним поля 'label' и 'description' на русском языке у этих объектов и выведем результат:
SELECT ?item_label ?item ?developer_label ?developer
WHERE
{
?item wdt:P31 wd:Q9143 # instances of programming language
; rdfs:label ?item_label.
FILTER (LANG(?item_label) = "ru").
?item wdt:P178 ?developer. # developer
?developer wdt:P31 wd:Q5. # instances of human
?developer rdfs:label ?developer_label.
FILTER (LANG(?developer_label) = "ru").
}
SPARQL-запрос, 133 записи (2017), 183 записи (2020).
Будущая работа[править]
- Вывести все языки программирования с свойством "персонаж-талисман".
- Посчитать количество языков программирования основанных раньше 1992 года (свойство: "дата-основания/создания").
- Построить столбчатую диаграмму, отражающую количество известных хештегов в Твиттере для каждого языка программирования (свойство: "хештег Твиттера").
Упражнения[править]
SPARQL-запросы с ответами:
- Языки программирования и их разработчики.
- Логотипы языков программирования.
- Количество диалектов у языков программирования.
Примечания[править]
Литература[править]
- Объектно-ориентированное программирование (ООП-1) (рус.). bourabai.ru.
- Объектно-ориентированное программирование (рус.). fandom.wikia.com. — Описание объектно-ориентированной парадигмы.
- Игорь Гаршин Первые языки объектно-ориентированного программирования (ООП) (рус.).
Ссылки[править]
- Andrew Krizhanovsky, Denis Kovalchuk Где учатся и кем работают изобретатели языков программирования. — Authorea, 2017.
- Andrew Krizhanovsky, Denis Kovalchuk Где учатся и кем работают изобретатели языков программирования. — Научный Корреспондент, 2017.
- Burdin Grigoriy Programming languages (англ.). ProWD (2020). Проверено 24 сентября 2020.