Программирование Викиданных/Языки программирования

Исследуем свойства языков программирования на основе базы знаний международного проекта Викиданные. С помощью SPARQL-запросов, вычисляемых на объектах типа "язык программирования" в Викиданных, решен ряд задач. Получен перечень всех языков программирования под пермиссивными лицензиями. Построена пузырьковая диаграмма по количеству форматов файлов исходного кода. Построены карты, отображающие месторасположение учебных заведений и компаний, в которых учились или работали люди, связанные с созданием языков программирования. Получен список всех объектно-ориентированных языков программирования. Получен вывод об исчерпывающей полноте Викиданных относительно объектно-ориентированных языков программирования.

Факультет компьютерных технологий
Иконка программы Pywikibot

Программирование Викиданных

Главы (2021):

Алгоритм работы (для авторов):

Постановка задачи править

Исследуем языки программирования, а именно информацию о них в Русской Википедии, Английской Википедии и Викиданных.

Задачи:

  1. Построить список языков программирования
  2. Найти процентное соотношения свободных языков к закрытым
  3. Отобразить на карте места учёбы и жительства разработчиков языков программирования

Используемые в SPARQL-запросах объекты править

Используемые в SPARQL-запросах свойства править

Экземпляры объекта "Язык программирования" править

Построим список всех языков.

#List of `instances of` programming language
SELECT ?lang ?langLabel
WHERE
{
    ?lang wdt:P31 wd:Q9143.
    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!. На 2020 год малоинформативными оказались: Tiny, Proteus, Comfy - всего по одному свойству.

Недостаток полученного списка в том, что ряд объектов получился безымянным на Викиданных (No label defined). Попробуем получить список языков, у которых поле "label" будет непустым.

#List of `instances of` programming language only with a label.
SELECT ?lang ?lang_label
WHERE
{
  ?lang wdt:P31 wd:Q9143
  ; rdfs:label ?lang_label FILTER (LANG(?lang_label) = "ru")
}

SPARQL-запрос, 709 записей (2017), 1422 записи (2020).

Если в 2017 году число языков уменьшилось на два десятка записей, то на 2020 год все языки в списке имеют заполненное поле label на английском или русском языке.
Если же сузить требования до заполненного поля label на исключительно на русском языке, число записей уменьшится до 630 (на 2020 год). Например, такие языки программирования, как Turing и CFEngine имеют незаполненное поле label.

Демонстрация работы с операциями над множествами в SPARQL править

В данном разделе представлен пример операции со множествами. Задание следующее: вывести все языки программирования, являющиеся открытым программным обеспечением (free software) и испытавшие на себе влияние, хотя бы одного из следующих языков программирования: Си, Python, Java, при этом разработанные какой-либо из фирм, кроме: Sun Microsystems, Космический центр имени Линдона Джонсона.

В запросе формируются два множества: множество языков программирования, испытавших на себе влияние Си, Python, Java и множество языков программирования, не являющихся открытым программным обеспечением (free software), после чего из первого множество вычитается второе.

SELECT DISTINCT ?lang ?langLabel
WHERE
{
    ?lang wdt:P31 wd:Q9143 # instances of programming language
    SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en" }.
    {
      { ?lang wdt:P737 wd:Q15777 } UNION # influenced by C
      { ?lang wdt:P737 wd:Q28865 } UNION # influenced by Python
      { ?lang wdt:P737 wd:Q251   } UNION # influenced by Java
      { ?lang wdt:P31  wd:Q341   }
    } MINUS 
  	{ 
      { ?lang wdt:P178 wd:Q14647  } UNION # developer Sun Microsystems
      { ?lang wdt:P178 wd:Q208371 }       # developer Космический центр имени Линдона Джонсона
    }  
}

SPARQL-запрос, 115 записей (2017), 122 записи (2020).

Пермиссивные лицензии править

Выведем все языки программирования находящиеся под пермиссивными лицензиями (практически не ограничивают свободу действий пользователей ПО и разработчиков).

SELECT DISTINCT ?lang ?langLabel
WHERE
{
    ?lang wdt:P31 wd:Q9143
    SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }.
    { ?lang wdt:P275 wd:Q308915  }  UNION  # license Mozzila Public
    { ?lang wdt:P275 wd:Q334661  }  UNION  # license MIT
	{ ?lang wdt:P275 wd:Q191307  }  UNION  # license BSD
	{ ?lang wdt:P275 wd:Q6905323 }         # license CC
}

SPARQL-запрос, 37 записей (2017), 82 записи (2020).

В этот список из 37 "свободных" языков попали, например CoffeeScript, Go, Haml.

