Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.06.2013, 10:48
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 21  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
ОК, наверное нужно было уточнять. Речь не о том, что С++ по всем параметрам далек от идеала, а конкретно о семантике.
С точки зрения семантики - С++ это взрыв головного мозга. Какой-то набор абсолютно произвольных правил.

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

Я сначала приведу примемр знакомый из AS / JS: когда мы отнимаем от одной даты другую, мы получаем число (разница между временем первой и второй даты в миллисекундах). Но это приводит нас к противоречию, т.как сложение - функция обратная отниманию, а прибавив число к дате, мы дату не получим. Такое поведение языка создает уникальное правило, плохо кореллирующее с ожиданиями человека, знакомого с тем, как работает сложение и вычитание.
Но в AS/JS такие случаи единичны, и стандартная библиотеке не особо грешит когнитивными диссонансами типа описанного выше. В С++ такого рода вещи отданы на откуп программисту - как хочешь, так и пиши.

Но гораздо более серьезная проблема - недетерминированое поведение любой функции, потому что любая другая функция, в теории, может ей как-то навредить записав что-то в память мимо того места, куда она "должна" была записать.
Т.о. если в языке с автоматическим управлением паматью мы можем смело выдвигать какие-то предположения о том, как функции работают, и каких результов от них ожидать, то в С++ этого гарантировать нельзя. Даже функцию типа
Код:
const char * foo() { return "x"; }
Можно заставить вернуть не строку, если каким-то образом (а чаще всего - случайно) узнать адрес по которому записывается результат возвращаемый из функции, и записать туда что-то другое.
Поэтому, традиционно С++ называют языком с "плохо определенной", "размытой", или вообще "не определенной" семантикой. Конечно, у слова "семантика" есть много значений, и в каком-то другом значении, оно может быть применимо к тому, что происходит в С++ программах, но я имел в виду только конкретное определение формальной семантики компьютерных языков.
__________________
Hell is the possibility of sanity

Старый 19.06.2013, 12:57
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 22  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Дружище, к практике твои примеры имеют весьма отдаленное отношение. Или они крайне неудачны.
Я как бы даже не знаю.. никогда не думал о семантике языка, как о препятствии в его применении. Есть инструментарий, или ты умеешь им пользоваться, или нет, все просто. Вообще, твои высказывания о ЯП напоминают мне цитаты с какого-то съезда лингвистов (не программистов), даже лингвистов-гурманов, я бы сказал.
Цитата:
если в языке с автоматическим управлением паматью мы можем смело выдвигать какие-то предположения о том, как функции работают, и каких результов от них ожидать, то в С++ этого гарантировать нельзя
Видимо, имелось в виду что-то из свойств С++, где упоминается "неопределенное поведение"?

Старый 19.06.2013, 17:40
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 23  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
О как, все просто!
Нет, я сказал именно то, что хотел. Я не имел в виду неопределенное поведение, хотя в каком-то смысле оно может иметь отношение к вышесказанному, я говорил о плохо оперделенной операционной семантике. Это хорошо определенное понятие, которое не нужно интуитивно угадывать. Можно просто взять книжку (например, того же Бенжамина Пирса) / открыть Вики и прочитать, что это такое.

По поводу практики: а какие именно примеры? Я старался говорить обобщенно. "Нету стек трейсов" - это не пример, это явление которому подвержен весь язык в любом его проявлении. Знание этого факта не сделает меня лучшим программистом на С++. Хотя, может сделать печальным программистом на С++

Семантика языка описывает то, как мы его понимаем, и особенно то, как его понимает компилятор / интерпретатор. Может ли это быть препядствием? - если семантика состоит из множества противоречивых правил, непоследовательная, и т.д. то, конечно она будет препядствием.

