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 07:48 pm (UTC)
From: [identity profile] sleepy-drago.livejournal.com
opengl в компиляторе очень очень важен. как бы сказали циники "перезвоните нам когда ваша игра перевалит за 1млн проданных копий".

Date: 2014-11-05 01:16 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Ну, довольно близко:
"Jonathan Blow, the creator of Braid, a 2008 Microsoft-published game that was, arguably, the first mainstream indie success, also became a millionaire through his game. ... He funnelled the remainder of the money he earned—which he estimates to be around four million dollars—into his next game, The Witness, due for release later this year. "

Date: 2014-11-05 07:15 am (UTC)
From: [identity profile] sleepy-drago.livejournal.com
если человек хочет играть при компиляции он хочет странного. все кто продвигают типизацию ясное дело от такого быстро вращаются в гробах и это весело, но польза от этого мне неочевидна.
мне вот более интересно как он будет делать rich ui в 3д/VR ...

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

Date: 2014-11-05 09:11 am (UTC)
From: [identity profile] sleepy-drago.livejournal.com
>да не хочет он ...
3 раза ха. проблема теоретических людей в том что они упорно продолжают читать текст когда им наглядно показывают. Тут уже выросло поколение, которое "чистые" и тп функции распространяет на все программирование а не только на свой 1 компилятор. Как дать этим ребятам щелчок по носу? добавить ввод пользователя в компилятор. мол "порассуждайте теперь о чистоте, умники".

Date: 2014-11-05 09:14 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Нет никакого текста, только видео. Которые я смотрел, а вы нет.

Date: 2014-11-05 10:15 am (UTC)
From: [identity profile] sleepy-drago.livejournal.com
> Которые я смотрел, а вы нет.
виновен, однозначно. краткий транскрипт событий на реддите отбил всякое желание =)

Date: 2014-11-05 08:40 pm (UTC)
From: [identity profile] 109.livejournal.com
> польза - усиление типизации произвольными проверками

примерно как c# code contracts (тоже в compile-time выполняются, когда возможно), или есть существенные отличия?

Date: 2014-11-06 03:28 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Примерно, да. Только пока не похоже, чтобы он делал автоматический выбор фазы, - запускать код в компайл-тайме или в рантайме тут решает программист.

Date: 2014-11-05 08:47 pm (UTC)
From: [identity profile] udpn.livejournal.com
А вот здесь вы не правы. Допустим, есть оптимизации, которые нам хотелось бы, чтобы обязательно присутствовали в релизе, но компилятор не способен их все вывести. Для этого было бы приятно сделать запросы к пользователю в виде удобного такого мастера, где программист ответил бы, как именно это компилировать, а мастер сохранил бы ответы в файл для будущего использования. Т.е. во время компиляции для таких штук уже нужны гуи и фс. Если гуи на опенгле, то, блин, чо делать, всё равно в компайл-тайме запускать надо.

Date: 2014-11-05 10:03 pm (UTC)
From: [identity profile] sleepy-drago.livejournal.com
для этого ... не обязательно все делать через опенЖ. достаточно выдать ручные тормоз для управления оптимизацией. например прагму инлайнинга в месте вызова. и тд и тп...

Date: 2014-11-06 02:04 pm (UTC)
From: [identity profile] udpn.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 03:18 pm
Powered by Dreamwidth Studios