Рассмотрим соотношение языков с пермиссивной лицензией и языков с проприетарной или закрытыми лицензиями.

#The script calculates the percentage of programming languages 
#The script calculates the percentage of programming languages 
#with a free license in relation to languages with a closed license
SELECT (COUNT(?notFree)* 100 / (COUNT(?free)) as ?total) WHERE
{{
    SELECT ?free WHERE {
      ?free wdt:P31 wd:Q9143 # instances of programming language
       SERVICE wikibase:label { bd:serviceParam wikibase:language "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 ?notFree WHERE {
      ?notFree wdt:P31 wd:Q9143 # instances of programming language
      SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
      { ?notFree wdt:P275 wd:Q6165015 } UNION # Java Research License
      { ?notFree wdt:P275 wd:Q218616 } UNION # proprietary software
      { ?notFree wdt:P275 wd:Q3238057 } UNION # proprietary license 
      { ?notFree wdt:P275 wd:Q31202214 } UNION # proprietary software 
      { ?notFree wdt:P275 wd:Q979794 } # Aladdin Free Public License
    }}
}

SPARQL-запрос, на 2020 год отношение языков программирования с закрытой лицензией к "свободным" языкам равно примерно 26%.

Количество форматов файлов исходного кода править

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

#defaultView:BubbleChart
SELECT ?langLabel (count(*) as ?count)
WHERE
{
    ?lang wdt:P31 wd:Q9143 . # instance of programming language
 	?lang wdt:P1195 ?count . # file extension
 	SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en" }
}
GROUP BY ?langLabel
ORDER BY DESC(?count)

SPARQL-запрос.

 
Пузырьковая диаграмма по количеству форматов файлов исходного кода (2020). Размер пузырька соответствует числу форматов для одного языка.
 
Пузырьковая диаграмма по количеству форматов файлов исходного кода (2017). Размер пузырька соответствует числу форматов для одного языка.

Из рисунка видно, что самыми исторически богатыми на форматы и расширения файлов являются такие языки программирования, как: 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).

#defaultView:Map
SELECT ?langLabel ?developerLabel ?locationLabel ?coord
WHERE
{
   ?lang wdt:P31 wd:Q9143. # instances of programming language
   ?lang wdt:P178 ?developer. # developer
   { ?developer wdt:P159 ?location. } UNION # headquarters location
   { ?developer wdt:P19 ?location. } # place of birth
   ?location wdt:P625 ?coord. # coordinate location
   SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" } 	
}

SPARQL-запрос.

 
Наиболее благоприятные страны для появления людей, способных к разработке языков программирования 2020

Построим также пузырьковую диаграмму, чтобы выявить наиболее благоприятные страны для появления людей, способных к разработке языков программирования и размещению в этих странах штаб-квартир. Видим на рисунке, что наиболее благоприятными странами оказались США (159 человек и штаб квартир) и Великобритания (15). В России было разработано только два языка программирования: РЕФАЛ и Встроенный язык программирования 1С:Предприятие.

На 2020 год число штаб-квартир в США равно 241, в Великобритании — 24, в Франции — 18, а в России — 5.

Университеты, в которых учились будущие разработчики языков программирования править

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

#defaultView:Map
SELECT ?langLabel ?developerLabel ?educationalInstitutionLabel ?coord
WHERE {
  ?lang wdt:P31 wd:Q9143. # instances of programming language
  ?lang wdt:P178 ?developer. # developer
  ?developer wdt:P69 ?educationalInstitution. # educated at
  ?educationalInstitution wdt:P625 ?coord. # coordinate location
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" } 	
}

SPARQL-запрос, 142 записи (2017), 282 результата (2020).

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

Построим также [1] по самым популярным учебным заведениям, среди будущих создателей языков программирования. Видим на рисунке, что на первых местах оказались: Принстонский университет (8 студентов) и Стэнфордский университет (8). МГУ оказался в конце списка, в нем учился Э́нтони Ри́чард Хо́ар, разработавший ALGOL60, и Валентин Фёдорович Турчин, разработавший РЕФАЛ. МГУ попал в этот список, включающий 142 вуза мира.

Профессии создателей языков программирования править

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

#defaultView:BubbleChart
SELECT ?occupationLabel (count(*) as ?occupation)
WHERE
{
 ?lang wdt:P31 wd:Q9143. # instances of programming language 
 ?lang wdt:P178 ?developer. # developer
 ?developer wdt:P106 ?occupation. # occupation
 SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
}
GROUP BY ?occupationLabel 
ORDER BY DESC(?count)

