Cіпласпластик: post #519 — TG.ME

Так сталося, що я вже другий тиждень пишу бекенд системи на Java 💻. До того писав фронтенд на 🕸 + React ⚛️ — це не QML, звісно, але загалом жити можна. А тут в мене тепер дефолтний набір зі Spring Boot та Hibernate. І шо я хочу сказати…

Тяжко! По-перше, Java як мова не альо — прям тухлувато якось. Вона явно стала краща відтоді, як я нею писав востаннє 15 років тому, але на цьому ґрунті нічого хорошого вже не виросте. По-друге, надлишкова інженерія в джаві відчувається явно інакше, аніж в
💻. Я впевнений, що це все не зʼявилося без причини. Певно хтось колись писав систему, набив собі купу синців і сказав: «Треба більше рівнів абстракції». І стало більше рівнів. Ну тобто ми показуємо табличку з БД майже один до одного, але тут repositories, entities, DTOs, mappers й оце все — дуже швидко відчуваєш на собі слово enterprise. Мабуть, і в книжках так радять робити.

Але біс із ним. Справжня ж проблема — це анотації! О-о-о, тут цілий окремий світ. Джаву вивчити легко, але її самої замало. Тут на анотаціях фактично свій eDSL, а точніше навіть декілька — по одному на бібліотеку: всі ці @Autowired, @Retention, @OneToMany, @JoinTable, @Mapper, @MappingTarget і ще три десятки. Нарешті я втямив, що мали на увазі люди, з якими я спілкувався про недоліки предметно-орієнтованих мов.

Річ у тім, що взагалі-то я люблю eDSL! (Якщо хтось не знає: eDSL — це фактично якась зазвичай вузькоспрямована мова, побудована засобами іншої). І люблю мови, в котрих їх можна робити: Ruby
♦️ той же, REBOL звісно, та навіть у Python 💻 я декораторами різне цікаве мутив. Це все чудово працює в одному з трьох випадків:

1. Ти створюєш це сам просто зараз.
2. Хтось поряд із тобою створює eDSL просто зараз, а ти його використовуєш.
3. Це стандарт де-факто.

У решті ж випадків це суцільний біль. Мало знати хостову мову: ти дивишся на конструкцію і розумієш, що вона значить синтаксично, але не семантично. Доводиться вчити ще декілька вбудованих мов. Я вочевидь цього поки не зробив, тому відкриваю файл, бачу там один порожній інтерфейс з пачкою анотацій — і нічого не розумію. Відкриваю інший — там те саме. Просто купа напівпорожніх файлів, їй-богу.

А компілятор з цього генерує цілі класи з методами, сам автоматично розрулює звʼязки між ними, щось там ще робить. Ти потім це запускаєш, а воно і до бази якось конектиться, і обʼєкти один в одного переганяє. Жодних конструкторів тобі з прокиданням чогось кудись. Чистенько. Але забагато магії
⚡️

Класно, коли магії є трошки — додає цікавинку в розробку. Але не коли ти з 20-річним досвідом не можеш збагнути звʼязки між класами
😅 Ну, воно-то зрозуміло, що я це не тямлю, бо я ніколи з цим не працював досі. А от коли сіньор-джавісти кажуть, що не знають, як воно працює, то це трохи підозріло.

Цікаво, чи станеться щось подібне з C++, враховуючи, що в цій мові тепер є reflection. На мою думку, навряд чи. Піду, короч, пірнати у ваш Spring, а ви поки можете глянути на чиюсь стару бібліотеку для C++, яка дозволяє писати отак (так-так, це eDSL):
using namespace xsmell;

document doc =
_
<html>_
<head>_
<title>"XSMELL demo"<!title>_
<!head>_
<body>_
<p>"Yesssssssssssssssss!"<!p>_
<img .src("chucknorris.png") .alt("sneezing eyes open")>_ <!img>_
<!body>_
<!html>
_;

std::cout << doc << '\n';
😁12💯8💊1
June 24, 2026 1K 34 6