Re[8]: Сложный язык для сложных срограмм.
От: Cyberax Марс  
Дата: 29.01.07 19:33
Оценка:
Gajdalager wrote:
> В теории .Нет кроссплатформенный, а моноплатформенность .Нета происходит
> не от каких-либо просчетов в архитектуре или спецификации, а из-за
> политики МС.
Вообще-то, я уже как-то флеймил, что из-за некоторых предположений в
модели памяти .NET — его будет сложно портировать на nccNUMA-машины
(когда они появятся ).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[2]: Сложный язык для сложных срограмм.
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 29.01.07 20:18
Оценка: +3
Здравствуйте, Hobot Bobot, Вы писали:

R>>Никого же не удивляет, что очень сложно строить мосты и небоскрёбы.


HB>Очень сложно на этапе проектирования — непосредственно делают опалубку и заливают бетон простые рабочие.


Некорректная аналогия: роль "простых работяг", выполняющих элементарные действия, играют не программисты, а компилятор.
"Залить бетон" это как "перегнать вот эту функцию в машинный код" или типа того.
Программист всегда остается "проектировщиком".

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


А в разработке ПО элементарные действия принято вообще автоматизировать
Re[7]: Сложный язык для сложных срограмм.
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 29.01.07 20:35
Оценка:
Здравствуйте, FR, Вы писали:

K>>Нет, с Немерле не справились бы. Как бы они вывод типов написали бы?


FR>Интересно как вывод типов в продукте может зависеть от языка реализации этого продукта? По твоему трансляторы пролога тоже невозможно на C/C++ написать?


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

K>>А вот компилятор C++ на Немерле написать — проще некуда. Только всё равно на 100% поддержку C++ сделать нельзя, как говорится, by design.


FR>выделеннное


Такая же гипербола, как и выделенное ниже:

L_L>>>Ну-ну, вон три человека сумели компилятор С++ с экспортом шаблонов написать, да еще и на С. Наверное, справились бы и с немерле.


А вообще, рад, что развеселил. Смех продляет жизнь. Приятно сделать доброе дело
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[8]: Сложный язык для сложных срограмм.
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 29.01.07 20:35
Оценка: +1
Здравствуйте, eao197, Вы писали:

K>>Вообще, алгоритмически нетривиальные вещи на C++ неудобно решать.


E>Пример можно?


Как показала моя личная практика, утилита, называемая compiler-compiler, даже на C# пишется гораздо проще, чем на C++. Сейчас экспериментирую с Nemerle. Уже полностью готовы синтаксический и семантический анализаторы входного файла. Вот, ИМХО, написание семантического анализатора и есть нетривиальная алгоритмическая задача. Отмечу, что входной файл для утилитки имеет гораздо более сложную структуру, чем входной файл для yacc. Там нужно обойти и проанализировать AST, сделать подстановки, проверить, чтобы не было рекурсивных подстановок. Потом генерируются совокупность регулярных выражений по описанию лексического анализатора и формальная КС-грамматика по описанию синтаксиса.

Тут можно возразить, что это сделает любой школьник и что есть же более сложные задачи — например, факторизация числа. Но тут рулит не С++ и даже не Nemerle, а метематика (а реализовать можно хоть на ассемблере, Кнут так и делает). Кстати, то же относится и к системе вывода типов в Nemerle. Правда, там есть как математическая составляющая, так и просто сожный в реализации алгоритм. Вот пример того, что на C++ решать неудобно.

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


Всё познаётся в сравнении. Есть задачи, очень неудобно решаемые в императивном стиле, зато удобно решаемые в функциональном. Бывают задачи, обладающие обратным свойством. Очень хорошо, если язык позволяет легко и эффективно решать и тот и другой класс задач. Из известных мне языков таким полезным свойством обладают Nemerle и в меньшей степени Python и Lisp.
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[3]: Сложный язык для сложных срограмм.
От: Hobot Bobot США  
Дата: 29.01.07 21:01
Оценка:
Здравствуйте, Alxndr, Вы писали:

A>Некорректная аналогия: роль "простых работяг", выполняющих элементарные действия, играют не программисты, а компилятор.


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

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