SPARQL-запрос, 48 записей (2017), 74 записи (2020).

 
Профессии людей, которые разрабатывают языки программирования (2020).
 
Профессии людей, которые разрабатывают языки программирования (2017).


Наиболее распространенными профессиями оказались: специалист в области компьютерных наук, инженер, учитель. Интересно заметить, что встречаются такие профессии как: джазовый музыкант, политик (Герберт Александер Саймон). На 2020 год среди разработчиков языков программирования оказалось больше всего специалистов в области компьютерных наук (172 человека), а также 96 инженеров, 57 учителей, 56 программистов и 43 математика.

Объектно-ориентированные языки программирования править

 
Число языков программирования, разработанных с использованием указанных парадигм программирования на 2020 год

Помимо самих языков программирования, Викиданные описывают также и парадигмы программирования. С помощью скрипта https://w.wiki/oLg и иллюстрации видно, что по числу языков программирования самой популярной является объектно-ориентированное программирование (399 языков на 2020 год), следом идут процедурные языки (297 языков на 2020 год). Стоит заметить, что мультипарадигменное программирование (программирование с одновременным использованием множества парадигм) также представлено большим числом языков программирования.

Выведем список всех объектно-ориентированных языков программирования.

SELECT DISTINCT ?lang ?langLabel
WHERE
{
 ?lang wdt:P31 wd:Q899523 # instances of object-oriented programming language
 SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en" } 
}

SPARQL-запрос, 116 записей (2017), 118 записей (2020).

Таким образом 16% языков программирования являются объектно-ориентированными.

Полнота викиданных править

По данным Боровского исследовательского университета [1] существует как минимум 26 языков программирования, которые поддерживают объектно-ориентированную парадигму. В статьях посвященных объектно-ориентированному программированию к этому списку добавляются ещё 4[2] и 3[3] языка программирования. SPARQL-запрос вернул 84 результата. Судить о полноте данных в трех приведенных выше источниках сложно, так как большое количество малоизвестных, устаревших и узконаправленных языков, которые не освещаются в авторитетных источниках. Из этого можно сделать вывод, Викиданные предоставляют достаточно полный список объектно-ориентированных языков программирования.

Степень заполненности объектов править

Выведем список всех людей, которые связаны с разработкой языков программирования и у объектов которых заполнено поле 'label' на английском языке:

SELECT ?langLabel ?lang ?developerLabel ?developer
WHERE
{
 ?lang wdt:P31 wd:Q9143. # instances of programming language
 ?lang wdt:P178 ?developer. # developer 
 ?developer wdt:P31 wd:Q5. # instances of human
 SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }.
}

SPARQL-запрос, 133 записи (2017), 223 записи (2020).

На 2017 год имелось 133 таких записи. Выведем аналогичный список, но с заполненным полем 'label' на русском языке. Таких записей 88. Заполним поля 'label' и 'developer' на русском языке у этих объектов и выведем результат:

SELECT ?langLabel ?lang ?developerLabel ?developer
WHERE
{
 ?lang wdt:P31 wd:Q9143. # instances of programming language
 ?lang wdt:P178 ?developer # developer 
 ; rdfs:label ?developerLabel FILTER (LANG(?developerLabel) = "ru").
 ?developer wdt:P31 wd:Q5 # instances of human
 ; rdfs:label ?langLabel FILTER (LANG(?langLabel) = "ru")
}

SPARQL-запрос, 133 записи (2017), 146 записей (2020).

Будущая работа править

  1. Вывести все языки программирования с свойством "персонаж-талисман".
  2. Посчитать количество языков программирования основанных раньше 1992 года (свойство: "дата-основания/создания").
  3. Построить столбчатую диаграмму, отражающую количество известных хештегов в Твиттере для каждого языка программирования (свойство: "хештег Твиттера").
  4. Построить упорядоченный список языков программирования по числу интервик.
  5. Построить список языков по числу посещений статей в Русской Википедии.
  6. Построить направленный ациклический граф зависимостей языков программирования друг от друга (или найти циклы в зависимостях, если такой граф нельзя построить). См. свойство "influenced by" в Java.

Упражнения править

1 Соотнесите язык программирования и его разработчика.

Жан Ишбиа Чарльз Мур Джо Армстронг
Ада
Форт
Erlang

2 Выберите логотип языка программирования LOLCODE:

 
 
 
 

3 Заполните пропуски.

Фортран находится на первом месте по количеству своих диалектов. Их число достигает порядка

. На втором месте Лисп -

диалектов. Третье место делят между собой Standard ML и Object Pascal с

диалектами.


SPARQL-запросы с ответами:

Примечания править

Литература править

Ссылки править