http://kanasta.livejournal.com/130566.htmlЭто -- детская книжка про смерть. Она прекрасна как произведение искусства. Глупые люди зачем-то могут задумываться над тем, насколько она хороша в качестве детской книжки про смерть, зачем она нужна вообще, о чём думали авторы и переводчики... Это всё неважно, она прекрасна. Спасибо за ссылку, Зи
(
Read more... )
Вот правильная версия Y-combinator на шарпе 3.0: http://pastebin.com/f3310959a
Рекурсивность системы типов используется в объявлении
delegate Rec HalfCombinator(HalfCombinator p);
(а вообще она может использоваться в куче случаев, включая независимо открытый мной compile-time polymorphism)
А к тьюринг-полным системам типов у меня Подозрение. Дело вовсе не в потенциальной способности убить компилятор, нет. Я в последнее время придерживаюсь довольно радикальной (судя по тому, что я её ни в одном тексте ещё не встречал) точки зрения: система типов нужна для а) аннотации кода с целью облегчения reasoning программера о нём, б) для работы разнообразного интеллисенса (возможно это даже важнее, чем пункт а, потому что правильная IDE позволяет reason'ить о программе не прибегая к чтению кода). Всё остальное -- частичная проверка корректности, эффективность, -- не более чем приятные сайд-эффекты. Ну и вот. Слишком запутанная (запутанность часто путают с мощностью, но вообще они коррелируют) система типов мешает и программеру, и интеллисенсу.
As an example: в блоге Липперта когда-то увидел объяснение того, почему шарповый типовыводитель не H-M. Первая причина -- они не знали про H-M =) Вторая -- то, что у них получилось, позволяет мне понять, что не так с моей прогой (или наоборот, что с ней так), не запуская у себя в голове квадратично сложную (и уж тем более не тьюринг-полную) симуляцию типовыводителя.
Reply
... Телепаты и факиры телепают на большие расстояния ...
Reply
Я ж говорю в посте: я раньше думал, что их мало, а потом понял, что довольно много. Вот в С, насколько я понимаю, пойнтер в структуре на структуру того же типа реализован грязным хаком. Хотя я не уверен. По крайней мере, ни там, ни в паскале, нет рекурсивных типов функций (то есть попытка реализации лямбда-исчисления неизбежно идёт через тайпкасты -- или вот через рекурсивные структуры).
Насчёт IDE -- ну, эта. Как бы. Не хочу обидеть. Но прибавка в производительности перевешивает все расходы. С учётом того, что Microsoft Visual Studio Express бесплатна и вроде бы довольно нетребовательна... Интересно, кстати, можно ли её запустить под вайном?
Вообще я не знаю, у меня, после того как я попробовал пописать последний ICFPC на питоне (командно, естественно) создалось сильное ощущение, что если взять любого любителя динамически-типизованных языков и REPL как IDE, дать достаточно объёмное задание (для маленьких прожек питон вне конкуренции, например), посадить за нормальную IDE (вижуалстудию, я других таких не видел ещё) и легонько бить током каждый раз, когда он нажимает pageUp/pageDown больше двух раз подряд или эскейпится в шелл и запускает греп, вместо православных ctrl-space (autocomplete + список возможных в этом месте слов (с докстрингами!)) и F12 (go to definition), то он встанет из-за компа новым человеком.
Reply
Reply
Потому что если в C# забытое имя функции/метода/типа, порядок параметров, типы параметров, реализация в конце концов, находились двумя нажатиями клавиш без каких-либо побочных эффектов, то в питоне это полновесный кэш-промах, вытесняющий все мысли о текущем куске кода абсолютно нерелевантными размышлениями о том, в каком месте какого файла я (или кто-то другой!) её, функцию, записал и как бы туда побыстрей перейти. Ну и вот так: либо я держу в своей личной памяти вообще весь код своей проги, практически без упрощений, включая и код других четырёх человек, участвующих в разработке, либо постоянно тыкаюсь аки слепой кутёнок. Спасибо, нет, это за меня должен делать компьютер, а гигабайт его памяти нынче стоит меньше пары дней моей работы.
Reply
Про IDE: мне кажется, что подход IDE в принципе противоречит подходу
языков программирования. Вот представьте себе, что вы отправились на
машине времени на полвека назад и раздавили там бабочку. В результате
фортран и алгол так и остались сугубо вспомогательными средствами, зато
пышным цветом расцвели среды разработки. И в 2008 году на экранах было
бы что-то вроде:
; D := B**2 - 4*A*C
.ENTRY DISCR,0
MOVF B, R0
...
SUBF R1, R0
RET
Зато при наведении мышки на DISCR высвечивались бы все её упоминания
в проекте, на SUBF -- справка о времени её выполнения в зависимости от
наполнения конвейера, а на рамку -- зависимости по данным в графическом
виде. Весь этот кусок можно было бы свернуть в одну строчку-комментарий,
и в самых последних версиях в качестве бонуса этот комментарий можно
было бы оттранслировать в полный текст. Так вот: по-моему,
сегодняшние IDE ничем от этой принципиально не отличаются. Сложность
нужно прятать в нотацию, а не в графические инструменты.
P.S. Но какая альтернативка придумалась! Хоть садись пиши... ;-)
... Из развороченной операционной системы сочилась смазка ...
Reply
Leave a comment