CTFE

Nov. 4th, 2014 03:36 pm
thedeemon: (office)
[personal profile] thedeemon
Jonathan Blow, автор игрушки Braid, замутил на ютюбе сперва пару выступлений о том, как ему осточертел С++ и не видно годных альтернатив для написания игрушек, и как было бы круто сделать свой язык для этих целей с блекджеком и т.д., а на днях уже раз и показал демку вырисовывающегося язычка. Работающий компилятор (пока что через генерацию Си, но это временно), работающие примеры. Пока что там почти ничего нет (ни объектов в том или ином виде, ни генериков), код примерно на уровне Go без GC, зато есть прикольная киллер-фича: весь язык целиком доступен в компайл-тайме (для этих целей сделана генерация байткода и его исполнение компилятором). Надо сделать безопасный printf? Сказал компилятору, что все вызовы printf проверяются вот этой функцией, а она проверяет соответствие агрументов форматной строке, отрабатывая в компайл-тайме. Надо проверить, что все переданные в функцию строки одной длины? Аналогично. Говорит, чем городить суперсложную систему типов, которая бы пыталась проверять такие инварианты, проще позволить проверять их кодом на том же языке, а систему типов оставить простой (ну, генериков добавить, конечно). Показал демку - простая игрушка на OpenGL со стрельбой по пришельцам. Потом ставит в коде строчку вроде

#assert( #run invaders() >= 10, "need to kill 10 invaders for this to compile")

запускает компилятор, вдруг открывается окошко и запускается игра. Если убьешь 10 пришельцев - скомпилируется успешно, нет - ошибка компиляции. :) Развлекуха.

В D тоже есть похожий compile time function execution, но все ж более ограниченный, некоторые вещи там недоступны и OpenGL не повызываешь.

Date: 2014-11-04 10:26 am (UTC)
From: [identity profile] astmatik.livejournal.com
может быть rust?

Date: 2014-11-04 10:36 am (UTC)
From: [identity profile] thedeemon.livejournal.com
В обсуждениях сторонники Rust считают, что этот язык лучше всего бы ему подошел. Сам он о Rust'е отозвался в том ключе, что слишком много внимания и умственных усилий программиста там тратится на обеспечение корректности работы с памятью. Он готов чуть больше времени провести в отладчике, зато намного меньше быть скованным ограничениями компилятора. Но при этом довольно много из Rust'а в свой язык копирует, в том числе концепцию owning pointers, которые освобождают память, когда сами погибают.

Date: 2014-11-04 02:21 pm (UTC)
From: [identity profile] qehgt.livejournal.com
Ну, там (в rust'е) есть unsafe блоки, в которых можно делать все низкоуровневые операции с указателями. То есть, если ему они очень нужны - они там есть.
Edited Date: 2014-11-04 02:21 pm (UTC)

Date: 2014-11-04 03:32 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Я так понимаю, unsafe там чтобы локально что-то похимичить, а на уровне параметров функций и структур данных все равно надо заботиться о лайфтаймах и типах указателей.

Date: 2014-11-04 07:48 pm (UTC)
From: [identity profile] swizard.livejournal.com
В русте есть вполне себе обычные "опасные" указатели, их можно свободно таскать в структурах и функциях.

unsafe-блока требует только их разыменование.

Date: 2014-11-05 01:20 am (UTC)
From: [identity profile] thedeemon.livejournal.com
А для более цивильных боксов и имеющихся контейнеров там можно свои аллокаторы использовать?

Date: 2014-11-05 09:48 am (UTC)
From: [identity profile] swizard.livejournal.com
Боксы там всего лишь для raii, поэтому никто не мешает выделять память под инстанс типа как угодно, хоть маллоком.

С имеющимися контейнерами я точно не могу сказать, скорее всего, прямого пути нет. Но в русте такие вещи вроде как наоборот принято делать: взять свой контейнер с нужным аллокатором, и тайпклассами (трейтами) придать ему требуемые свойства, чтобы стандартными алгоритмами можно было с ним работать. Если я не ошибаюсь, так же делается в хаскеле :)

Date: 2014-11-04 07:11 pm (UTC)
From: [identity profile] zeux.livejournal.com
Как мне кажется, есть еще два ключевых фактора по которым Blow не начал тупо использовать Rust:

- он не готов технически (в смысле еще не stable)
- в частности из-за п.1 еще непонятно работают ли lifetimes - т.е. насколько сложный код можно писать без динамической проверки ownership, насколько часто компилятор будет активно мешать писать код, насколько усложняется разработка multithreaded кода gamedev-style (adhoc) etc.

Date: 2014-11-04 07:53 pm (UTC)
From: [identity profile] swizard.livejournal.com
Как мне кажется, есть еще два ключевых фактора по которым Blow не начал тупо использовать Rust:

- он не готов технически (в смысле еще не stable)


Ага, это повод написать свой :)

Date: 2014-11-04 08:02 pm (UTC)
From: [identity profile] zeux.livejournal.com
Фатальный недостаток.

Date: 2014-11-06 03:24 am (UTC)
From: [identity profile] dmzlj.livejournal.com
Вообще все эти его "готов... больше... меньше" говорят нам о том, что чувак напишет очередной бессмысленный язык вроде Go, если напишет хоть что-нибудь заметное вообще.

Date: 2014-11-06 09:32 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Именно. Я от него чудес не ожидаю, и сам бы этот язык использовать не стал. Но просто прикольно.

Profile

thedeemon: (Default)
Dmitry Popov

April 2026

S M T W T F S
   1 234
567891011
12131415161718
19202122232425
2627282930  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 26th, 2026 09:15 am
Powered by Dreamwidth Studios