Pull to refresh

Comments 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 в одном" всегда хуже десяти специализированных. И т.д. Это прямое следствие компромиссов, принятых при создании таких монстров.

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

UFO just landed and posted this here

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

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

UFO just landed and posted this here

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

UFO just landed and posted this here

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

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

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

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

UFO just landed and posted this here

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

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

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

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

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

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

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

UFO just landed and posted this here

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

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

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. я бы их объединил в одну позицию в рейтинге - это три разновидности одного языка.

UFO just landed and posted this here

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

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

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

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

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

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

Sign up to leave a comment.