Что означает «мощный» при обсуждении языков программирования? - PullRequest
28 голосов
/ 12 июня 2010

В контексте обсуждения / сравнения языка программирования, что означает термин "мощность"?

Имеет ли он четко определенный смысл? Даже плохо определенное значение?

Скажите, если кто-то говорит "язык X более мощный, чем язык Y" или задает то же самое, что и вопрос, что они означают - или какую информацию они пытаются выяснить?

Ответы [ 14 ]

29 голосов
/ 12 июня 2010

Не имеет четко определенного значения.В обсуждениях такого типа «язык X более мощный, чем язык Y» обычно означает чуть больше, чем «я люблю язык X больше, чем язык Y».На другом конце спектра у вас также обычно есть кто-то, кто знает, как любой язык, полный по Тьюрингу, может выполнять те же задачи, что и любой другой язык, полный по Тьюрингу, так что ни один не является строго более мощным, чем другой.*

Я думаю, что хороший смысл для этого - выразительность.Когда язык очень выразителен, это означает, что для выражения концепций требуется меньше кода.Для меня это означает не только то, что вам нужно писать меньше кода для выполнения тех же задач, но и то, что код легко читается людьми.Конечно, как правило (в определенной степени), меньшее количество строк кода для чтения облегчает задачу чтения и понимания для людей.

Наличие «мощной» стандартной библиотеки вступает в игру здесь в том же духе.Если язык снабжен полными и полными библиотеками, тогда идиоматический код на этом языке сможет извлечь выгоду из существующего библиотечного кода и не должен повторять или заново изобретать общие функции в коде приложения.Конечным результатом, опять же, является необходимость писать и читать меньше кода для выполнения тех же задач.

Я продолжаю говорить «в общем» и «в точку», потому что, как только язык становится слишком кратким, он получает большелюдям трудно расшифровать.Я полагаю, что в этом крайнем случае язык все еще можно считать «более мощным» (или даже «слишком мощным»).Поэтому я полагаю, что моя личная интерпретация «мощного» включает в себя также некоторые аспекты «полезного» и «читабельного».

22 голосов
/ 12 июня 2010

C является мощным, потому что это низкий уровень и дает вам доступ к оборудованию. Python мощный, потому что вы можете быстро создавать прототипы. Lisp мощен, потому что его REPL дает вам фантастические возможности отладки. SQL мощен, потому что вы говорите, что хотите, и DMBS найдет лучший способ сделать это для вас. Haskell является мощным, потому что каждая функция может быть проверена отдельно. C ++ является мощным, потому что он имеет в десять раз больше синтаксических конструкций, которые когда-либо нужны или используются любым человеком APL является мощным, поскольку он может сжать программу из десяти экранов в десять символов. Черт, КОБОЛ является мощным, потому что ... почему еще все банки будут использовать его? :)

11 голосов
/ 12 июня 2010

«Мощный» не имеет реального технического значения, но многие люди сделали предложения.

Пара самых интересных:

  • Пол Грэм хочет назвать язык «более мощным», если вы можете писать одни и те же программы с меньшим количеством строк кода (или какой-то другой разумной, разумной мерой размера программы).

  • Матиас Феллайзен написал очень серьезное теоретическое исследование под названием О выразительной силе языка программирования .

Как человек, который знает и использует много языков программирования, я считаю, что между языками существуют реальные различия, и что «мощь» может быть удобным сокращением для описания способов, которыми один язык может быть лучше другого. Тем не менее, всякий раз, когда я слышу дискуссию или утверждаю, что один язык более мощный, чем другой, я склонен крепко держать одну руку на своем кошельке.

8 голосов
/ 12 июня 2010

Единственный значимый способ описать «силу» в языке программирования - «могу делать то, что мне нужно, с наименьшим количеством ресурсов», где «ресурсы» определяется как «любые расходы, которые я бы предпочел не платить» и мог бы, Таким образом, время разработки, время процессора, объем памяти, деньги и т. д.

Таким образом, определение "сила" в основном чисто субъективное и лишено смысла в любом объективном обсуждении.

6 голосов
/ 12 июня 2010

Мощный означает «мощный». «Сила» - это то, что увеличивает вашу способность делать вещи. «Вещи» различаются по форме, размеру и другим вещам. Говоря в общих чертах, «мощный» применительно к языку программирования означает, что он помогает вам выполнять свои задачи быстро и эффективно.

Это делает "мощные" несколько четкими, но не постоянными для разных доменов. Могучий язык в одной области может быть вредным для другой, например. C очень мощный, если вы хотите заниматься программированием на системном уровне, поскольку он дает вам прямой доступ к машине, аппаратным средствам и структурам, которые позволяют писать код гораздо быстрее, чем при сборке. Компиляторы C также создают жесткий код, который работает быстро. Однако, как только вы перейдете к веб-приложениям, C может стать очень «неэффективным» и калечащим, поскольку так много усилий требуется, чтобы что-то запустить и запустить, и вам приходится беспокоиться о множестве посторонних деталей, таких как память и т. Д.

