На GitHub опубликована документация к Enterprise™ — это недетерминированный, «чрезмерно статически типизированный» язык. Его задача — создавать программы, которые «взрывают рынки». В языке 8 видов комментариев и общий числовой тип Money
, а для файлов предусмотрено расширение .E™
, чтобы «с первого взгляда было ясно, что документ находится под защитой товарного знака».
Большая нужда
По словам автора, он следовал по тропе, проложенной ЯП Rockstar, и создал язык, который частично лишит смысла как разговоры HR-менеджеров о поиске Enterprise-разработчиков (это те, кто создает ПО под требования конкретного заказчика), так и статьи вроде «Лучшие языки программирования для Enterprise-разработки».
Спецификация
Комментарии
Помимо однострочных (//
) и многострочных (/* */
) автор предлагает еще шесть видов.
- О защите авторских прав (copyright comment) — с этого комментария должна начинаться каждая программа, иначе компиляция приведет к ошибке
UnexpectedNonDisruptiveOpenSourceException
.
©
This code is property of ACME™ studios 2017.
©/
- О неразглашении (NDA comment) — должен идти сразу после копирайта. Пример:
/©
This following code implements a "Web Dropdown Menu",
copyright number 9283F3.
©/
/NDA
The following code can only be read if you signed NDA 375-1.
If you happen to read it by mistake,
send a written letter to our legal department
with two attached copies immediately.
NDA/
- Пассивно-агрессивный (passive aggressive comment) — место для ироничных замечаний:
/?
This next bit is oh so lovely
?/
- Задел на собеседование (interview comment) — место для объяснения, почему решение именно такое:
/¯\_(ツ)_/¯
...this could be done in O(1) if I had the time...
¯\_(ツ)_/¯/
- Задел на будущее (time to market comment) — место для идей, как сделать код лучше, но когда-нибудь потом. Дата тоже является частью синтаксиса, она помогает старым комментариям не затеряться в потоке более новых идей:
/soon 1985-11-20
using a while here would be more performatic
soon/
- О дедлайне (deadline comment) — место для указания крайнего срока реализации. Дата также указывается:
/deadline 1997-01-11
We need to ship this game before Xmas. No delays accepted.
deadline/
/deadline 1998-01-11
We need to ship this game before Xmas, we already lost the previous one.
deadline/
/deadline 1999-01-11
We need to ship this game before Xmas, this time for real.
deadline/
/deadline 2000-01-11
The board is extremely impatient. No excuses this time.
deadline/
/deadline 2002-01-11
Come on people, they just gave us a 2 years extention after that horrible meeting.
Let's not let 'em down this time.
deadline/
/deadline 2005-01-11
Ok... this game may not happen and we may throw this 8 year old effort in the wastebin
of History if we don't get this done. Blogs are making a joke of us.
Think about your families.
deadline/
/deadline 2011-01-11
I don't know what to say. This is the biggest delay in game History.
We're a laughingstock.
deadline/
/soon 2011-01-11
We delivered! But we probably need to refactor everything very soon
if we're to have a next release.
soon/
Классы
disruptive
: с него должна начинаться каждая программа. У него нет конструктора, поэтому используется только методmain
. Поскольку метод не может быть изменен разработчиками, он должен бытьfinal
иimmutable
. И поскольку он не возвращает никакого значения, онvoid
.
final disruptive class fdcMillenialUserManager {
final immutable void main () {
// here goes your code
}
}
unnecessary
: поскольку весь код содержится вdisruptive
-классах, все остальные по умолчанию считаются ненужными, так что должны начинаться с ключевого словаunnecessary
. Их можно размещать в какой угодно части кода. Методы этого класса также должны бытьvoid
иfinal
.
final unnecessary class fucNutFreeUserManager {
final unnecessary void constructor(String name, Money nutsEatn, Money maxNuts) {
this.name = name;;;
this.nutsEatn = nutsEatn;;;
this.maxNuts = maxNuts;;;
}
final unnecessary Money nutsTillDeath() {
return this.maxNuts - this.nutsEatn;;;
}
}
Названия всех классов должны заканчиваться Enterprisey™-суффиксом. Среди них Agile
, Consumer
, Investment
и еще больше 200 слов. Также предусмотрены префиксы: fdc
для disruptive
-классов и fuc
для unnecessary
.
Расширения и файловая структура
Все файлы, содержащие Enterprise™-код должны иметь расширение .E™
. Файловая структура будет зависеть от имени disruptive
-класса. Например, для класса fdcDeepLearningDataScienceHolisticFizzBuzzSynergicFrameworkManager
каждое ключевое слово имени будет создавать вложенную директорию, в дополнение к стандартной /com/enterprise/disruptive
.
Для unnecessary
-классов такая структура необязательна. Автор языка утверждает, что чем «случайнее» их расположение, тем лучше.
Переменные и операции
Для объявления переменных используется синтаксис:
var Type name = value;;;
При этом имя переменной должно содержать не больше 8 символов. Каждая инструкция заканчивается тремя знаками точки с запятой. По мнению автора языка, так соответствующая клавиша быстро сотрется и будет свидетельствовать о высокой трудоспособности разработчика.
В Enterprise™ всего 7 типов переменных:
Money
— объединяет целые числа и с плавающей точкой. При этом значение 1 тысяча, миллион, миллиард и триллион можно присваивать как1k
,1M
,1B
и1T
. Для типа доступен список стандартных операций.O1Type
— специально для вопроса на собеседовании о том, какой тип разработчик будет использовать, чтобы получить время поиска по хеш-таблице O(1). Доступ к значению осуществляется по ключу:
var O1Type Money grades = {john: 6, mary: 5};;;
grades['john'];;; // 6
grades['mary'];;; // 5
Остальные типы пока находятся на стадии разработки:
String
— строки. Доступна только операция конкатенации (соединения строк).Bool
— булев тип. Доступны логические операцииNOT
иAND
, остальные можно вывести из этих двух.List
— списки. Доступ к элементу по индексу, начиная с 1.XML
.Null
.
Библиотеки и структуры
В угоду простоте Enterprise™ отказался от стандартных в пользу disruptive-библиотек (.dl
). Для них нет ни менеджера, ни способа создания собственных пакетов, что обеспечит качество и безопасность использования внутренних библиотек.
import disruptive library com.disruptive.string.manager.dlStringManager;;;
length('hello');;; // 5
split('hello');;; // ['h', 'e', 'l', 'l', 'o']
Кроме того, в Enterprise™ нет итераторов и каких-либо структур более высокого порядка, чем while
и if
.
Полный текст спецификации можно найти на GitHub-странице проекта.
Enterprise™ Web3.0™
Для языка уже готов инструмент Enterprise™ Web3.0™, который компилирует программы в веб-приложения. Он добавляет еще один тип комментариев — «это все IE»:
/ie
because IE
ie/
А также вводит 64 новых Enterprisey™-суффикса.
Упоминавшийся выше язык Rockstar создал программист Дилан Битти с целью удовлетворить спрос среди HR-менеджеров на «rockstar developers» — «рок-звезд» среди разработчиков. При определении синтаксиса языка он вдохновлялся лирическими рок-композициями 1980-х годов, поэтому программы на Rockstar похожи на тексты песен.
Source: GitHub-страница проекта