Несмотря на отсутствие мейнстрима, я обнаружил, что D, а именно версия 2, предоставляет некоторые интересные уроки, которые нельзя легко выучить где-либо еще. Это более серьезная попытка, чем любой другой язык, который я могу придумать, чтобы заставить императивное / процедурное, объектно-ориентированное и функциональное программирование хорошо играть друг с другом и позволить программированию на очень низком уровне (указатели, ручное управление памятью, inline ассемблер) и очень высокий уровень (общее и генеративное программирование) на одном языке.
Это ценно, потому что вместо того, чтобы рассматривать парадигмы изолированно, как если бы они существовали в разных вселенных, вы можете видеть лес сквозь деревья. Вы можете увидеть сильные и слабые стороны каждой парадигмы на детальном уровне, когда будете смешивать их в свои программы. Вы увидите, как основные аспекты парадигм могут быть реализованы в библиотеках с точки зрения низкоуровневого кода. Модуль стандартной библиотеки std.algorithm реализует важные примитивы функционального программирования, но представляет собой простой, простой D-код без всякой магии. Так же, std.rangeреализует ленивую оценку, но опять-таки довольно простой D-код. Вы понимаете затраты, связанные с примитивами каждой парадигмы, потому что черты D, близкие к металлическим, делают то, что на самом деле происходит под капотом, относительно прозрачным. Вы даже можете написать что-то низкоуровневое, похожее на C, а затем создать симпатичный, высокоуровневый интерфейс к нему на том же языке, не мешая волшебным слоям клея.