У Python 💻 десь в районі версії 3.6 додали так звані f-рядки з інлайн-інтерполяцією:
f"a + b = {a + b}"
# замість
"a + b = {}".format(a + b)Дуже зручно. Хоча знаходяться унікуми, що використовують їх тупо для усього, зокрема для формування запитів до БД з включенням шматків, що прийшли від користувачів — привіт, SQL-інʼєкції.
Fear no more: до 3.14 вирішили додати t-рядки! Літерали на вигляд такі самі, але насправді це не
str, а string.templatelib.Template:template = t"a + b = {a + b}"
assert isinstance(template, Template)Нащо це все? Власне, саме для того, щоб не отримувати на вихід готовий рядок. Натомість ви отримуєте купу статичних шматків рядка + низку інтерполяцій і можете з ними щось зробити до формування фінального
str (наприклад, екранувати потенційно небезпечне). Фактично, це ті ж шаблонні рядки, які вже є в 💻.Для останнього, до речі, багацько років (на доволі високому Stage 2) висіла пропозиція від типців з Блумберга додати в мову «глибоко незмінні структури даних» —
Record і Tuple. Нагадую, що зараз в 💻 є тільки вельми мінливі Object і Array. Якщо ви мріяли про value types у джаваскрипті, то годі — декілька тижнів тому пропозицію скасували, бо домовитися не змогли, зацікавлених виявилося не так і багато тощо.У спільноті 💻 тим часом ТРАГЕДІЯ! Компанія AdaCore провела презентацію нових фічей в їхньому компіляторі GNAT Pro, де зокрема розповіла, що додала до мови ООП-класи (а ще підтримку Rust, але то інша історія). Взагалі-то в Ada і до того ООП давно було (з 1995), але реалізувалося через так звані теґовані типи:
package Example is
type Base_Class is tagged null record;
procedure Print (Self : Base_Class);
type Derived_Class is new Base_Class with record
A : Integer; -- додаємо нове поле
end record;
overriding procedure Print (Self : Derived_Class);
end Example;
Тут процедури, що обʼявлені в тому ж скоупі й приймають першим параметром відповідний тип, стають фактично «методами». Однак для тих, хто прийшов з, боже збав, C++ та інших схожих мов, такий підхід був невтямки. Тому віднині можна буде створювати класи отак:
package Example is
type Base_Class is class
procedure Print (Self : Base_Class);
end;
end Example;
Зʼявилося ключове слово
class, методи оголошуються прямо всередині відповідного блока, також можна private зробити прям там же. Багатьом це прийшлося не до вподоби, мені включно. Особисто я просто не бачу в цьому сенсу, бо й до того було збс.Прикол же тут глибше на ділі. Ada — це ISO-стандарт, тож мова нікому не належить. Але єдиний живий компілятор GNAT підтримується компанією AdaCore, тому 99% штук, які зʼявляються там, врешті потрапляють до стандарту. Такі справи.
Ну й трохи про ліспи. Нещодавно я вже розповідав про Janet 👩🦰 — мову, дуже схожу на Clojure 💻, яка компілиться в сішку. Взагалі кложа наче друге дихання ліспам відкрила, бо вона проста, елегантна й прикольна. Якби ж ще не JVM поперек горла… Якось так подумали й автори Janet у свій час. А з ними автори ще мінімум штук пʼяти інших варіацій, і це тільки ті, що мені траплялися.
Однією з таких варіацій є Jank, яка вже на C++ базується, а не на сішці. Так-от вони днями анонсували «безшовний інтероп» з плюсами, тобто можливість прямо з джанка створювати й працювати з плюсовими обʼєктами. Скажу чесно, я зацікавився 🤤 Прямий плюсовий інтероп (не через C) — це одна з фічей, яка раніше мене зацікавила у Swift 🕊. Якщо у цього ліспа щось таке вийде, то я навіть готовий почати називати їх не джанк, а дженк.
Може ще щось цікаве було, та зараз вже не згадаю. Тож наразі все.