Как стать автором
Обновить

Зачем нам так много языков программирования?

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров11K
Всего голосов 16: ↑8 и ↓8+5
Комментарии46

Комментарии 46

Чтоб перегореть побыстрее. Следующий вопрос.

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

Что, и исключения между Carbon и C++ прозрачно перекидываются?

перекидываются между C++ и cppfront (cpp2). Совместимость бинарная на уровне линковки, на уровне хидеров, более того в одном файле можно писать на миксе языков в "не строгом" режиме

https://www.youtube.com/watch?v=ELeZAKCN4tY

Так там вроде только синтаксис меняется, семантику плюсов не трогают.

всё так. Единственный существующий прототип компилятора - трансформер в обычный С++

Даже C++, будучи одним из наиболее распространенных ЯП, имеет определенные недостатки.

Да неужели :))))

А вообще статья совершенно гуманитарная.

А какая часть цитаты имелась в виду? Первая, вторая или обе?

Несмотря на то что С++ сейчас гораздо менее популярен чем 30 лет назад, он все еще очень популярен - с этим не поспоришь.

А вот

Даже C++...... имеет определенные недостатки.

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

с этим не поспоришь

По моим наблюдениям, большинство проектов, якобы написанных на C++, на самом деле написаны на квазиязыке под названием «C/C++». Именно на C++ их пишется так мало, что популярным его назвать трудно.

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

Лично у меня универсальность ассоциируется с уменьшением сложности, а не увеличением. Просто потому, что одно универсальное правило покрывает множество частных случаев.

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

У меня универсальность ассоциируется ещё и с покрытием кейсов, для которых используются узкоспециализированные языки.

Стандартная бибилиотека как раз std::string предоставляет. Но разработчики библиотек используют кто во что горазд, потому что C++ не принуждает к использованию только стандартной библиотеки.

По-моему, всё это в другом порядке происходит ))

Стандартная библиотека НЕ предоставляет универсальный string, который можно было бы использовать в любых сценариях (посмотреть на универсальный string можно в .Net, где он поддерживает все мыслимые операции с текстом).

В результате, разработчики вынуждены искать string на стороне, например, в Qt, т.к. их не «не принудили». То есть, если называть вещи своими именами, лишили функционала. (Этак можно и собаку из дома выгнать, сказав, что решил «не принуждать её к совместному проживанию»).

И где же тут претензия на универсальность («…с любым языком, претендующим на универсальность…»)? Такой цели просто не ставится. Ставится цель сделать язык пригодным для написания ядер ОС. Я уж не знаю, где все эти ядра, и зачем нам столько ядер, но так говорят активные члены C++ комьюнити.

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

С - это подмножество С++. У самого C++ штуки 4 больших "рефакторинга" с подддержкой предыдущих фичеров языка. В результате непонятно что называть "чистым С++". Почитайте "дизайн и эволюция С++" за авторством мертвой птицы, которая не умеет летать. Посмотрите на год написания, прикиньте сколько еще наворотили после издания...

Скорее был подмножеством во времена C++98 или даже раньше. Во времена C11 и C++11 расхождений уже было достаточно

Но ведь код написанный на C компилируется в компиляторе С++. Значит С тоже С++ ))

Весь-весь? И с неявным int? И все преобразования типов нормально компилируются?

А в каком компиляторе вы компилируете сишный код?

Да хотя бы gcc. Конечно, warning'и в описанных ситуациях выдаются, но код от этого не перестаёт быть валидным.

Т.е. ваш сишный код и с неявным int и со всеми преобразования типов компилируется компилятором под C++ ?

Именно что нет - компилируется компилятором C, но не компилируется компилятором C++. Вы же утверждали

ведь код написанный на C компилируется в компиляторе С++

Ответ простой в виде аналогии: а почему в мире так много "естественных" языков. Давайте все будем говорить на эсперанто :)

Мне кажется статья подразумевает какую-то логику. Здесь просто попросили бот накидать текста на тему

--------------------

Ну смотрите, все ж тривиально

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

Есть новая система, и надо выбрать стек. Ну все просто. Из тех вариантов, которые в принципе есть берется тот, где есть разработчики, либо они дешевле, так как во всем остальном это уже не так критично. К примеру, на одном из проектов надо было выбрать Java vs C# :). Дальше популярность тянет за собой язык, как если бы вы играете в монополию и начинаете выигрывать. Больше куплено, больше вам платят, вы больше покупаете. Так и с языком