A>А в разработке ПО элементарные действия принято вообще автоматизировать.


Ну так и раствор нынче не лопатами замешивают. По крайней мере, если речь не идет о постройке погреба на даче.
What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
Re[9]: Сложный язык для сложных срограмм.
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.01.07 21:52
Оценка: +1
Здравствуйте, konsoletyper, Вы писали:

K>>>Вообще, алгоритмически нетривиальные вещи на C++ неудобно решать.


E>>Пример можно?


K>Как показала моя личная практика, утилита, называемая compiler-compiler, даже на C# пишется гораздо проще, чем на C++. Сейчас экспериментирую с Nemerle. Уже полностью готовы синтаксический и семантический анализаторы входного файла. Вот, ИМХО, написание семантического анализатора и есть нетривиальная алгоритмическая задача. Отмечу, что входной файл для утилитки имеет гораздо более сложную структуру, чем входной файл для yacc. Там нужно обойти и проанализировать AST, сделать подстановки, проверить, чтобы не было рекурсивных подстановок. Потом генерируются совокупность регулярных выражений по описанию лексического анализатора и формальная КС-грамматика по описанию синтаксиса.


Реализацией compiler-compiler я сам когда-то занимался в свободное от работы время. На C++, естественно. Никакой алгоритмической сложности там не было -- просто был взят алгоритм генерации правил подстановки Флойда (выслушенный когда-то на курсе системного программирования в университете) и закодирован на C++. Самый сложный кусок -- выделение типов правил грамматики и генерация правил подстановки Флойда занимает всего около 700 строк. И сложности там нет, только объем за счет for-ов.

Так что пример мимо кассы.
Ладно бы вы приводили примеры из области расспознавания образов или речи. Говорят там действительно C++ (как, думаю и другие императивные языки) не у дел.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Сложный язык для сложных срограмм.
От: Павел Кузнецов  
Дата: 29.01.07 21:59
Оценка: 14 (2) :)
Здравствуйте, Андрей Хропов, Вы писали:

АХ> Очень много чего напихали (и еще больше хотят) и теперь попробуй-ка напиши для этого дела компилятор. Я уж не говорю, что он жутко медленным будет.


Самое забавное, что line-by-line компилятор от Microsoft для C++ быстрее, чем их же компилятор для C# Проблема компиляции C++ не столько в сложности языка, сколько в модели включения. Собственно, главный бич C++ и есть (включая проблемы ODR и т.п.). Благо, это понимает большое количество народу, и есть шансы, что дело исправится, возможно, даже до выхода следующего стандарта.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[10]: Сложный язык для сложных срограмм.
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 29.01.07 22:23
Оценка:
Здравствуйте, eao197, Вы писали:

K>>Как показала моя личная практика, утилита, называемая compiler-compiler, даже на C# пишется гораздо проще, чем на C++. Сейчас экспериментирую с Nemerle. Уже полностью готовы синтаксический и семантический анализаторы входного файла. Вот, ИМХО, написание семантического анализатора и есть нетривиальная алгоритмическая задача. Отмечу, что входной файл для утилитки имеет гораздо более сложную структуру, чем входной файл для yacc. Там нужно обойти и проанализировать AST, сделать подстановки, проверить, чтобы не было рекурсивных подстановок. Потом генерируются совокупность регулярных выражений по описанию лексического анализатора и формальная КС-грамматика по описанию синтаксиса.


E>Реализацией compiler-compiler я сам когда-то занимался в свободное от работы время. На C++, естественно. Никакой алгоритмической сложности там не было -- просто был взят алгоритм генерации правил подстановки Флойда (выслушенный когда-то на курсе системного программирования в университете) и закодирован на C++. Самый сложный кусок -- выделение типов правил грамматики и генерация правил подстановки Флойда занимает всего около 700 строк. И сложности там нет, только объем за счет for-ов.


