Представляю вашему вниманию парадигму HumanSpeak — словесно свободную кроссплатформенную концепцию API.
Почему?
- Потому что надоело огромное количество языков и библиотек, которые реализуют одни и те же функции, но с разными наименованиями.
- Потому что надоело лезть в справочник по языку, который используешь не первый месяц, чтобы вспомнить как называется функция, назначение которой очевидно.
Смысл
Идея возникла в процессе знакомства с JQuery. Как известно, доступ к элементам разметки осуществляется, в JQuery, через функцию $()
, например:
$("edit_field")
— получение доступа к элементу с идентификатором edit_field.
Однако, доступ таким образом(через единую функцию-обсервер) можно получать(теоретически, не в JQuery) не только к структуре, но также и к функциям!
Т.о. введя например: $("string length")
, можно получить доступ к функции нахождения длины строки.
Данный способ доступа можно представить как единый кросс-языковый API. Который поможет избавить программиста от необходимости изучения языко-специфических наименований при переходе с одного языка на другой.
Пример №1
Достаточно запомнить $("string length")
независимо от языка.
Вот список наименований одной единственной функции:
OCaml: string_length("string") Python: len("string") C: strlen("string") Pascal: length('string') Lua: string.length("string") Tcl: string length "string"
Пример с длиной строки прост, т.к. меняться в названии там почти нечему. Но все равно есть разница.
Пример №2
Запомнить нужно только одно:
$("string find char","SAMPLE STRING!!!","T")
Вместо:
OCaml: string.index("STR","T") Python: "STR".index("T") C: strchr("STR",'T') Pascal: pos('STR','T') Lua: string.char("STR","T") Tcl: string index "STR" "T"
Некоторые справочники по языкам(строковые функции)
TCL: tmml.sourceforge.net/doc/tcl/string.html
C: www.cplusplus.com/reference/cstring/
OCaml: caml.inria.fr/pub/docs/manual-ocaml/libref/String.html
Pascal: www.freepascal.org/docs-html/rtl/system/stringfunctions.html
Некоторые выводы
Т.о. функция-обсервер выполняет вспомогательную функцию(основная цель — упрощение вспоминания, обеспечение читаемости).
Это не панацея для языковых полиглотов. Потому, что от языка к языку, API иногда упрощается(синтаксический сахар), напр: извлечение подстроки в Python( s[5:] ) — гораздо проще и быстрее чем писать $("extract substring")
. Однако упор на вспоминаемость и читаемость. Гиппотетически, не нужно помнить КАК извлечь подстроку. Наименования функций всегда есть в памяти, потому они выражатся в наиболее естественной для человека форме: $("извлечь подстроку")
.
Возможность использования локализованных наименований — отдельная тема.
Какие проблемы решает?
Проблема множества разных языков далеко не только в наименовании, но зачастую и в разном принципе работы функций(напр. сравнения строк(вспомните strcmp в Си и функцию сравнения строк в других языках)).
Что мы достигнем?
- Стандартные функции примут единое кросс-языковое наименование.
- Стандартные функции будут иметь единый принцип работы.
Т.о. порог вхождения для языков снизится, и на первый план выйдут именно особенности языков программирования в чистейшем их воплощении — скобки и апострофы станут не массовкой, а актерами с главной ролью — это обеспечит их эволюцию и конкуренцию. Если сравнить синтаксис с воздухом, то раньше им просто дышали, но теперь его можно будет жевать, синтаксические особенности языков станут по настоящему ощутимыми, т.к. набор функций одинаков.
Идея в том, что данный API должен быть реализован на всех общеизвестных языках.
Далее возможно рассмотрение способов реализации как в скриптовых, так и в системных(структурных) языках(через единую функцию с переменным числом аргументов и кучу подфункций через switch).
*под стандартными функциями здесь понимается набор функций наиболее часто используемых и общих для большинства общеизвестных языков, возможность реализации которых не зависит от реализации конкретной программной платформы.
ссылка на оригинал статьи http://habrahabr.ru/post/231283/
Добавить комментарий