Также есть специфика, которая только множится, точнее к существующим слоям добавляются новые, но старые никуда не деваются. К примеру, появился "клауд", но ведь это никак не отменило bash, так как внутри конкретной виртуалки надо тоже чего-то делать. И т.д. Развитие ИТ идет методом добавления, что очевидно ведет к тому, что новые инструменты появляются, а старые просто занимают свою нишу либо активную, либо медленно умирающую (что-то вроде функции 1/x, которая конечно стремится к нулю, но его никогда не достигает)

Почему не переиспользуются языки? Да все просто. Язык, хотим мы этого или нет, не существует в абстрактном мире. Конечно в документации да. Но в реальном мире нет. Программисты не хотят писать с нуля базу. Все хотят брать готовый фреймворк и докруить его под задачу. Вы же не хотите изобретать обычное серверное приложение, которое наружу торчит REST API наружу с нуля. Вы хотите сразу чтобы было все. Контроллер, авторизация, валидация и т.д. Те языки, где это запилили, очевидно применяются для таких задач.

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

Но людям всегда интересно что-то запилить новое. Что-то взлетит, что-то - нет

Если оставить один язык программирования для всего, то его выбор (создание) будет набором компромиссов. А что такое компромисс? Это не решение, от которого все ахают в экстазе. Компромисс - это вынужденное решение, которое не нравится ни одной из сторон, и к которому приходят только потому, что иначе нельзя. Т.е. компромиссом в нашем случае будет язык программирования, который одинакового плохонько будет решать все задачи. Оно нам надо? Подумайте об этом... Выберут же JavaScript... У меня от одной этой мысли холодок по спине пробегает)

Обратите внимание на каких-либо мастеров своего дела. У каждого хорошего мастера целая коллекция очень узко-специализированных инструментов, каждый из которых выполняет только одну задачу, но делает это очень хорошо. Если вместо этого взять какой-то монструозный мульти-тул, то он сделает всё одинаково плохо

А если не выберут из существующих, а специально задизайнят новый универсальный с учётом всех предложений - появится просто ещё один язык который ничего не вытеснит. Вроде как Pl/I с такой целью разрабатывался.

Любой мульти-тул всегда хуже отдельных инструментов, любой шампунь "10 в одном" всегда хуже десяти специализированных. И т.д. Это прямое следствие компромиссов, принятых при создании таких монстров.

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

НЛО прилетело и опубликовало эту надпись здесь

Дело в том, что у нас давным-давно есть такой язык. Это C++. На нём можно вообще всё, что угодно, написать.

Только вот C++ - это язык, который я ненавижу больше всех после JavaScript. И почти все его недостатки как раз напрямую и проистекают от того, что он такой вот мульти-тул. И даже если они окончательно разберутся с проблемами с памятью, то самая настоящая его проблема так и останется. Знаете, какая это проблема? Это когда два программиста вполне себе могут не понять C++ код друг друга из-за чудовищного количества фич в языке.

НЛО прилетело и опубликовало эту надпись здесь

Давно вы писали на ассемблере, скажем, 8051? Или R2000? Или ARM Thumb (первой версии)?

НЛО прилетело и опубликовало эту надпись здесь

Таки имел ввиду что ассемблеры приходят и уходят вместе с ISA и железом.

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

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

HTML/CSS - язык программирования? Серьезно?

Ок, тьюринг-полный, так тьюринг-полный. Пусть будет на втором месте)

НЛО прилетело и опубликовало эту надпись здесь

HTML - это декларативный язык программирования. Да, конечно, он не тьюринг-полный, но он позволяет при помощи написания кода на определенном языке получить результат, зависящий от этого кода.

Выше кинул ссылку на тьюринг полноту (хотя есть нюансы).

В мире насчитывают примерно 7 000 естественных языков и 9 000 языков программирования. Но, в то время как количество первых стабильно сокращается, число вторых продолжает уверенно расти.

Статья начинается с ошибочного утверждения. Количество естественных языков тоже растёт, просто на некоторых из них почти не говорят, но часто остаются артефакты с этими языками. Бывают случаи и воскрешения древнего языка после того, как на нем перестали говорить. Примером может послужить возражение Иврита, после того, как он был заброшен и большая часть евреев говорила на идише или других языках, а сейчас ничего - вполне жив язык-то, идиш же отмирвет тк молодёжи не нужен, а старики - не вечные. Как минимум стоило бы в начале тогда дать определение что вы называете языком и что значит "существует" в вашем случае? Сколько человек должно на нем говорить, чтобы язык считался существующим?

