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-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 10:54 am
Powered by Dreamwidth Studios