В целом я бы охарактеризовал ситуацию следующим образом. Пока на С++ решаются тривиальные вещи, им пользоваться относительно удобно. Компилятор не встречает сложных случаев в разборе программы, код получается быстрый и компактный - все довольны. Но чем сложнее становится программа, тем хуже ситуация, и тем хуже по отношению к другим языкам, где семантика лучше определена.
Есть несколько языков, с компиляторами способными сгенерировать программы сравнимые по скорости с С++. Хаскелл - один такой язык, но я плохо его знаю, ОКамл я теперь знаю немножко лучше. Так вот, Благодаря более однозначной семантике и более скупому и последовательному набору правил, чем больше программа на ОКамле, тем больше вероятность того, что она будет быстрее / компактнее программы на С++ делающей такую же работу. Это достигается за счет того, что компилятору легче делать более глобальные предположения о намерении программиста.
Что интересно, в С++ неопределенное поведение как раз таки является тем фактором, который позволяет делать такие предположения компилятору!
__________________
Hell is the possibility of sanity

Старый 20.06.2013, 00:55
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 24  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Что ж, ситуация прояснилась и выглянуло солнце . Да, пожалуй на счет семантики я таки погорячился.
И все-таки, ты опять говоришь немного не про то . Есть очень большая область программирования, где просто нет менеджеров памяти с GC, и где наиболее информативным трейсом, порой, оказывается дамп.. Это разработка ОС, системных утилит, драйверов... та же графика в конце концов. Попробуй ка взаимодействие с грудой железа втиснуть в один хороший язык. Компиляторы то же создаются не по теоретическим домыслам о красоте как бы. Навороты С++ как раз призваны для таких нетривиальных вещей, не?. То, что "хеллоу ворлд" (утрированно) написать легко, это и так очевидно. Поэтому, как-то немного странно читать комментарии в духе "С (С++) - плохой язык", у него-де плохая семантика. Нужно просто (ага, просто) работать с ним на его поле.
Ну. а то, что после флеша идти в эти дебри решится не каждый - это не показатель .
PS. вот, навеяло как-то: http://www.flasher.ru/forum/showthread.php?t=113017


Последний раз редактировалось alexcon314; 20.06.2013 в 01:14.
Старый 20.06.2013, 01:40
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 25  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По поводу взаимодействия с железом - ну так на Лиспе писались операционные системы... Дилан позиционировался как язык для системного программирования. Го - в принципе мог бы заменить Си, и в нем очень много недостатков учли.
С++ - это явление похожее на олигополию, т.е. когда рынок занимается небольшой группой продавцов, которые согласны делится друг с другом, но никогда не с маленькими продавцами. Т.е. он когда-то занял финансово "правильную" нишу - на нем написали какие-то вещи, которые потом стали очень популярными, не зависимо от выбранной технологии (ДОС, например). Популярность продуктов потянула за собой вложения в разработку инструментов для языка, потом на этих инструментах воспиталось много людей, и так возникла лавинообразная ситуация, когда любые другие конкуренты не в состоянии что-то противопоставить. Только еще несколько таких же, по размеру, языков.
Собственно, таким же образом Кобол живет и процветает и по сей день. Кто-то мне год или два назад клялся, что и по сей день большинство кода в мире написано на Коболе - я не проверял, но охотно в это поверю. И ситуация точно такая же: нельзя отказаться изза легаси, чтобы поддерживать легаси создается еще больше легаси, но пока дело прибыльное, по причинам не зависящим от технологии, технология будет жить.
С++ отнюдь не единственный язык, который может компилироваться в нативный код, в котором есть указатели / возможность, при необходимости дописать код на ассмеблере (из того, что я знаю: на Паскале это возможно, в Лиспе - зависит от производителя, но в SBCL - да, можно, OCaml - да, можно, на счет вставок на ассемблере - не уверен, но указатели и прямой доступ к памяти там есть.) Во всех вышеперечисленных языках, естесственно есть специальные библиотеки для работы с системными процедурами. Например, Микрософт разрабатывал и разрабатывает библиотеку проверки драйверов на ОКамле.
__________________
Hell is the possibility of sanity

Старый 20.06.2013, 08:36
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 26  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Опа, опять на гризонте мировой заговор . Засилье си оплачно олигархами! Свободу попугаям!
Кто лоббировал си в мире линкус? Торвальдс? Вот ведь неотесанный, нет бы ему [подставить самостоятельно] взять, так ведь нет, продался в олигополию !(блин, где ты только слова такие выискиваешь )Я далек от всего этого, и считаю, что си занял свои позиции отчасти по причинам историческим, а в основном благодаря самому себе.
Можно, конечно, очень долго переливать из пустого в порожнее, но только факт остается фактом. Хлебушек на масло можно заработать, программируя на языке мэйнстрима, заморачиваться по поводу хороший он или плохой - это как поговорка про хорошую и плохую жену. Перечисленные тобой языки по большей части ни о чем, при всей их красоте.

