|
|
|||||
Modus ponens
|
ОК, наверное нужно было уточнять. Речь не о том, что С++ по всем параметрам далек от идеала, а конкретно о семантике.
С точки зрения семантики - С++ это взрыв головного мозга. Какой-то набор абсолютно произвольных правил. В современном теоретическом программировании, чаще всего для описания языка используют операционную семантику (т.как денотационная и аксиоматическая - менее гибкие системы, которые еще труднее применять к реальным языкам). В двух словах, операционная семантика описывает программы как последовательность действий которую должен выполнить компьютер, чтобы программу вычислить. В функциональных языках это проще описать, в императивных - сложнее, но это уже тонкости. Я сначала приведу примемр знакомый из AS / JS: когда мы отнимаем от одной даты другую, мы получаем число (разница между временем первой и второй даты в миллисекундах). Но это приводит нас к противоречию, т.как сложение - функция обратная отниманию, а прибавив число к дате, мы дату не получим. Такое поведение языка создает уникальное правило, плохо кореллирующее с ожиданиями человека, знакомого с тем, как работает сложение и вычитание. Но в AS/JS такие случаи единичны, и стандартная библиотеке не особо грешит когнитивными диссонансами типа описанного выше. В С++ такого рода вещи отданы на откуп программисту - как хочешь, так и пиши. Но гораздо более серьезная проблема - недетерминированое поведение любой функции, потому что любая другая функция, в теории, может ей как-то навредить записав что-то в память мимо того места, куда она "должна" была записать. Т.о. если в языке с автоматическим управлением паматью мы можем смело выдвигать какие-то предположения о том, как функции работают, и каких результов от них ожидать, то в С++ этого гарантировать нельзя. Даже функцию типа Можно заставить вернуть не строку, если каким-то образом (а чаще всего - случайно) узнать адрес по которому записывается результат возвращаемый из функции, и записать туда что-то другое. Поэтому, традиционно С++ называют языком с "плохо определенной", "размытой", или вообще "не определенной" семантикой. Конечно, у слова "семантика" есть много значений, и в каком-то другом значении, оно может быть применимо к тому, что происходит в С++ программах, но я имел в виду только конкретное определение формальной семантики компьютерных языков.
__________________
Hell is the possibility of sanity |
|
|||||
listener
|
Дружище, к практике твои примеры имеют весьма отдаленное отношение. Или они крайне неудачны.
Я как бы даже не знаю.. никогда не думал о семантике языка, как о препятствии в его применении. Есть инструментарий, или ты умеешь им пользоваться, или нет, все просто. Вообще, твои высказывания о ЯП напоминают мне цитаты с какого-то съезда лингвистов (не программистов), даже лингвистов-гурманов, я бы сказал. Цитата:
|
|
|||||
Modus ponens
|
О как, все просто!
Нет, я сказал именно то, что хотел. Я не имел в виду неопределенное поведение, хотя в каком-то смысле оно может иметь отношение к вышесказанному, я говорил о плохо оперделенной операционной семантике. Это хорошо определенное понятие, которое не нужно интуитивно угадывать. Можно просто взять книжку (например, того же Бенжамина Пирса) / открыть Вики и прочитать, что это такое. По поводу практики: а какие именно примеры? Я старался говорить обобщенно. "Нету стек трейсов" - это не пример, это явление которому подвержен весь язык в любом его проявлении. Знание этого факта не сделает меня лучшим программистом на С++. Хотя, может сделать печальным программистом на С++ Семантика языка описывает то, как мы его понимаем, и особенно то, как его понимает компилятор / интерпретатор. Может ли это быть препядствием? - если семантика состоит из множества противоречивых правил, непоследовательная, и т.д. то, конечно она будет препядствием. В целом я бы охарактеризовал ситуацию следующим образом. Пока на С++ решаются тривиальные вещи, им пользоваться относительно удобно. Компилятор не встречает сложных случаев в разборе программы, код получается быстрый и компактный - все довольны. Но чем сложнее становится программа, тем хуже ситуация, и тем хуже по отношению к другим языкам, где семантика лучше определена. Есть несколько языков, с компиляторами способными сгенерировать программы сравнимые по скорости с С++. Хаскелл - один такой язык, но я плохо его знаю, ОКамл я теперь знаю немножко лучше. Так вот, Благодаря более однозначной семантике и более скупому и последовательному набору правил, чем больше программа на ОКамле, тем больше вероятность того, что она будет быстрее / компактнее программы на С++ делающей такую же работу. Это достигается за счет того, что компилятору легче делать более глобальные предположения о намерении программиста. Что интересно, в С++ неопределенное поведение как раз таки является тем фактором, который позволяет делать такие предположения компилятору!
__________________
Hell is the possibility of sanity |
|
|||||
listener
|
Что ж, ситуация прояснилась и выглянуло солнце . Да, пожалуй на счет семантики я таки погорячился.
И все-таки, ты опять говоришь немного не про то . Есть очень большая область программирования, где просто нет менеджеров памяти с GC, и где наиболее информативным трейсом, порой, оказывается дамп.. Это разработка ОС, системных утилит, драйверов... та же графика в конце концов. Попробуй ка взаимодействие с грудой железа втиснуть в один хороший язык. Компиляторы то же создаются не по теоретическим домыслам о красоте как бы. Навороты С++ как раз призваны для таких нетривиальных вещей, не?. То, что "хеллоу ворлд" (утрированно) написать легко, это и так очевидно. Поэтому, как-то немного странно читать комментарии в духе "С (С++) - плохой язык", у него-де плохая семантика. Нужно просто (ага, просто) работать с ним на его поле. Ну. а то, что после флеша идти в эти дебри решится не каждый - это не показатель . PS. вот, навеяло как-то: http://www.flasher.ru/forum/showthread.php?t=113017 Последний раз редактировалось alexcon314; 20.06.2013 в 01:14. |
|
|||||
Modus ponens
|
По поводу взаимодействия с железом - ну так на Лиспе писались операционные системы... Дилан позиционировался как язык для системного программирования. Го - в принципе мог бы заменить Си, и в нем очень много недостатков учли.
С++ - это явление похожее на олигополию, т.е. когда рынок занимается небольшой группой продавцов, которые согласны делится друг с другом, но никогда не с маленькими продавцами. Т.е. он когда-то занял финансово "правильную" нишу - на нем написали какие-то вещи, которые потом стали очень популярными, не зависимо от выбранной технологии (ДОС, например). Популярность продуктов потянула за собой вложения в разработку инструментов для языка, потом на этих инструментах воспиталось много людей, и так возникла лавинообразная ситуация, когда любые другие конкуренты не в состоянии что-то противопоставить. Только еще несколько таких же, по размеру, языков. Собственно, таким же образом Кобол живет и процветает и по сей день. Кто-то мне год или два назад клялся, что и по сей день большинство кода в мире написано на Коболе - я не проверял, но охотно в это поверю. И ситуация точно такая же: нельзя отказаться изза легаси, чтобы поддерживать легаси создается еще больше легаси, но пока дело прибыльное, по причинам не зависящим от технологии, технология будет жить. С++ отнюдь не единственный язык, который может компилироваться в нативный код, в котором есть указатели / возможность, при необходимости дописать код на ассмеблере (из того, что я знаю: на Паскале это возможно, в Лиспе - зависит от производителя, но в SBCL - да, можно, OCaml - да, можно, на счет вставок на ассемблере - не уверен, но указатели и прямой доступ к памяти там есть.) Во всех вышеперечисленных языках, естесственно есть специальные библиотеки для работы с системными процедурами. Например, Микрософт разрабатывал и разрабатывает библиотеку проверки драйверов на ОКамле.
__________________
Hell is the possibility of sanity |
|
|||||
listener
|
Опа, опять на гризонте мировой заговор . Засилье си оплачно олигархами! Свободу попугаям!
Кто лоббировал си в мире линкус? Торвальдс? Вот ведь неотесанный, нет бы ему [подставить самостоятельно] взять, так ведь нет, продался в олигополию !(блин, где ты только слова такие выискиваешь )Я далек от всего этого, и считаю, что си занял свои позиции отчасти по причинам историческим, а в основном благодаря самому себе. Можно, конечно, очень долго переливать из пустого в порожнее, но только факт остается фактом. Хлебушек на масло можно заработать, программируя на языке мэйнстрима, заморачиваться по поводу хороший он или плохой - это как поговорка про хорошую и плохую жену. Перечисленные тобой языки по большей части ни о чем, при всей их красоте. |
|
|||||
Modus ponens
|
Это не мировой заговор, это тенденция в экономике - случается во всех сферах хозяйствования, где сложно получить прибыль без массированых вложений. Пример: телефонные компании, производители электричества, авиакомпании и т.д. Но у этой тенденции есть свои характеристики, и одна из них заключается в том, что качество или стоимость продукта могут сильно отличаться от "разумных" для выбраной категории.
Существует наивное представление о конкуренции, с точки зрения которого, логически следует, что если продуктом пользуется много людей, то он обязательно хороший. Но в случае с моно- и олигополиями это не работает, и нужны другие критерии оценки. Разработка языка включающая в себя стандарную библиотеку, компилятор, отладчик и т.д. - сами по себе "не очень" затратный процесс, ну, по крайней мере не на столько, чтобы гарантировать эксклюзивность, но качественный компилятор - это таки очень трудозатратный процесс, восновном изза времени, которое занимает разработка. Почему Си был выбран Линусом Торвалдсом? - Стандарт Юнкс описывает систему с обязательным Си компилятором, системные вызовы соответствующими конвенции Си, бутлоадер уже был написан на Си к тому времени и т.д. и т.п. Даже если бы он ненавидел Си, у него не было другого выбора. По поводу перечисленных мной языков и их ниочемности: смотри, это такое же наивное заблуждение, как и заблуждение человека, который не понимает зачем нужны суперкомпьютеры, заявляя, что если ему его третьего пентиума достаточно для работы в Экселе, то больше ничего уже никому и не нужно. Эти языки - хлеб и масло исследователя в области теоретического программирования. Без этих исследователей не было бы не мейнстрим языков, ни хороших компиляторов, ни хлеба с маслом для тех самых наивных программистов, которым эти языки "не нужны". ЗЫ. Олигополия - термин из теории игр, но используется еще много где, макроэкономика, например.
__________________
Hell is the possibility of sanity |
|
|||||
listener
|
Ок. Сдаюсь
Но я как-то слабо себе представляю, что в обозримом будущем си уступит место другому языку. Но вам, теоретикам, виднее, конечно . Исследования, безусловно, нужны и очень хорошо, что они есть. Тут без вопросов. И да, удачи в поисках работы! |
|
|||||
Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
|
Всем большое спасибо за ответы/комментарии =)
Отдельное огромное спасибо wvxvw за то, что напомнил про JS, ведь они с AS очень похожи по синтаксису (самому часто приходилось что-то делать на нём, правда не столь серьёзное, как AS разработки). И ещё вопрос, возможно wvxvw или кто-то другой больше осведомлён в этом вопросе, чем я: какое портфолио необходимо набить для JS, чтобы быть интересным для работодателя? Т.е. у меня есть свои наработки, но я подозреваю, что они довольно скупые (несколько сайтов, которые делал для себя и всё). Т.е. мне понятно, что необходимо рассказать о себе в плане Flash, чтобы у работодателей появился интерес к тебе, но я не очень представляю себе, что необходимо рассказать о JS (на ум приходит только диалог в форме "Вы знаете JS?" -> "Да, знаю"). |
|
|||||
koIIImarik
JQuery, ajax, highslide - и ты тру прогер. Более половины вакансий - твои! Необходимо знание библиотек. Сделать на js что-то своими руками довольно долго и геморойно, поэтому приветствуются знания различных библиотек на все случаи жизни. Чем быстрее ты сможешь сделать плавное выпадающее меню - тем лучше. Конечно, необходимо понимание работы DOM страницы, html и css - твои лучшие друзья. Ещё необходимо смутное представление о безграничных и не осязаемых возможностях html5 (что-бы подчёркивать свою важность). Это если ты собрался в сайто-строители.. Да и приготовься большую часть времени верстать разметку, потому-что js программист и верстальщик - это чуть менее чем синонимы. Для игростроя или чего посерьёзнее не знаю, но наверняка потребуются знания повыше среднестатического уровня тру js проггера. Соответствующие библиотеки, углубленные знания во всех тонкостях js-шного "ооп", реальное представление об html5 тегах.
__________________
Дети не должны знать о своих родителях |
Часовой пояс GMT +4, время: 19:42. |
|
« Предыдущая тема | Следующая тема » |
|
|