(Untitled)

Mar 07, 2008 23:22

http://kanasta.livejournal.com/130566.htmlЭто -- детская книжка про смерть. Она прекрасна как произведение искусства. Глупые люди зачем-то могут задумываться над тем, насколько она хороша в качестве детской книжки про смерть, зачем она нужна вообще, о чём думали авторы и переводчики... Это всё неважно, она прекрасна. Спасибо за ссылку, Зи ( Read more... )

Leave a comment

faceted_jacinth August 28 2008, 20:14:57 UTC
Нет, не тьюринг-полные.

Вот правильная версия 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

slobin August 28 2008, 20:31:24 UTC
Тогда я не понимаю, почему обычная со времён Виртовского Паскаля структура, содержащая поле со ссылкой на себя, не является рекурсивным типом. Ладно, ещё подумаю, может, пойму. Про reasoning согласен (и автору Qi ровно про это писал). IDE не люблю в принципе, как класс, но, вероятно, это мои личные трудности. Основная причина: они провоцируют писать код, про который без них reason'ить нельзя вообще никак. А это, в свою очередь, не нравится по двум причинам: (1) техническая: привязка к одной конкретной среде (2) экономическая: невозможно учиться программировать, или быть программистом-любителем, не имея крутой тачки.

... Телепаты и факиры телепают на большие расстояния ...

Reply

faceted_jacinth August 28 2008, 20:45:06 UTC
Является, конечно.
Я ж говорю в посте: я раньше думал, что их мало, а потом понял, что довольно много. Вот в С, насколько я понимаю, пойнтер в структуре на структуру того же типа реализован грязным хаком. Хотя я не уверен. По крайней мере, ни там, ни в паскале, нет рекурсивных типов функций (то есть попытка реализации лямбда-исчисления неизбежно идёт через тайпкасты -- или вот через рекурсивные структуры).

Насчёт IDE -- ну, эта. Как бы. Не хочу обидеть. Но прибавка в производительности перевешивает все расходы. С учётом того, что Microsoft Visual Studio Express бесплатна и вроде бы довольно нетребовательна... Интересно, кстати, можно ли её запустить под вайном?

Вообще я не знаю, у меня, после того как я попробовал пописать последний ICFPC на питоне (командно, естественно) создалось сильное ощущение, что если взять любого любителя динамически-типизованных языков и REPL как IDE, дать достаточно объёмное задание (для маленьких прожек питон вне конкуренции, например), посадить за нормальную IDE (вижуалстудию, я других таких не видел ещё) и легонько бить током каждый раз, когда он нажимает pageUp/pageDown больше двух раз подряд или эскейпится в шелл и запускает греп, вместо православных ctrl-space (autocomplete + список возможных в этом месте слов (с докстрингами!)) и F12 (go to definition), то он встанет из-за компа новым человеком.

Reply

faceted_jacinth August 28 2008, 20:48:22 UTC
Бить током, в смысле, не для кондиционирования, а для изживания неэффективной (правда!) привычки.

Reply

faceted_jacinth August 28 2008, 21:22:46 UTC
Поясню про питон и откуда вообще это всё взялось: хорошее познаётся в сравнении со своим отсутствием. У меня в результате этого трёхдневного кодфеста сложилось абсолютно чёткое ощущение, что как раз наоборот, это у меня отрезали по два пальца на каждой руке (те, которыми я нажимал любимые шорткаты, альтернативы которым в Эклипсе (под которой кодили) не то, чтобы совсем нет, но нет в 95% случаев (SlickEdit, триальную версию которого я попробовал недавно, опускает цифру до 91% (warning! высосано из пальца!) поэтому тратить триста баксов на полную версию нет ни малейшего желания), что ещё хуже, чем если бы не было вообще) и начали проводить истинно бесчеловечный эксперимент по тренировке долговременной памяти.

Потому что если в C# забытое имя функции/метода/типа, порядок параметров, типы параметров, реализация в конце концов, находились двумя нажатиями клавиш без каких-либо побочных эффектов, то в питоне это полновесный кэш-промах, вытесняющий все мысли о текущем куске кода абсолютно нерелевантными размышлениями о том, в каком месте какого файла я (или кто-то другой!) её, функцию, записал и как бы туда побыстрей перейти. Ну и вот так: либо я держу в своей личной памяти вообще весь код своей проги, практически без упрощений, включая и код других четырёх человек, участвующих в разработке, либо постоянно тыкаюсь аки слепой кутёнок. Спасибо, нет, это за меня должен делать компьютер, а гигабайт его памяти нынче стоит меньше пары дней моей работы.

Reply

slobin August 28 2008, 22:47:20 UTC
Следующее -- не совсем ответ на эту последнюю реплику. Я это придумал, пока ходил гулять по окрестностям проветривать мозги. Но пусть сюда приклеится, не важно.

Про 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

Up