Кстати, алгоритм получения канонической LR-системы вообще занимает менее 300 строк. Это далеко не самая сложная штука. Нужно распарсить и проанализировать входной файл (а это не так просто в моём случае). Нужно сгенерировать код. Можно ещё поэкспериментировать с нормальным error reporting в алгоритме LR, компиляцией магазинного автомата, автоматизированным построением AST и т.д. Собственно, есть уже формализованные алгоритмы построения КК и здесь главную роль играет не язык, а математика.

E>Ладно бы вы приводили примеры из области расспознавания образов или речи. Говорят там действительно C++ (как, думаю и другие императивные языки) не у дел.


Тут тоже математика, языки ни при чём. Однако, думаю, для таких задач есть свои языки (Lisp, Prolog и т.д.), на которых реализация будет читабельнее
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 23:14
Оценка: +1
Здравствуйте, remark, Вы писали:

WolfHound, это сюда слил чтобы было удобнее ногами это дело бить? Или чтобы бригада была по ударнее?

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

К тому же термин "сложный" не очень хорошо здесь подходит. Я бы его заменил на выразительный.
Так что если фразу заменить на:
"Для решения сложных задач нужен выразительный и гибкий язык.", то я бы с удовольствием под ней подписался. Только С++ отнюдь не выразителен и не так гибок как хотелось бы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 23:14
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>а то я вас не знаю


Люди меняюстя. Меняюстя их привычки и привязанности. Откровенно говоря после занкомства с Nemerle смысл в использовании C# я вижу исключительн из-за того, что у него лучше поддержка в разного рода визардах, технологиях и IDE.

Если в сравнении с C# 2.0 С++ и может еще что-то противопоставить, то в сравнении с Nemerle он сливает по всем пунктам кроме скорости и потреблению памяти в конечных приложениях. Но и тут он не так уж и сильно впереди. И что самое главное с ростом производительности железа и оттачичанием технологий С++ становится все менее и мее актуальным.

В области, прикладного программирования в С++ уже сосем мало тлка. Скоро очередь дойдет и до относительно системного ПО. Первыми будут компиляторы и IDE, а там и до всяких вордов не далеко.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 23:14
Оценка: +3 -1 :)
Здравствуйте, remark, Вы писали:

R>Какие интересно задачи не позволяет решать С++? Имхо, если С++ сегодня не позволяет, то ни один язык сегодня не позволяет её решить.


Ой, всего лишь одну. Писать надежный и хорошо читаемый код.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 23:14
Оценка: -1
Здравствуйте, WolfHound, Вы писали:

WH>Например компилятор nemerle. Написать его на С++ настолько сложная задача что справится с ней не сможет даже мелкософт с его гигабаксами. Меж тем на nemerle его ниписали два студента.


Да ладно тебе. С мегабаксами можно все. Можно и на ассемблере его написать. Создадут отдел планирования, распишут все на фунции по 20 байт. Потом создадут по департаменту для кодирования каждой фичи и в итоге получат нужный результат. Ну, лет так за 5.

Конечно это будет сопоставимо с тем, что два студента могут залудить за 3 года на другом средсве, но все же более чем возможно.

WH>И больше всего у них проблем возникает с ошибками в CLR который сам понимаешь кем и начем написан. А ведь мелкософт может позволить себе нанять элиту.


Видили мы код их элиты.

WH>Что уж говорить о конторах помельче...


А вот это да. Думаю, не видать нам РеШарпера как своих ушей если бы его пришлось писать на С++.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 23:14
Оценка: -1
Здравствуйте, Константин Л., Вы писали:

КЛ>только вот теперь c# уже не в моде. В моде nemerle


А то!

КЛ>PS: Ну зачем ты сюда приперся (не обижайся только)? Тут нам очередной холивар не нужен. Мы тут новые фичи с++ обсуждать пытаемся.


"Сложный язык" — это крутая мега-фича. Ее конечно грех не обсудить .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 23:14
Оценка:
Здравствуйте, remark, Вы писали:

WH>>>>А для абсолютно сложных задач нужно что-то попроще и помощьнее.

R>>>Под complex он подразумевает не сложный (как алгоритм), а скорее комплексный. Т.е. некая real-world задача с неким абсолютно непредсказуемым набором нефункциональных требований, и которые могут непредсказыемым образом эволюционировать.
WH>>И как тут поможет С++?

