Открыть главное меню

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

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

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

Математики

Содержание

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

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

Задачи:

  1. Построить упорядоченный список языков программирования по числу интервик.
  2. Построить список языков по числу посещений статей в Русской Википедии.
  3. Построить направленный ациклический граф зависимостей языков программирования друг от друга (или найти циклы в зависимостях, если такой граф нельзя построить). См. свойство "influenced by" в Java.

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

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

#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 "en" }
}

SPARQL-запрос, 732 записи.

👍 Наиболее полными и проработанными языками программирования на Викиданных являются: Java, Python, C.

👎 Почти пустыми и малоинформативными языками оказались: 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) = "en") . 
}

SPARQL-запрос, 709 записей.

На два десятка записей стало меньше.

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

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

Используются:

#2017-02
SELECT DISTINCT ?item ?item_label
WHERE
{
    ?item wdt:P31 wd:Q9143 # instances of programming language
    ; rdfs:label ?item_label . 

    FILTER (LANG(?item_label) = "en") . 

    {
      { ?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-03
SELECT DISTINCT ?item ?item_label
WHERE
{
    ?item wdt:P31 wd:Q9143 # instances of programming language
    ; rdfs:label ?item_label . 

    FILTER (LANG(?item_label) = "en") . 
  
      { ?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 записей.

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

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

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

Используются:

#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) = "en").
}

GROUP BY ?lang_name 
ORDER BY DESC(?count)

SPARQL-запрос.

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


Из рисунка видно, что самыми исторически богатыми на форматы и расширения файлов являются такие языки программирования, как: C++ (10 форматов), Geometric Description Language (8), Racket (7). Например, файлы с программой на языке Racket могут иметь расширения rkt, rktl, rktd, scrbl, plt, ss или scm.

Страны, в которых живут люди и располагаются организации, связанные с созданием языков программированияПравить

Отобразим на карте страны, в которых живут люди и располагаются организации, связанные с созданием языков программирования. Заметим, что разработчиком языка может выступать как организация, так и отдельных человек. Для определения месторасположения (свойство: coordinate location) организации будем использовать координаты её штаб-квартиры (свойство: headquarters location), для человека - координаты места его рождения (свойство: place of birth).

Используются:

#2017-05
#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) = "en"). 
  
    ?item wdt:P178 ?developer. # developer
    ?developer rdfs:label ?developer_label. 
    FILTER (LANG(?developer_label) = "en"). 
      		
    { ?developer wdt:P159 ?location. } UNION # headquarters location
    { ?developer wdt:P19  ?location  }       # place of birth
    ?location rdfs:label ?location_label. 
    FILTER (LANG(?location_label) = "en").
    
    ?location wdt:P625 ?coord. # coordinate location

    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en".
    }   	
}

SPARQL-запрос.

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


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

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

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

Используются:

#2017-05
#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) = "en"). 
    
    ?item wdt:P178 ?developer. # developer
    ?developer rdfs:label ?developer_label. 
    FILTER (LANG(?developer_label) = "en"). 
    	
    ?developer wdt:P69 ?educational_institution. # educated at
    ?educational_institution rdfs:label ?educational_institution_label. 
    FILTER (LANG(?educational_institution_label) = "en").
    
    ?educational_institution wdt:P625 ?coord. # coordinate location
    
    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en".
    } 	
}

SPARQL-запрос, 142 записи.

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


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

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

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

Используются:

#2017-05
#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) = "en"). 
}
GROUP BY ?occupation_label 
ORDER BY DESC(?count)

SPARQL-запрос, 48 записей.

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


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

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

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

Используются:

#2017-4
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) = "en") . 
}

SPARQL-запрос, 116 записей.

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

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

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

Заполнение объектовПравить

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

#2017-05
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 записи.

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

#2017-05
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) = "ru").  
}

SPARQL-запрос, 133 записи.

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

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

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

1

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

J. Ichbiah C. Moore J. Armstrong
Ада
Форт
Erlang

2

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

 
 
 
 

3

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

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

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

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

диалектами.


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

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

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

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