Я читав статтю тут: http://www.paulgraham.com/avg.html і частина про "парадокс" була особливо цікава. Як хтось, котрий головним чином кодує c ++, але має інший мову (в основному Haskell), я знаю кілька корисних речей на цих мовах, які важко повторити на c ++. Питання в основному стосується людей, які володіють як мовою c ++, так і якоюсь іншою мовою, чи є якась потужна мовна особливість чи ідіома, якою ви користуєтесь мовою, яку було б важко концептуалізувати чи реалізувати, якби ви писали лише на c ++?
Зокрема, ця цитата привернула мою увагу:
За індукцією, єдиними програмістами, які в змозі побачити всі відмінності у силі між різними мовами, є ті, хто розуміє найпотужнішу. (Це, мабуть, мав на увазі Ерік Реймонд про те, що Лісп зробить вас кращим програмістом.) Ви не можете довіряти думкам інших, через парадокс Блуба: вони задоволені якою мовою вони користуються, бо це диктує як вони думають про програми.
Якщо виявиться, що я еквівалент програміста "Blub" завдяки використанню c ++, то виникає таке питання: Чи є корисні поняття чи методи, з якими ви стикалися на інших мовах, які вам було б важко осмислити, якби у вас писав чи «думав» у c ++?
Наприклад, парадигма логічного програмування, що спостерігається на таких мовах, як Prolog і Mercury, може бути реалізована в c ++ за допомогою бібліотеки castor, але в кінцевому підсумку я вважаю, що концептуально я замислююсь з точки зору коду Prolog і перекладаю на еквівалент c ++ при використанні цього. Як спосіб розширити свої знання з програмування, я намагаюся з’ясувати, чи є інші подібні приклади корисних / потужних ідіом, які ефективніше виражаються іншими мовами, про які я, можливо, не знаю як розробник c ++. Інший приклад, який спадає на думку, - це макросистема в lisp, генерування програмного коду всередині програми, здається, має багато переваг для деяких проблем. Здається, це важко здійснити і продумати зсередини c ++.
Це питання не може бути дискусією "c ++ vs lisp" або будь-якою дискусією типу мовних воєн. Задаючи таке питання, це єдиний спосіб, коли я бачу можливість дізнатися про речі, про які я не знаю, я не знаю.
there are things that other languages can do that Lisp can't
- Навряд чи, оскільки Лісп є Тьюрінгом. Можливо, ви хотіли сказати, що в Ліспі є деякі речі, які не практично робити? Я можу сказати те саме про будь-яку мову програмування.