Иногда языки являются «мощными» в нескольких доменах. Это дает им общий «мощный» тег (или значок, поскольку здесь они находятся на SO). PG утверждает, что с LISP это так. Это может быть правдой или не может быть.

В конце концов, «мощный» - это загруженное слово, поэтому вы должны оценить, кто это говорит, почему он это говорит и что это значит для вашей работы.

4 голосов
/ 12 июня 2010

Как правило, есть два разных значения:

  • Выразительный , то есть код, как правило, очень короткий и понятный
  • Низкий уровень , что означает, что вы имеете очень детальный контроль над оборудованием.

Для большинства языков эти два определения находятся на противоположных концах спектра: Python очень выразительный, но не очень низкий уровень; C очень низкий уровень, но не очень выразительный. В зависимости от того, какое определение вы выберете, любой язык будет мощный или не мощный .

4 голосов
/ 12 июня 2010

Есть только два значения, о которых беспокоятся люди:

«Мощный» в смысле «требует меньше ресурсов (времени, денег, программистов, LOC и т. Д.) Для достижения того же / лучшего результата», а «мощный» в смысле «способен делать широкий Круг задач ».

Некоторые языки чрезвычайно ресурсоэффективны для небольшого диапазона задач. Другие не столь ресурсоэффективны, но могут применяться для широкого круга задач (например, C, который часто используется при разработке ОС, создании компиляторов и библиотек времени выполнения и работе с микроконтроллерами).

Какое из этих двух значений кто-то имеет в виду, когда использует термин «мощный», зависит от контекста (и даже тогда не всегда ясно). Действительно, часто это немного и того, и другого.

2 голосов
/ 19 октября 2010

Я думаю, что, возможно, по совпадению, физическое определение мощности уместно здесь: «Скорость, с которой выполняется работа».

Конечно, тостер не очень быстро выполняет работу по тушению пожаров. Точно так же мощь языка программирования не универсальна, но специфична для области или задачи, к которой он применяется. C - мощный язык для написания драйверов устройств или реализации языков более высокого уровня; Python - мощный язык для написания приложений общего назначения; XPath - это мощный язык для написания запросов на структурированных наборах данных.

Таким образом, с учетом проблемной области можно сказать, что мощность языка равна скорости, с которой компетентный программист может использовать ее для решения проблем в этой области .

2 голосов
/ 12 июня 2010

ничего абсолютно ничего.

Для программистов высокого уровня это может означать множество встроенных доступных типов данных. Или, может быть, абстракции для простого создания или следования шаблонам проектирования.

Пол Грэм - парень очень высокого уровня, вот что он должен сказать: http://www.paulgraham.com/avg.html

Ребята из Java могли бы рассказать вам кое-что о переносимости, способности достичь каждой платформы.

Программисты C / UNIX могут сказать вам, что его скорость и эффективность, полный контроль над каждым дюймом памяти.

Программисты VHDL / Verilog сообщат вам о полном контроле над всеми часами и воротами, чтобы не тратить электричество или время.

Но, на мой взгляд, «мощный язык» поддерживает все функции, которые помогут вам выполнить свою задачу. Документация может быть важна, или, возможно, это переносимость, или способность делать графику. Это может быть что угодно, писать графический интерфейс из Assembly просто глупо, поэтому пытается спроектировать встроенный процессор во флэш-памяти.

Выбор языка, который идеально соответствует вашим потребностям, всегда будет ощущаться как сила.

2 голосов
/ 12 июня 2010

Может иметь несколько значений. В самом базовом смысле есть сила, насколько это вычислимо. В этом смысле наиболее мощными языками являются Turing Complete , который включает практически все языки программирования общего назначения (в отличие от большинства языков разметки и специфичных для предметной области языков, которые часто не являются полными по Тьюрингу).

В более прагматичном смысле это часто относится к тому, насколько кратко (и наглядно) вы можете делать определенные вещи. В основном, насколько легко выполнять определенные задачи на одном языке по сравнению с другим.

Какой язык более мощный (помимо того, что он несколько субъективен) сильно зависит от того, что вы пытаетесь сделать. Если вы хотите, чтобы что-то работало на небольшом устройстве с 64 КБ памяти, вы, скорее всего, не будете использовать Java. Скорее всего, правильным языком был бы C или C ++ (или, если вы действительно хардкорная сборка). Если вам нужно очень простое приложение CRUD, сделанное за 1 день, возможно, что-то вроде Ruby On Rails будет правильным решением (я знаю, что Rails - это фреймворк, а Ruby - это язык, но в наши дни то, какие библиотеки и фреймворки доступны, сильно влияет выбор языка)

...