С языками программирования тоже похоже, количество кода на Ada не очень растёт...

Почему так? Потому что по сравнению с языками общения все языки программирования очень молодые. Подождите хотя бы лет 500 с их появления и поглядим. Также, в создании языков общения участвуют обычно целые народы и культуры, причём долгое время. Да, есть искусственно созданные языки вроде эсперанто, ложбана, язык туземцев в фильме Аватар или эльфийские языки Толкина, но на них очень мало кто говорит, правда это не делает их несуществующими. Что проще - создать свой язык программирования или язык общения? Для меня на самом деле не очевидно, наверное Толкину как лингвисту проще Тенгвар эльфийский запилить, чем язык программирования, а кому-то - наоборот. Правда вот уговорить попробовать использовать новый язык программирования кого-то всяко кажется проще, чем уговорить освоить новый язык общения.

Язык общения часто становится частью идентичности человека, некоторые готовы даже воевать и умирать за свое право использовать тот или иной язык. Много кто в окопы пойдёт за право писать на Perl в 2024? Ну и ещё - чтобы обучить людей языку программирования придётся использовать какой-то из языков общения, но не наоборот. Так что язык общения играет в жизни гораздо более значимую роль.

НЛО прилетело и опубликовало эту надпись здесь

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

Достаточно одного носителя, выучившего язык как первый от родителей.

1-е место js да еще и html/css это (#%#%#%, не хочу ругаться) - мошенничество неверная методика.

а) javascript в рейтинге надо делить на: 1) серверный Node.js и 2) браузерный javascript, в конце-концов в IE кроме javascript еще был и браузерный visual basic (еще точнее vba), может даже в 11-м IE он еще остался, не проверял, а IE во всех windows-ах есть, так что тоже 1-е место по распространенности дадим встроенному visual basic-у? По крайней мере среди компьютеров с Windows?

б) html/css мало того, что не языки программирования, а языки разметки, так "произрастают" из тех же грабель - они работают только внутри другой программы - браузера!!!

б-2) забыл про typescript - его зачем сделали? чтобы починить js, т.к. он работает на js, не так ли? Может еще в рейтинг запихаем jquery, react, vue, angular?

js и html/css, typescript в общем рейтинге - это карточное шулерство!

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

Опять же - например сайт (бэкенд) на питоне, а фронтэнд того же сайта на javascript. Как считать рейтинг при таком раскладе без злоупотреблений???

в) еще такой специализированный язык - это SQL - опять же - сайт на питоне, фронтенд на html/css/js, в бд-SQL, - нужен честный рейтинг!

г) ассемблер - основа всех языков, но сейчас только для драйверов и прочей специфики - в итоге ни он, ни SQL, ни js/html/css не должны быть в общем рейтинге - это не языки общего назначения!!!

д) наконец (не бросайте в меня дохлыми помидорами :-) ) конечно это только мое частное мнениё :-)

java, c#, kotlin: c# был сделан как бы javo-й под win из-за трений MS и SUN/Oracle, а kotlin - для google - чтобы Oracle "не доставала" по поводу java на android. я бы их объединил в одну позицию в рейтинге - это три разновидности одного языка.

НЛО прилетело и опубликовало эту надпись здесь

Языки программирования, это всего лишь инструмент в руках программиста для решения конкретных задач. А поскольку задачи с которыми сталкивается программист меняются, появляется потребность в новых инструментах. Нужно образно клубни из земли ковырять, вот есть замечательная палка-копалка. Посадил "картоплю" на маленьком поле и вот уже требуется три инструмента лопата, тяпка и капарулька. И как бы у каждого своя ниша. Увеличь масштаб и нам уже нужен трактор с навесным оборудованием, картофелеуборочный комбайн и самолет сельхоз авиации. Масштаб одной и той же изменился и изменились инструменты для её решения.

Ещё пример: Можно ли забивать гвозди микроскопом? Можно, но молоток надежнее;)

Иногда от безысходности бывает и наоборот: Кто сказал что гитара, не ударный инструмент? ;)

MLIR фреймворк для разработки компиляторов,

MLIR это не фреймворк, это представление языка в некоторой промежуточной форме.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий