Що нового у Світі програмування

article img {margin: 0 auto; border: 1px dashed # 999;}

[Переклад на російську мову - в кінці матеріалу.]

Напевно НЕ існує області знань, якій НЕ пророкують «теплову смерть» від відсутності розвитку. Програмування НЕ є віключенням: Досить часто можна почути Що все, Що можна Було прідуматі в програмуванні Вже є у Lisp/Fortran/Smalltalk (підкресліті Вибране) i нічого принципова нового з тих часів так І не Створено

Мої Улюблені контрпрікладі: прийому програмування, Що з `явилися порівняно недавно, при цьому Досить Прості та з Досить широким застосуванням, ціну

Ілюстрація до процесу розвитку індустрії програмування взята з блогу Григорія Громова: abcdefgh.livejournal. com/1461405.html

Давайте подівімось на них детальніше:

Відкладені блоки в послідовності виконан команд

Приклад - Конструкція scope в D або defer в Go. Основна Ідея полягає в тому, Що така одиниця комп'ютерної мови Як блок виконан, розглядається не просто Як послідовність команд з можлівістю аварійного вихід за допомога генерування віключень, альо Як більш складна Конструкція, з кошик Куди в процесі виконан можна додаваті команди, які Будуть віконуватіся Згода, після завершення основного блоку.

Таке структурування часто є більш Зручний Ніж традіційна обробка Виключно СИТУАЦІЙ, внаслідок простішої композіції. Класичний приклад - нехай в нас є Дві послідовні Операції Що потребують Відновлення стану після збою:

ЯКЩО ми захочемо Додати сюди третю операцію, треба буде її вставляті у Як Ще один Рівень вкладеності try/catch блоків. ЯКЩО ми захочемо, щоб in та out булі на одному рівні вкладеності, то виникнен необхідність дублювання коду:

На D в такій сітуації можна напісаті наступна:

тоб блок коду, маркованості Як scope (exit) буде віконуватіся при віході з блоку (також в D існує scope (failure) та scope (success), Що маркують виконан Тільки у випадка відповідно неуспішного або успішного завершені блоки.

В Go пріблізно з цією-ж Метою додана Конструкція defer:

Команди, Що задані в defer Будуть віконані напрікінці вихід спектр поліграфічних функції.

Як бачите, щоб Додати но одну операцію, Що потребує Відновлення, достатності просто допісаті її знизу. Тоб композиція виконан у даного випадка лінійна

Для подалі Знакомства з темою рекомендую

Staging

Українською staging, напевно кращє Всього буде перевести Як 'переміщення компіляції'. Ця Технологія дозволяє придати одному и тому ж виразі різне значення, в залежності від контексту, де ми цею виразі вікорістовуємо - тоб буквально перемістіті компіляцію в Інший контекст.

тоб Наступний виразі:

for (s s.name

може, в залежності від типу students компілюватіся Як в цикл, Що проходити по Колекції students, так и в Щось подібне до sql запиту:

select s.name from students s where s.course == 4

або виклик javascript функції:

Як це працює:

Ті з чітачів, хто працює з C #, напевно впізналі LINQ; в scala деяки узагальнення цього підходу буде вікорістовуватісь Як для роботи з базами даніх, так и в ряді бібліотек (від компіляції javascript до хостингу обчислення на графічному процесорі)

Для подалі Знакомства з темою рекомендую

Розкажіть мені Щось

А які технікі програмування ви відкрілі для себе за Останні декілька РОКІВ? ЯКЩО хочете доповісті Щось Цікаве - зв'яжіться Зі мною та пріходьте на Kyiv :: fprog, Що відбудеться 21-го липня 14:00 - 18:00 у конференц-залі кубік-центру на Шолуденка 3.

(Реєстрація: dou.ua/calendar/2040). Приміщення спонсує strikead (мій поточний Роботодавець, до речі організація з R & D центром у Кієві, де активно вікорістовується функціональний підхід) , а наповнення у форматі міні-баркампу організують Різні цікаві люди - точно буде Секція про Erlang Яку буде вести Лев Валкін (приводом для організації Події ставши йо пріїзд до Кіїва) можлива кож з дере рук можна буде почути кож про Використання Erlang в strikead від Олега Смірнова, обіцяє буті цікавою Секція про LISP-похідні (Всеволод Демкін розповість про ті, Чому вам Може НЕ підійті clojure Та як в Grammarly вікорістовують комбінацію Java та Common Lisp для AI задач), ще два слоти чекають на ваші тими.

Переклад на російську мову


Кожній дисципліні час від часу пророкують теплову смерть: програмування не виключення. Нерідко можна почути, що все, що можна було придумати вже придумано і є в Fortrane/Lisp-e/Smalltalk-e (потрібне підкреслити).

Два моїх улюблених контрпримера: техніки програмування, що з'явилися порівняно недавно, при цьому порівняно прості і широко застосовуються в індустрії - це

Наука на службі землеробства

ілюстрація до процесу розвитку індустрії програмування взята з блогу Григорія Громова: abcdefgh.livejournal. com/1461405.html

Розповімо про них детальніше:

Структурована послідовність виконання.

Приклад - це конструкція scopes в D або defer в Go.

Ідея полягає в тому, що потік виконання являє собою не просто послідовний потік команд з можливістю аварійного виходу c допомогою винятку, а більш складний об'єкт, в якому передбачена можливість додати блок коду для відкладеного виконання.

Таке структурування більш зручно для обробки помилок, ніж традиційні виключення, через більш простий композиції. Класичний приклад: нехай нам треба зробити дві послідовні операції, що вимагають відновлення:

Якщо ми захочемо додати третю операцію з відновленням, то доведеться вводити ще один рівень вкладеності. Якщо спробувати, що б дві операції були на одному рівні - виникає проблема дублювання коду:

На D це ж пишеться як:

Тобто блок коду, позначений scope (exit) виконується при виході з блоку. (В D визначені ще scope (failure) - виконується при невдалому завершенні і scope (success) - при вдалому).

На go приблизно для цієї-ж мети може використовуватися конструкція deferred:

Блоки коду, помічені як deferred, виконуються при виході з функції

Зауважимо, що додати ще одну операцію, що вимагає відновлення в обох випадку можна просто дописавши її знизу. Тобто в даному випадку композиція виконання лінійна.

Для подальшого ознайомлення з темою рекомендую

Staging

[На російську правильніше за все, напевно, перевести як «переміщення компіляції»]. Це технологія, що дозволяє надати одним і тим же виразом різний зміст - тобто буквально переорієнтувати компілятор на іншу мову в певному контексті

for (s s.name

може (в залежності від типів даних students) скомпілювати як в цикл, який проходить по колекції students, так і в щось на зразок sql запиту:

«Select s.name from students s where s.course == 4»

або javascript вираження

Як це працює:

Ті хто працює з С # ймовірно дізналися тут LINQ, в scala деякий узагальнення даного підходу буде застосовуватися як і для роботи з БД (slick) так і в цілому ряді бібліотек - від генерації javascript до хостингу обчислень на графічному процесорі

Рекомендую

Розкажіть щось

А які техніки ви відкрили для себе останнім часом? Якщо хочете розповісти і послухати що нового - приходьте на зустріч Kiev :: fprog в Києві 21-го липня з 14:00 до 18:00 в конференц-залі Кубик-центру на Шолуденка 3 (dou.ua/calendar/2040 - реєстрація). Приміщення спонсорує (мій поточний роботодавець, до речі, організація з R & D центром в Києві, де активно використовується функціональна підхід ), а наповнення у форматі міні-баркампа організують різні цікаві люди - точно буде секція про Erlang, котороую буде вести Лев Валкін (вобще-то приводом для організації події став його приїзд до Києва) також можливо з перших рук можна буде також почути про використання Erlang в strikead від Олега Смирнова, обіцяє бути цікавою секція про похідні Lisp-а: (Всеволод Дьомкін розповість про те, чому вам може не підійти clojure і як в Grammarly використовують комбінацію Java і Common Lisp для AI задач), ще два слота очікують ваших тем.

Опубліковано: 10/07/12 @ 01:00
Розділ Блоги

Рекомендуємо:

17 липня, Київ - Speakers ' Corner : " OSGI in banking environment " by Fulco Houkes
Ігри сьогодні : грати чи ні ?
Рунет кишить трояном
Прикрашаємо бічну панель превью
Новини інтернету одним абзацом