Denis Kovalchuk, magentaPetrozavodsk State University
1
Где учатся и кем работают изобретатели языков
программирования
Аннотация
Исследуем свойства языков программирования на основе базы знаний
международного проекта Викиданные. С помощью SPARQL-запросов, вычисляемых
на объектах типа "язык программирования" в Викиданных, решен ряд
задач. Получен перечень всех языков программирования под пермиссивными
лицензиями. Построена пузырьковая диаграмма по количеству форматов
файлов исходного кода. Построены карты, отображающие месторасположение
учебных заведений и компаний, в которых учились или работали люди,
связанные с созданием языков программирования. Получен список всех
объектно-ориентированных языков программирования. Получен вывод об
исчерпывающей полноте Викиданных относительно объектно-ориентированных
языков программирования.
Примечание
Статья распространяется по лицензии Creative Commons Attribution-ShareAlike.
Материалы этой статьи использованы в главе курса Викиверситета "Программирование Викиданных" (1). Иллюстрации загружены на Викисклад. Научный руководитель к.т.н. Крижановский А.А.
2
Экземпляры объекта "Язык программирования"
• Объект: язык программирования (Q9143).
• Свойство: instance of (P31).
Построим список всех языков (листинг 1).
1
2
3
4
5
6
7
#L i s t o f ‘ i n s t a n c e s of ‘ " programming l a n g u a g e "
SELECT ? l a n g ? l a n g L a b e l
WHERE
{
? l a n g wdt : P31 wd : Q9143 . # i n s t a n c e s o f programming l a n g u a g e
SERVICE w i k i b a s e : l a b e l { bd : s e r v i c e P a r a m w i k i b a s e : l a n g u a g e " en " }
}
Листинг 1: Список языков программирования
SPARQL-запрос, 732 записи.
Наиболее полными и проработанными языками программирования на Викиданных являются: Java, Python, C.
Почти пустыми и малоинформативными языками оказались: CLIPS, shell script,
Dylan.
Безымянные объекты
Недостаток полученного списка (листинг 1) в том, что ряд объектов получился
безымянным на Викиданных (No label defined). Попробуем получить список языков,
у которых поле "label"будет непустым (листинг 2).
1
2
3
4
5
6
7
8
# L i s t o f ‘ i n s t a n c e s of ‘ " programming l a n g u a g e " o n l y with a l a b e l .
SELECT ? item ? i t e m _ l a b e l
WHERE
{
? item wdt : P31 wd : Q9143 ; # i n s t a n c e s o f programming l a n g u a g e
r d f s : l a b e l ? item_label .
FILTER (LANG( ? i t e m _ l a b e l ) = " en " ) .
}
Листинг 2: Список языков с заполненным полем label
3
SPARQL-запрос, 709 записей.
На два десятка записей стало меньше, то есть у около двадцати языков программирования не указано название на английском.
Демонстрация работы с операциями над множествами в SPARQL
Выведем все языки программирования, являющиеся открытым программным обеспечением (free software) и/или испытавшие на себе влияние хотя бы одного из следующих языков программирования: C, Python, Java. При этом разработанные какой-либо
из фирм, кроме: Sun Microsystems, Космический центр имени Линдона Джонсона.
См. листинг 3.
Используются:
• Объект: programming language (Q9143).
• Свойство: influenced by (P737).
• Свойство: developer (P178).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#2017−02
SELECT DISTINCT ? item ? i t e m _ l a b e l
WHERE
{
? item wdt : P31 wd : Q9143 # i n s t a n c e s o f programming
; r d f s : l a b e l ? item_label .
FILTER (LANG( ? i t e m _ l a b e l ) = " en " ) .
{
{ ? item wdt : P737 wd : Q15777 } UNION # i n f l u e n c e d
{ ? item wdt : P737 wd : Q28865 } UNION # i n f l u e n c e d
{ ? item wdt : P737 wd : Q251
} UNION # i n f l u e n c e d
{ ? item wdt : P31 wd : Q341
}
} MINUS
{
{ ? item wdt : P178 wd : Q14647 } UNION # d e v e l o p e r
{ ? item wdt : P178 wd : Q208371 }
# developer
}
}
language
by C
by Python
by Java
Sun M icr osy ste ms
Листинг 3: Демонстрация работы с операциями над множествами в SPARQL
4
SPARQL-запрос, 115 записей.
Пермиссивные лицензии
Выведем все языки программирования, находящиеся под пермиссивными лицензиями (практически не ограничивают свободу действий пользователей ПО и разработчиков) (листинг 4).
Используются:
• Объект: programming language (Q9143).
• Свойство: license by (P275).
1
2
3
4
5
6
7
8
9
10
11
12
#2017−03
SELECT DISTINCT ? item ? i t e m _ l a b e l
WHERE
{
? item wdt : P31 wd : Q9143 # i n s t a n c e s o f programming l a n g u a g e
; r d f s : l a b e l ? item_label .
FILTER (LANG( ? i t e m _ l a b e l ) = " en " ) .
{ ? item wdt : P275 wd : Q308915 } UNION # l i c e n s e M o z i l l a P u b l i c
{ ? item wdt : P275 wd : Q334661 } UNION # l i c e n s e MIT
{ ? item wdt : P275 wd : Q191307 } UNION # l i c e n s e BSD
{ ? item wdt : P275 wd : Q6905323 }
# l i c e n s e CC
}
Листинг 4: Список языков программирования, находящихся под пермиссивными
лицензиями
SPARQL-запрос, 37 записей.
В этот список из 37 "свободных"языков попали, например CoffeeScript, Go, Haml.
Количество форматов файлов исходного кода
В зависимости от языка программирования, файлы с исходным кодом программ
могут иметь разные расширения. Построим пузырьковую диаграмму по количеству
допустимых форматов файлов исходного кода (листинг 5).
5
• Объект: programming language (Q9143).
• Свойство: instance of (P31).
• Свойство: file extension (P1195).
1
2
3
4
5
6
7
8
9
10
11
12
#added 2017−04
#d e f a u l t V i e w : BubbleChart
SELECT ? lang_name ( count ( * ) a s ? count )
WHERE
{
? l a n g wdt : P31 wd : Q9143 . # i n s t a n c e o f programming l a n g u a g e
? l a n g wdt : P1195 ? count . # f i l e e x t e n s i o n
? l a n g r d f s : l a b e l ? lang_name .
f i l t e r ( l a n g ( ? lang_name ) = " en " ) .
}
GROUP BY ? lang_name
ORDER BY DESC( ? count )
Листинг 5: Построить пузырьковую диаграмму по количеству форматов файлов
исходного кода
SPARQL-запрос.
Из рисунка 1 видно, что самыми исторически богатыми на форматы и расширения файлов являются такие языки программирования, как: C++ (10 форматов),
Geometric Description Language (8), Racket (7). Например, файлы с программой на
языке Racket могут иметь расширения rkt, rktl, rktd, scrbl, plt, ss или scm.
Страны, в которых живут люди и располагаются организации, связанные с созданием языков программирования
Отобразим на карте страны, в которых живут люди и располагаются организации,
связанные с созданием языков программирования. Заметим, что разработчиком языка может выступать как организация, так и отдельный человек. Для определения
месторасположения (свойство: coordinate location) организации будем использовать
6
Рис. 1: Пузырьковая диаграмма по количеству форматов файлов исходного кода
координаты её штаб-квартиры (свойство: headquarters location), для человека – координаты места его рождения (свойство: place of birth), см. листинг 6.
Используются:
• Объект: programming language (Q9143).
• Свойство: instance of (P31).
• Свойство: developer (P178).
• Свойство: headquarters location (P159).
• Свойство: place of birth (P19).
7
• Свойство: coordinate location (P625).
1
2
3
4
5
6
7
8
#2017−05
#d e f a u l t V i e w : Map
SELECT ? i t e m _ l a b e l ? d e v e l o p e r _ l a b e l ? l o c a t i o n _ l a b e l ? c o o r d
WHERE
{
? item wdt : P31 wd : Q9143 # i n s t a n c e s o f programming l a n g u a g e
; r d f s : l a b e l ? item_label .
FILTER (LANG( ? i t e m _ l a b e l ) = " en " ) .
9
? item wdt : P178 ? d e v e l o p e r . # d e v e l o p e r
? developer rdfs : label ? developer_label .
FILTER (LANG( ? d e v e l o p e r _ l a b e l ) = " en " ) .
10
11
12
13
{ ? d e v e l o p e r wdt : P159 ? l o c a t i o n . } UNION # h e a d q u a r t e r s l o c a t i o n
{ ? d e v e l o p e r wdt : P19 ? l o c a t i o n }
# place of birth
? location rdfs : label ? location_label .
FILTER (LANG( ? l o c a t i o n _ l a b e l ) = " en " ) .
14
15
16
17
18
? l o c a t i o n wdt : P625 ? c o o r d . # c o o r d i n a t e l o c a t i o n
SERVICE w i k i b a s e : l a b e l {
bd : s e r v i c e P a r a m w i k i b a s e : l a n g u a g e " en " .
}
19
20
21
22
23
}
Листинг 6: Страны в которых живут люди и располагаются организации, связанные
с созданием языков программирования
SPARQL-запрос.
Построим также пузырьковую диаграмму, чтобы выявить наиболее благоприятные страны для появления людей, способных к разработке языков программирования и размещению в этих странах штаб-квартир. Видим на рис. 2, что наиболее
благоприятными странами оказались США (159 человек и штаб-квартир) и Великобритания (15). В России было разработано только два языка программирования:
РЕФАЛ и Встроенный язык программирования 1С:Предприятие.
8
Рис. 2: Страны, в которых живут люди и располагаются организации, связанные с
созданием языков программирования
Университеты, в которых учились люди, разрабатывавшие
языки программирования
Отобразим на карте учебные заведения, в которых учились студенты, впоследствии
разработавшие языки программирования (листинг 7).
Используются:
• Объект: programming language (Q9143).
• Свойство: instance of (P31).
• Свойство: developer (P178).
• Свойство: educated at (P69).
9
• Свойство: coordinate location (P625).
1
2
3
4
5
6
7
8
#2017−05
#d e f a u l t V i e w : Map
SELECT ? i t e m _ l a b e l ? d e v e l o p e r _ l a b e l ? e d u c a t i o n a l _ i n s t i t u t i o n _ l a b e l ? c o o r d
WHERE
{
? item wdt : P31 wd : Q9143 # i n s t a n c e s o f programming l a n g u a g e
; r d f s : l a b e l ? item_label .
FILTER (LANG( ? i t e m _ l a b e l ) = " en " ) .
9
? item wdt : P178 ? d e v e l o p e r . # d e v e l o p e r
? developer rdfs : label ? developer_label .
FILTER (LANG( ? d e v e l o p e r _ l a b e l ) = " en " ) .
10
11
12
13
? d e v e l o p e r wdt : P69 ? e d u c a t i o n a l _ i n s t i t u t i o n . # e d u c a t e d a t
? educational_institution rdfs : label ? educational_institution_label .
FILTER (LANG( ? e d u c a t i o n a l _ i n s t i t u t i o n _ l a b e l ) = " en " ) .
? e d u c a t i o n a l _ i n s t i t u t i o n wdt : P625 ? c o o r d . # c o o r d i n a t e l o c a t i o n
SERVICE w i k i b a s e : l a b e l {
bd : s e r v i c e P a r a m w i k i b a s e : l a n g u a g e " en " .
}
14
15
16
17
18
19
20
21
}
Листинг 7: Университеты в которых учились люди, разрабатывавшие языки
программирования
SPARQL-запрос, 142 записи.
Построим также пузырьковую диаграмму по самым популярным учебным заведениям, среди будущих создателей языков программирования. Видим на рис. 3, что на
первых местах оказались: Принстонский университет (8 студентов) и Стэнфордский
университет (8). МГУ оказался в конце списка, в нем учился Энтони Ричард Хоар,
разработавший ALGOL60, и Валентин Фёдорович Турчин, разработавший РЕФАЛ.
МГУ попал в этот список, включающий 142 вуза мира.
Профессии создателей языков программирования
Построим пузырьковую диаграмму, отображающую какие профессии преобладают
среди людей, разрабатывающих языки программирования (листинг 8).
10
Рис. 3: Учебные заведения, в которых учились люди, создававшие языки программирования
Используются:
• Объект: programming language (Q9143).
• Свойство: instance of (P31).
• Свойство: developer (P178).
• Свойство: occupation (P106).
1
2
3
4
5
6
7
8
9
10
11
#2017−05
#d e f a u l t V i e w : BubbleChart
SELECT ? o c c u p a t i o n _ l a b e l ( count ( * ) a s ? o c c u p a t i o n )
WHERE
{
? item wdt : P31 wd : Q9143 . # i n s t a n c e s o f programming l a n g u a g e
? item wdt : P178 ? d e v e l o p e r . # d e v e l o p e r
? d e v e l o p e r wdt : P106 ? o c c u p a t i o n . # o c c u p a t i o n
? occupation rd fs : l a b e l ? occupation_label .
FILTER (LANG( ? o c c u p a t i o n _ l a b e l ) = " en " ) .
}
11
12
13
GROUP BY ? o c c u p a t i o n _ l a b e l
ORDER BY DESC( ? count )
Листинг 8: Пузырьковая диаграмма, отображающая какие профессии преобладают
среди людей, разрабатывающих языки программирования
SPARQL-запрос, 48 записей.
Рис. 4: Профессии людей, которые разрабатывают языки программирования
Наиболее распространенными профессиями оказались: специалист в области компьютерных наук, инженер, учитель (рис. 4). Интересно заметить, что встречаются
такие профессии как джазовый музыкант и политик (Герберт Александер Саймон).
12
Объектно-ориентированные языки программирования
Вывести список всех объектно-ориентированных языков программирования (листинг
9).
Используются:
• Объект: object-oriented programming language (Q899523).
• Свойство: instance of (P31).
1
2
3
4
5
6
7
8
#2017−4
SELECT DISTINCT ? item ? i t e m _ l a b e l
WHERE
{
? item wdt : P31 wd : Q899523 # i n s t a n c e s o f o b j e c t −o r i e n t e d programming
language
; r d f s : l a b e l ? item_label .
FILTER (LANG( ? i t e m _ l a b e l ) = " en " ) .
}
Листинг 9: Список объектно-ориентированных языков программирования
SPARQL-запрос, 116 записей.
Таким образом 16% языков программирования являются объектно-ориентированными.
Полнота Викиданных
По данным Боровского исследовательского университета (2) существует как минимум 26 языков программирования, которые поддерживают объектно-ориентированную
парадигму. В статьях посвященных объектно-ориентированному программированию
к этому списку добавляются ещё 4 (3) и 3 (4) языка программирования. SPARQLзапрос вернул 116 результатов. Судить о полноте данных в трех приведенных выше
источниках сложно, так как большое количество малоизвестных, устаревших и узконаправленных языков, которые не освещаются в авторитетных источниках. Из
13
этого можно сделать вывод, Викиданные предоставляют достаточно полный список
объектно-ориентированных языков программирования.
Заполнение объектов
Выведем список всех людей, которые связаны с разработкой языков программирования и у объектов которых заполнено поле "label" на английском языке (листинг
10).
1
2
3
4
5
6
7
#2017−05
SELECT ? i t e m _ l a b e l ? item ? d e v e l o p e r _ l a b e l ? d e v e l o p e r
WHERE
{
? item wdt : P31 wd : Q9143 # i n s t a n c e s o f programming l a n g u a g e
; r d f s : l a b e l ? item_label .
FILTER (LANG( ? i t e m _ l a b e l ) = " en " ) .
8
? item wdt : P178 ? d e v e l o p e r . # d e v e l o p e r
? d e v e l o p e r wdt : P31 wd : Q5 . # i n s t a n c e s o f human
? developer rdfs : label ? developer_label .
FILTER (LANG( ? d e v e l o p e r _ l a b e l ) = " en " ) .
9
10
11
12
13
}
Листинг 10: Список людей, связанных с разработкой языков программирования, у
объектов которых заполнено поле "label" на английском языке
SPARQL-запрос, 133 записи.
На 21 мая 2017 года имелось 133 таких программиста. Выведем аналогичный
список, но с заполненным полем "label"на русском языке. Таких записей всего 88.
Заполним поля "label" и "description" на русском языке у этих объектов и выведем
результат (листинг 11).
1
2
3
4
5
6
7
#2017−05
SELECT ? i t e m _ l a b e l ? item ? d e v e l o p e r _ l a b e l ? d e v e l o p e r
WHERE
{
? item wdt : P31 wd : Q9143 # i n s t a n c e s o f programming l a n g u a g e
; r d f s : l a b e l ? item_label .
FILTER (LANG( ? i t e m _ l a b e l ) = " en " ) .
8
9
? item wdt : P178 ? d e v e l o p e r . # d e v e l o p e r
14
? d e v e l o p e r wdt : P31 wd : Q5 . # i n s t a n c e s o f human
? developer rdfs : label ? developer_label .
FILTER (LANG( ? d e v e l o p e r _ l a b e l ) = " ru " ) .
10
11
12
13
}
Листинг 11: Список людей, связанных с разработкой языков программирования, у
объектов которых заполнено поле "label" на русском языке
SPARQL-запрос, 133 записи.
Список литературы
1. Programming languages. Research in programming Wikidata [Programmirovaniye
Vikidannykh] // Russian Wikiversity, https://ru.wikiversity.org/wiki/%D0%9F%
D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%
D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%92%D0%B8%D0%
BA%D0%B8%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85/%D0%AF%
D0%B7%D1%8B%D0%BA%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%
80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%
BD%D0%B8%D1%8F (2017). Accessed 23 Feb 2017.
2. Object-oriented programming, http://bourabai.ru/alg/oop.htm.
3. I. Garshin, First object-oriented programming languages, http://www.garshin.ru/it/
computer-languages/object-pioners.html.
4. OO-programming,
http://ru.science.wikia.com/wiki/%D0%9E%D0%B1%D1%8A%
D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%
B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%
D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%
B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%
D0%B8%D0%B5.
15
Отзывы:
Авторизуйтесь, чтобы оставить отзыв