Старый 20.06.2013, 11:06
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 27  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Это не мировой заговор, это тенденция в экономике - случается во всех сферах хозяйствования, где сложно получить прибыль без массированых вложений. Пример: телефонные компании, производители электричества, авиакомпании и т.д. Но у этой тенденции есть свои характеристики, и одна из них заключается в том, что качество или стоимость продукта могут сильно отличаться от "разумных" для выбраной категории.
Существует наивное представление о конкуренции, с точки зрения которого, логически следует, что если продуктом пользуется много людей, то он обязательно хороший. Но в случае с моно- и олигополиями это не работает, и нужны другие критерии оценки.
Разработка языка включающая в себя стандарную библиотеку, компилятор, отладчик и т.д. - сами по себе "не очень" затратный процесс, ну, по крайней мере не на столько, чтобы гарантировать эксклюзивность, но качественный компилятор - это таки очень трудозатратный процесс, восновном изза времени, которое занимает разработка.

Почему Си был выбран Линусом Торвалдсом? - Стандарт Юнкс описывает систему с обязательным Си компилятором, системные вызовы соответствующими конвенции Си, бутлоадер уже был написан на Си к тому времени и т.д. и т.п. Даже если бы он ненавидел Си, у него не было другого выбора.

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

ЗЫ. Олигополия - термин из теории игр, но используется еще много где, макроэкономика, например.
__________________
Hell is the possibility of sanity

Старый 20.06.2013, 11:30
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 28  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Ок. Сдаюсь
Но я как-то слабо себе представляю, что в обозримом будущем си уступит место другому языку. Но вам, теоретикам, виднее, конечно . Исследования, безусловно, нужны и очень хорошо, что они есть. Тут без вопросов.
И да, удачи в поисках работы!

Старый 20.06.2013, 13:16
koIIImarik вне форума Посмотреть профиль Отправить личное сообщение для koIIImarik Посетить домашнюю страницу koIIImarik Найти все сообщения от koIIImarik
  № 29  
Ответить с цитированием
koIIImarik
 
Аватар для koIIImarik

Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
Всем большое спасибо за ответы/комментарии =)

Отдельное огромное спасибо wvxvw за то, что напомнил про JS, ведь они с AS очень похожи по синтаксису (самому часто приходилось что-то делать на нём, правда не столь серьёзное, как AS разработки).

И ещё вопрос, возможно wvxvw или кто-то другой больше осведомлён в этом вопросе, чем я: какое портфолио необходимо набить для JS, чтобы быть интересным для работодателя? Т.е. у меня есть свои наработки, но я подозреваю, что они довольно скупые (несколько сайтов, которые делал для себя и всё).

Т.е. мне понятно, что необходимо рассказать о себе в плане Flash, чтобы у работодателей появился интерес к тебе, но я не очень представляю себе, что необходимо рассказать о JS (на ум приходит только диалог в форме "Вы знаете JS?" -> "Да, знаю").

Старый 20.06.2013, 13:46
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 30  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
koIIImarik
JQuery, ajax, highslide - и ты тру прогер. Более половины вакансий - твои!

Необходимо знание библиотек. Сделать на js что-то своими руками довольно долго и геморойно, поэтому приветствуются знания различных библиотек на все случаи жизни. Чем быстрее ты сможешь сделать плавное выпадающее меню - тем лучше. Конечно, необходимо понимание работы DOM страницы, html и css - твои лучшие друзья. Ещё необходимо смутное представление о безграничных и не осязаемых возможностях html5 (что-бы подчёркивать свою важность). Это если ты собрался в сайто-строители.. Да и приготовься большую часть времени верстать разметку, потому-что js программист и верстальщик - это чуть менее чем синонимы.

Для игростроя или чего посерьёзнее не знаю, но наверняка потребуются знания повыше среднестатического уровня тру js проггера. Соответствующие библиотеки, углубленные знания во всех тонкостях js-шного "ооп", реальное представление об html5 тегах.
__________________
Дети не должны знать о своих родителях

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:18.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.