Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

Появился язык программирования Enterprise™ для создания «взрывающих рынки» программ

Новости Отредактировано

Это недетерминированный, «чрезмерно статически типизированный» язык, созданный под спрос HR-менеджеров в Enterprise-разработчиках.

29К открытий29К показов
Появился язык программирования Enterprise™ для создания «взрывающих рынки» программ

На 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.

Появился язык программирования Enterprise™ для создания «взрывающих рынки» программ 1

Для 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 похожи на тексты песен.

Следите за новыми постами
Следите за новыми постами по любимым темам
29К открытий29К показов