C, C++, Java, что дальше и как это будет выглядеть?
Как вы думаете, как будет выглядеть следующая эволюция языков?
15 ответов
Вы могли бы предположить, что C и C++ "прекращаются" и что Java/.Net/Python/ что бы ни было "продвижением" или "следующей остановкой".
Все они интенсивно используются (см. Количество C или C++ тегов на этом сайте). Разница в том, что ни один из них больше не является языком общения в мире программирования. Раньше большинство приложений были настольными или DOS-приложениями в системах с очень ограниченными ресурсами, кроме того, все основные API-интерфейсы для настольных ПК были написаны на C или C++. Так что все узнали это.
Теперь его сложнее. Языки становятся более специфичными для приложений. C/C++, когда важна производительность. Языки сценариев, когда основной удар по производительности - чтение / запись в БД. Java и.Net для стандартных, не критичных к производительности настольных приложений.
То же самое с компьютером или электротехникой. В прошлом это были огромные поля на самом высоком уровне абстракции. Теперь у нас есть все виды более высоких уровней абстракции. Тем не менее, нам нужны люди, чтобы делать этот вид инженерии более низкого уровня. Они все еще востребованы. Таким же образом C будет продолжать использоваться во многих средах, как и C++. Например, вы были бы сумасшедшими, если бы думали, что могли бы написать драйвер устройства на Java, вы также были бы слегка сумасшедшими (но, возможно, не такими), чтобы написать полноценное приложение с графическим интерфейсом на C, если бы у вас был выбор и возможность сделать это в Java или.Net.
У каждого инструмента есть свое назначение. Я ожидаю, что C, C++ и Java будут развиваться и продолжать использоваться для новых и устаревших разработок.
Я не могу говорить за C++ и Java, но C определенно никуда не денется...
В значительной степени немыслимо написать ядро любой операционной системы без большей его части на C (ну, вы можете полностью использовать язык ассемблера, если вы действительно упрямы:-P).
C - это по сути тонкая оболочка изящности вокруг языка ассемблера. Он настолько тесно связан со стандартной архитектурой ЦП фон Неймана, что для реализации большинства его функций не требуется никакой стандартной библиотеки или среды выполнения: указатели, символьные строки, автоматические переменные в стеке, целочисленная арифметика и т. Д.
По тем же причинам C отлично подходит для приложений уровня пользователя, которые абсолютно требуют высокой производительности, таких как умножение огромных матриц или разбор сложных языков. Возможно, будет сложно написать синтаксический анализатор на C, но преимущества ручного управления памятью по скорости и эффективности трудно упустить...
Языки развиваются, чтобы заполнить нишу проблемы, которая не покрыта другими языками.
Погодная ситуация, когда язык овладевает и закрепляется, - это еще один вопрос, который во многом связан с популярностью.
Что будет дальше?
Проблема, которую я вижу, которая требует заполнения, состоит в том, чтобы использовать несколько процессоров (или многоядерных процессоров). В настоящее время все популярные языки имеют очень ограниченную способность использовать дополнительные ядра. В основном все современные популярные языки предоставляют разработчику самые базовые объекты (потоки / блокировки и т. Д.) Для использования ядер, а затем оставляют за разработчиком возможность использовать параллелизм, доступный для многоядерных процессоров.
Было бы неплохо иметь язык, который абстрагируется от концепции ядер (даже потоков) и может автоматически использовать несгибаемый параллелизм, доступный в многоядерной / многопроцессорной архитектуре. К сожалению, все эти языки (о которых я знаю) по-прежнему являются исследовательскими проектами в университетах и вряд ли скоро будут приняты.
Вы подразумеваете, что произошла прогрессия C -> C++ -> Java.
Это немного искусственно, каждый язык представляет метод решения проблем, и у каждого языка есть присущие проблемные области, где он эффективен для решения проблемы, и другие проблемные области, где этот язык был бы плохим выбором.
Лично:
- Я бы никогда не написал драйвер устройства с Java.
- Я бы, вероятно, не писал бы внутренний веб-модуль с C (вы, вероятно, можете, но не я) и т.д.
Я считаю, что ответ двоякий.
Во-первых, клиентские приложения все более и более реализуются как приложения на основе браузера. Для того, чтобы приложение на основе браузера выглядело и чувствовало себя сравнимо с многофункциональным настольным приложением, вам нужно что-то вроде Javascript. И если вы немного следите за новостями, вы увидите огромные усилия по ускорению реализации javascript в браузерах и процветающую экосистему библиотек, которые помогут вам создать отзывчивый, интуитивно понятный графический интерфейс с javascript в браузере.
Так что для GUI я считаю, что будущее - это Javascript.
Что касается бэкэнда, сервера, я очень сомневаюсь, что в ближайшем будущем в запасе есть язык сценариев. Серверное программное обеспечение работает годами, добавляются новые функции, исправляются ошибки и все такое. Язык, на котором это написано, должен быть не очень быстрым для написания, но легко читаемым (поддерживать).
И скриптовые языки, как правило, немного сложнее для понимания, если вы пересмотрите свой код через год или два, чтобы исправить эту ошибку. Это имеет (на мой взгляд) две основные причины, которые не исчезнут в краткосрочной перспективе:
- В IDE возникают проблемы с подсказками динамических языков
- В контексте вашей работы по определению доступно меньше контекстной информации; в Java вы знаете, что можете получить только тип X. В скриптовом языке вы должны проверять весь ссылочный код, что непросто в большом проекте.
Эти проблемы могут быть смягчены с помощью очень опытных разработчиков, но если в будущем единственным полезным разработчиком будет опытный разработчик, нам не нужно будет нанимать неопытных, что создаст проблемы в будущем.
По этим причинам я считаю, что серверный язык следующего поколения статически типизирован. И я думаю, что из статически типизированных языков C# и Java имеют наилучшие шансы благодаря огромному количеству доступных библиотек и очень удобочитаемой природе этих языков.
C#? - о, но это Java... (извините, не удержался)
Следующее поколение языков уже здесь, скриптовые. Это не ошибка, что Microsoft работает над DLR (динамическая среда исполнения). Я думаю, что будущее будет интерпретироваться (но JITted), динамические языки, которые имеют немного ограничений и большую гибкость.
Ограничения производительности для большинства языков в наше время не так важны, иначе никто бы не стал писать приложения на Java или C#, но учитывая то, что процессоры супербыстрые, а оперативная память дешевая, мы не замечаем неэффективности этих более высоких -уровневый дизайн (например, если у вас процессор 1 МГц, вы пишете свой код на C, а не на C#. Если у вас процессор, работающий на частоте 3 ГГц, вы пишете его как хотите)
Итак... Ruby, Python, "Dynamic-C#"... это будущее. Когда MS выпустит DLR, ожидайте большой интерес к нему, ожидайте, что многие компании начнут говорить о производительности программистов как о наиболее важной части разработки большинства приложений.
После этого... вероятно, система с графическим интерфейсом, в которой вы соединяете блоки в UML-подобной системе и добавляете к ним свойства, которые генерируют сгенерированный код.
Алан Кей однажды сказал: "На самом деле я придумал термин" объектно-ориентированный ", и могу вам сказать, что я не имел в виду C++".
Он работает над изменением будущего программирования
"Настоящий роман еще впереди и еще впереди. Компьютерная революция еще не началась. Не вводите в заблуждение громадный поток денег в плохие стандарты де-факто для неискушенных покупателей, использующих плохую адаптацию неполных идей". источник
Что ж, я могу добавить, что Бьярне однажды сказал: "Есть только два вида языков: те, на которые жалуются люди, и те, которые никто не использует".
Как уже упоминалось, языки, как правило, адаптируются к новым технологиям и тенденциям. Таким образом, чтобы ответить на этот вопрос, сначала нужно посмотреть на общее будущее компьютеров и выяснить, какие языки наиболее подходят для этих целей.
Например, чтобы использовать вашу языковую прогрессию в качестве примера, в начале (:-)) была потребность в языке, который бы максимально использовал ограниченные доступные ресурсы, C отвечал всем требованиям в этом отношении. С течением времени и расширением спектра программных приложений возрос спрос на языки на основе ОО для облегчения повторного использования программного обеспечения, упрощения проектирования и т. Д., И C++ / Java стал популярным.
В настоящее время в отрасли наблюдается повышенный дрейф в сторону серверных компонентов, которые выполняют всю работу с тонкими клиентскими интерфейсами (например, браузерами). Поэтому языки, удовлетворяющие этот спрос, становятся все более популярными (языки Ruby, ASP/Java EE).
Новые языки станут популярными, когда технологии, к которым они ближе всего, станут популярными. Лично (и это догадки), я думаю, что существует огромный выбор для языка, который действительно использует преимущества многоядерных систем. Это будет означать построение многопоточности с самого начала и, вероятно, потребует изменения подхода и мышления (например, переход от процедурного к ОО).
Какое будущее у программирования? Вдали от языков, какими мы их знаем.
Это 2009 год, и мы все еще используем текстовые редакторы? В рамках проекта, частью которого я являюсь, вы можете создавать целые приложения, просто устанавливая атрибуты. За исключением (в основном, математических) выражений и строковых значений, нигде нет ни одной строки текста.
Один из разработчиков жаловался, что "вы не можете распечатать код", и я ответил: "Будет ли компания распечатывать всю свою структуру бухгалтерского учета? Или она будет распечатывать аспекты, которые она хочет видеть, такие как отчеты о движении денежных средств и баланс" Листы?" Только когда мы переходим к новым механизмам абстракции, мы действительно можем двигаться вперед.
Будущее программирования еще предстоит выяснить, но я думаю, что происходят некоторые захватывающие разработки, которые наконец освободят нас от использования C/C++/Java, которое мы использовали так долго.
Это продолжается уже пару лет, но Тим Суини " Следующий основной язык программирования: Перспектива разработчика игр" - интересное размышление на эту тему.
Что было бы замечательно, на мой взгляд, такой язык, как C++, с более компактным определением, лучшей стандартной библиотекой, встроенной сборкой мусора и встроенными конструкциями синхронизации. Он должен быть пригоден для использования относительными новичками, но при этом должен предоставлять специалистам возможность программировать эффективным способом на низком уровне, когда это необходимо. Я полагаю, что D отвечает большинству этих критериев, но мне кажется маловероятным, что оно вступит в силу.
Если вы будете следовать только этой ветви истории языка программирования, я думаю, что можно написать как JavaScript, так и C#, поскольку они пришли после трех, о которых вы упомянули, имели схожий синтаксис и взяли от предшественников.
Другие могут упомянуть D или Objective-C (они уже здесь, конечно).
Под следующим языком, я полагаю, вы подразумеваете "следующий успешный", потому что каждый месяц почти новый язык...
Я думаю, что это будет язык с сборкой мусора, работающий на байт-коде с Jit, очень переносимый.
Я не могу сказать, будет ли он объектно-ориентированным или функциональным, со статической или динамической типизацией, но я бы поставил на микс, как это делает интересный язык программирования поклонников.
Или, может быть, мы все не правы, это может быть просто естественный язык с устным или графическим интерфейсом: "Возьмите окно погоды этой страницы, измените его цвет и этот логотип на него и интегрируйте в мою страницу".
Язык D, особенно версия 2.0, научился на Ruby, Python и множестве современных языков, не сохраняя совместимость с исходным кодом на C, но все еще допуская необработанный доступ к металлу. Конструктивные решения этого языка являются идеальным решением для системного и общего языков программирования следующего поколения, даже со встроенным функциональным программированием и метапрограммированием.
Языкового вопроса на мой взгляд нет ни либо. Это всегда зависит от вашего приложения. А поскольку языки имеют в основном стандартный набор библиотек, которые хорошо подходят для того или иного приложения. Языки связаны с определенной областью применения.
Например:
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 и C++ особенным, так это то, что есть стандартная библиотека, но по сравнению с другими это довольно минималистичная стандартная библиотека. Для эффективного использования этих языков необходимы сторонние (нестандартные) библиотеки.
Таким образом, при выборе языка для проекта вы ищете следующие вещи:
- Есть ли нужные библиотеки, которые вы можете использовать в своем проекте?
- Ты знаешь язык
- Эффективно ли программировать на этом языке (посмотрите на brainfuck)
- Ваша команда знает и владеет языком?
Последнее, что вам также нравится, язык? В конце концов, это самая большая мотивация использовать тот или иной язык.
Поэтому следующим шагом в эволюции языка будут библиотеки и концепции более высокого уровня, которые будут быстрее и выразительнее. Примеры
- Лямбда-выражения
- Linq (C# особенность, чтобы сделать вид SQL на языке)
- функциональное программирование
- типизированная переменная
- динамическая типизация
- не конкретный язык: лучше IDE, которые помогают программисту
- Важно: поддержка легко! параллелизм (Axum, Nesl, orca, Chapel, ...) Вот список
В краткосрочной перспективе я ожидаю, что языки высокого уровня станут более мощными и более используемыми. Perl 6 и Javascript 2.0 являются хорошими примерами того, что нас ждет.
В долгосрочной перспективе функциональные языки могут превратиться в мейнстрим, но я ожидаю, что это произойдет не скоро.
В какой-то момент программы начнут писать свои собственные программы, делающие людей избыточными в том, что касается программирования. Основное разногласие - когда это произойдет.