R>У него нет семантической пропасти.


Ой, так любопытно. Объясни, плиз, что такое "семантическая пропасть"?

Если можно, с примерами.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 23:14
Оценка: +1
Здравствуйте, remark, Вы писали:

R>Поглядел:

R>

R>Copyright (c) 2003, 2004 The University of Wroclaw.

R>Всё ясно
R>Диплом/кандидатскую кто-то видимо защитил

Это еще что... Прикинь, а Страуструп PhD на С++ заработал.

R>А если серьёзно, то — да как хочешь она будет выглядеть.

R>Есть просто надо ограниченный набор структур сериализовать — то просто перечислением полей в функции сериализации.
R>Если сериализовать действительно много — то можно подумать о генераторе кода — perl/самописный/готовый — asn.1 или ещё что-то.
R>Можно препроцессор подпрячь.
R>Можно описать список полей на template metaprogramming, тогда получится compile-time рефлекшн.
R>Можно ввести базовые классы для классов и полей, что б автоматически собирать информацию о структуре.
R>...
R>В общем несколько хватит фантации и какие требования.

Понятно. Ты молодец. Твоя фантазия очень правильно работает. Главное не использовать для этого сам С++. Потому как получится, ну, очень запутанно и неудобно. +100

Ради хомхмы, попробуй любыми перечисленными тобой средствами сделать так чтобы можно было просто пометить тип (один из тысячи) каким-то образом как сериализуемый, и чтобы автоматом, при компиляции, создался код сериализации для всего на что этот тип ссылается (потентциально для всей тысячи классов).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.01.07 23:14
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>и много там в CLR ошибок? Что-то сомневаюсь, что они только и знают, что продираться среди них.


К сожалению, хватает. Причем многие перекачевывают из версии в версию. Например:
https://connect.microsoft.com/feedback/viewfeedback.aspx?FeedbackID=97425&amp;wa=wsignin1.0&amp;siteid=210
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Сложный язык для сложных срограмм.
От: Павел Кузнецов  
Дата: 29.01.07 23:15
Оценка: 15 (2) +1 -1 :))) :))
Здравствуйте, konsoletyper, Вы писали:

L_L>> Ну-ну, вон три человека сумели компилятор С++ с экспортом шаблонов написать, да еще и на С. Наверное, справились бы и с немерле.


K> Нет, с Немерле не справились бы. Как бы они вывод типов написали бы?


Повторно использовали бы код, делающий то же самое для операнда sizeof() и перегрузки функций?
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[9]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.01.07 00:18
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Главным образом я хочу получить ответ на свой вопрос:

E>

E>Вот тут не очень понял. Ты имеешь ввиду, что сложные кроссплатформенные системы нельзя писать на C++? Или что тем, кто не пишет сложных кроссплатформенных систем, C++ с его фичами не нужен?

E>поскольку твою фразу о разработке сложных кроссплатформенных систем я не понял

Мне кажется, он имел в виду, что на С++ очень сложно писать переносимый код. Сложно потому, что стандарт реально почти никем не реализован. Сложно потому, что сложно качесвтенно портировать компиляторы. Сложно потому что много UB. Сложно потому, что язык в угоду оптимизации создает массу сложностей вроде платформно-зависимых типов...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.01.07 00:18
Оценка:
Здравствуйте, eao197, Вы писали:

E>Пример можно?

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

Мне кажется замечательным примером могут являться компиляторы Ди и Немерле. Их фронтэнды примерно равны по объему, но по возможностям различюатся в разы. По времени написания тоже. Ди раза в два-три страше.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Сложный язык для сложных срограмм.
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.01.07 00:18
Оценка: -2
Здравствуйте, Константин Л., Вы писали:

КЛ>хм...Издеваешься? Нормальный человек бы описание хоть привел, что тут должно делаться. И то, что ты его не привел — твоя проблема. И не удивляйся, что нико не захочет тебе на это отвечать.


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

Грамматика следующая:
Message ::= "message" Identifier '(' parms ')' ';'.
State   ::= "state"   Identifier '{' decls '}'.
...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.