C, С++, Java, что будет дальше и как оно будет выглядеть?

Как вы думаете, как выглядит следующая эволюция языков?

15 ответов

Вы могли бы предположить, что C и С++ "выходят из строя" и что Java/.Net/Python/что-то вроде "продвижение" или "следующая остановка".

Все они используются сильно (см. число C или С++ тегов на этом сайте). Разница в том, что ни одна из них не является лингва-франкой в ​​мире программирования. Раньше было, что большинство приложений были настольными или DOS-приложениями в системах с очень ограниченными ресурсами, кроме того, все основные настольные API были написаны на C или С++. Поэтому все узнали об этом.

Теперь он более сложный. Языки становятся более конкретными приложениями. C/С++, когда производительность важна. Языки сценариев, когда ваш основной удар производительности - db reads/write. Java и .Net для общих, не требующих высокой производительности настольных приложений.

Это то же самое с компьютером или электротехникой. В прошлом это были огромные поля на самом высоком уровне абстракции. Теперь у нас есть всевозможные более высокие уровни абстракции. Тем не менее, мы нуждаемся в людях, чтобы сделать этот низкоуровневый вид техники. Они все еще пользуются спросом. Таким же образом, C будет использоваться во многих средах, как и С++. Например, вы были бы сумасшедшими, считая, что можете писать драйвер устройства на Java, вы также были бы слегка сумасшедшими (но, возможно, и менее), чтобы написать полноценное графическое приложение на C, если бы у вас был выбор и способность сделать это на Java или .Net.

Каждый инструмент имеет свою цель. Я ожидаю, что C, С++ и Java будут развиваться и продолжать использоваться для нового и унаследованного развития.


Я не могу говорить для С++ и Java, но C определенно не идет нигде...

Совсем немыслимо писать любое ядро ​​операционной системы без большинства из них в C (ну, вы можете использовать язык ассемблера, если вы действительно упрямы: -P).

C - это, в основном, тонкая обложка, подходящая для ассемблера. Он настолько тесно связан со стандартной архитектурой процессора Von Neumann, что для реализации большинства ее функций не требуется стандартная библиотека или среда выполнения: указатели, символьные строки, автоматические переменные в стеке, целочисленная арифметика и т.д.

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


Языки развиваются, чтобы заполнить нишу, которая не распространяется на другие языки.

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

Что будет дальше? Проблема, которую я вижу, требует заполнения - это многопроцессорные (или многоядерные). В настоящее время все популярные языки имеют очень ограниченную способность использовать дополнительные ядра. В основном все популярные популярные языки предоставляют разработчику самые основные объекты (потоки/блокировки и т.д.) Для использования ядер, а затем оставляют его разработчику, чтобы попытаться использовать parallelism, доступный из нескольких ядер.

Было бы неплохо иметь язык, который абстрагировал бы концепцию ядер (даже потоков) и мог автоматически использовать enherant parallelism, доступный из многоядерных/многопроцессорных архитектур. К сожалению, все эти языки (о которых я знаю) все еще являются исследовательскими проектами в университетах и ​​вряд ли скоро появятся реальные усыновления.

Вы подразумеваете, что произошла прогрессия C → С++ → Java. Это немного искусственно, каждый язык представляет собой метод решения проблем, и каждый язык имеет присущие проблемные области, где он эффективен при решении проблемы и других проблемных областей, где этот язык будет плохим выбором.

Лично:

  • Я никогда не буду писать драйвер устройства с Java.
  • Я бы, вероятно, не писал back-end веб-модуль с C (вы, вероятно, можете, но не я) и др.


Алан Кей однажды сказал: "Фактически я составил термин" объектно-ориентированный ", и могу сказать, что у меня не было С++."

Он работает над изменением будущего программирования

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

Хорошо, я могу добавить, что Бьярне однажды сказал: "Есть только два вида языков: одни люди жалуются и те, кого никто не использует".


Я считаю, что ответ двоякий.

Во-первых, клиентские приложения все чаще внедряются как приложения на основе браузера. Чтобы приложение на основе браузера выглядело и сравнимо с богатым настольным приложением, вам нужно что-то вроде Javascript. И если вы немного следовали за новостями, вы увидите огромные усилия по ускорению реализации javascript в браузерах и процветающую экосистему библиотек, которые помогут вам создать гибкий, интуитивно понятный графический интерфейс с javascript в браузере.

Итак, для GUI я считаю, что будущее - это Javascript.

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

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

  • У IDE проблемы с подсказками с динамическими языками.
  • В контексте вашей работы по определению имеется меньше доступной контекстной информации; в Java вы знаете, что вы можете получить только тип X. На сценарии вы должны проверить весь ссылочный код, а не просто в большом проекте

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

По этим причинам я считаю, что серверный язык следующего поколения статически типизирован. И из статически типизированных языков я думаю, что С# и Java имеют лучшие шансы из-за огромного количества полезных библиотек и очень читаемого характера этих языков.


С#? - О, но это Java:) (извините, не смог устоять)

Следующее поколение языков уже здесь, Scripting. Не исключено, что Microsoft работает над DLR (динамическое время исполнения). Я думаю, что будущее будет интерпретироваться (но JITted), динамические языки, которые имеют несколько ограничений и большую гибкость.

Ограничения производительности для большинства языков в наши дни не так важны, или никто не будет писать приложения Java или С# вообще, но, учитывая, что процессоры супербыстры, а оперативная память дешевая, мы не замечаем неэффективности из этих проектов более высокого уровня (например, если у вас есть процессор 1 МГц, вы пишете свой код на C, а не на С#. Если у вас есть процессор, работающий на 3Ghz, вы пишете его, как хотите)

Итак.. Ruby, Python, "Dynamic-С#"... это будущее. Когда MS выпускает DLR, ожидайте большого интереса к ней, ожидайте, что многие компании начнут говорить о производительности программистов как о самой важной части большинства приложений.

После этого.... возможно, GUI-управляемая система, в которой вы соединяете блоки вместе в UML-подобной системе и добавляете к ним свойства, которые создают сгенерированный код.


Это происходит уже пару лет, но Тим Суини Следующий основной язык программирования: перспектива разработчика игр - интересная тема для субъект.


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

Например, чтобы использовать язык в качестве примера, в начале (:-)) возникла необходимость в языке, который максимально использовал бы доступные ресурсы, C соответствовал законопроекту в этом отношении. С течением времени, и спектр программных приложений, на которые распространяется, был более востребован для языков на основе OO, чтобы облегчить повторное использование программного обеспечения, упростить дизайн и т.д., А С++/Java стала популярной.

В настоящее время наблюдается усиление дрейфа в отрасли по отношению к компонентам на стороне сервера, которые выполняют всю работу с тонким клиентским интерфейсом (то есть браузерами). Поэтому языки, которые удовлетворяют этому требованию, становятся более популярными (языки Ruby, ASP/Java EE).

Новые языки станут популярными, когда технология, к которой они ближе всего, станет популярной. Лично (и это догадки), я думаю, что существует огромный потенциал для языка, который действительно использует многоядерные системы. Это будет означать, что многопоточность построена с самого начала и, вероятно, потребует изменения подхода и мышления (например, переход от процедурного к OO).


Каково будущее программирования? Вдали от языков, как мы их знаем.

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

Один из разработчиков пожаловался, что "вы не можете распечатать код", и я ответил: "Будет ли компания распечатывать всю свою структуру бухгалтерского учета? Или распечатывает те аспекты, которые она хочет видеть, например, Cashflow Заявления и балансы?" Это только когда мы переходим в новые механизмы абстракции, которые мы действительно можем продвигать вперед.

Будущее программирования еще предстоит увидеть, но я думаю, что происходят некоторые захватывающие события, которые, наконец, освободят нас от упряжи C/С++/Java, которые у нас были так долго.


Было бы здорово, на мой взгляд, такой язык, как С++, с более компактным определением, лучшей стандартной библиотекой, сборкой мусора и встроенными конструкциями синхронизации. Он должен использоваться последовательными новичками, но при этом по-прежнему предоставлять специалистам возможности по эффективному, низкоуровневому программированию, когда это необходимо. Я считаю, что D соответствует большинству из этих критериев, но мне кажется маловероятным, что он укрепится.


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


Языковой вопрос, на мой взгляд, ни один, ни. Это всегда зависит от вашего приложения. А поскольку языки имеют в основном стандартный набор библиотек, которые хорошо подходят для того или иного приложения. Языки привязаны к определенной области применения.

Пример:

C -> Device drivers
 C++ -> Highperformance Computing
 Java -> Server side programs (J2EE)
 C# -> Server, Client(Silverlight, WinForm, WPF)
 Ruby, Python, ... -> WebScripting (Serverside) and helper scripts
 ECMAScript (Javascript) -> WebScripting (Clientside)

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

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

Поэтому, выбирая язык для проекта, вы ищете следующие вещи:

  • Существуют ли нужные библиотеки в вашем проекте.
  • Знаете ли вы язык
  • Насколько эффективна программа на этом языке (смотрите на мозг)
  • Знает ли ваша команда и владеет языком?

Последнее, что вам нравится? В конце концов это самая большая мотивация для использования того или иного языка.

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

  • Лямбда-выражения
  • Linq (функция С#, чтобы сделать вид sql на языке)
  • функциональное программирование
  • ввод переменных
  • динамическая типизация
  • не определенный язык: лучшие IDE, которые помогают программисту
  • Важно: поддержка легко! parallelism (Axum, Nesl, orca, Chapel,...) Здесь список


Если вы следуете только этой ветке истории языка программирования, я думаю, что можно написать как JavaScript, так и С#, так как они появились после того, как вы упомянули три, поделитесь похожим синтаксисом и взяли у предшественников.

Другие могут упоминать D или Objective-C (они уже здесь, конечно).

На следующем языке, я полагаю, вы имеете в виду "следующий успешный", потому что каждый месяц существует почти новый язык... Я думаю, что это будет язык с сборкой мусора, работающий на байтекоде с Jit, очень портативный. Я не могу сказать, будет ли он объектно-ориентированным или функциональным, со статической или динамической типизацией, но я бы поставил на микс, как и интересный Язык программирования вентиляторов.

Или, может быть, мы все ошибаемся, это может быть просто естественный язык с устным или графическим интерфейсом: "Возьмите поле погоды этой страницы, измените его цвет и этот логотип на это и интегрируйте на мою страницу".


Язык D, особенно версия 2.0, изучалась с Ruby, Python и множеством современных языков, не поддерживая совместимость источника с C, все еще позволяя получить необработанный доступ к металу. Конструктивные решения этого языка - идеальное решение для системного и общего языков программирования следующего поколения, с встроенным программированием и метапрограммированием.


В краткосрочной перспективе я ожидаю, что языки высокого уровня станут более мощными и более используемыми. Perl 6 и Javascript 2.0 являются хорошими примерами того, что нас ждет.

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

licensed under cc by-sa 3.0 with attribution.