четверг, 1 декабря 2016 г.

EO vs Java

Java - это очень богатый язык программирования, он прошел многолетнюю эволюцию и совершенствование. В процессе своего развития в Java сообществе сложились определенные традиции, стандарты, позволяющие быстро вести разработку, но, как оказалось, часто превращающие дальнейшую поддержку кода в кошмар. 
"Мы понимаем свой код, только когда его пишем".




Первоначальное предложение Егора Бугаенко по реформированию Java (отказаться от процедурного мышления и двигаться в сторону большей объектно-ориентированности) столкнулось с огромным сопротивлением и инерцией Java комьюнити. Самым лучшим выходом стало создание языка EO, который призван решить вопрос прозрачности, читабельности, понятности (особенно чужого) кода. 

Другими словами, задача стоящая перед языком EO - семантическая: в принципе реорганизовать структуру создания программ из архитектурного подхода в более природное сообщество объектов.

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



нежелательные компоненты для EO:
  • static/class methods or attributes - статические методы; 
  • classes - классы (остаются только типы и объекты); 
  • implementation inheritance - наследование интерфейсов;
  • mutability - изменяемость объектов после создания;
  • NULL - пустые объекты, теперь объекты это не данные;
  • global variables/procedures - глобальные переменные и процедуры
  • reflection - рефлексия;
  • constants - константы;
  • type casting - приведение типов;
  • scalar types - cкалярный тип данных;
  • annotations - аннотации
  • unchecked exceptions -непроверяемые исключения;
  • operators - операторы;
  • flow control statements (forwhileif, etc)

желательные к включению в язык компоненты:
  • static analysis - статистический анализатор;
  • continuous integration - непрерывная интеграция;
  • build automation - автоматизация сборки;
  • aspects (AOP) - аспекты;
  • logging - логирование;
  • unit testing - unit теcты;
  • versioning - контроль версий;
  • concurrency - параллелизм;
  • object metadata - метаданные объекта;
  • persistence - сохранение объектов в базе данных в удобном виде;
  • transactions - транзакции;
  • licensing - лицензирование;
  • artifact repositories - хранилища артефактов;

компоненты под вопросом:
  • generics - дженерики;
  • garbage collection - сборщик мусора.





1 комментарий: