_>>Причём тут цель? Какие проблемы? Куда с темы съезжаешь?
Ты утверждаешь что преобразование высокоуровневых инструкций в низкоуровневые компилятором С есть или что этого преобразования нет?
BC>Тебе нужно отличать компиляторы от кодогенераторов.
Это такой ответ на однозначный вопрос??
BC>У компиляторов цель собрать файл с машинными инструкциями. javaс с первых строк смотрит на нас с недоумением. Равно как компилятор C# и тыщи других.
Я в общем тоже сомневаюсь. Вот компилятор C, например, генерирует некие объектники, которые для исполнения непригодны. Они пригодны лишь для чтения, и выбор выходного формата определяется ключами компиляции. Один из форматов доступен для чтения человеком — там вполне себе ассемблер (gcc -S например). Более того, много лет назад, были компиляторы C которые только так и работали — генерировали асм, который потом шёл в TASM/MASM. Но сейчас чаще используется другой формат, который другая программа — линкер, собирает во что-то ещё. Но даже это что-то, для исполнения тоже не годится — нужен ещё системный лоадер, который напоследок фиксит там адреса всякие, располагает что где надо, и только после этого можно говорить о каких-то инструкциях.
BC>У кодогенераторов — нагенерить код другого, более низкоуровнего языка. Википедия, статья Трансляторы. Там и про компиляторы, и стадии генерации внезапно, тоже есть.
Re[30]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, BoobenCom, Вы писали:
BC>Компилятор Си не генератор кода ассемблерных инстукрций. Его цель не файл с листингами ассемблерных комманд, а бинарный файл с машинными коммандами. BC>И да, если возникают проблемы с быстродействием Си, спускаются на уровень ниже и пишут ассемблерные вставки, тюнят алгоритм. Генератору места там нет.
Это ты просто не осмыслил задачу как следует. На самом деле разницы между ассемблерным листингом и машкодами нет. Это два представления одного и того же. Компиляторы перед генерацией машкодов производят многочисленные преобразования внутренних представлений программы. И последних представлений генерируются машкоды. Но с тем же успехом из них и ассемблерные листинги можно сгенерировать. Это делают многие компиляторы.
Собственно компилятор (он же транслятор) это преобразователь из одного языка в другой. Это общее его определение. Если не веришь, сходи на Википеди и убедись.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, BoobenCom, Вы писали:
BC>Тебе нужно отличать компиляторы от кодогенераторов.
В этом нет особого смысла. Например, первый компилятор С++ был годогенератором в С. Но от этого он не переставал быть компилятором С++.
Компилятором обычно называют странслятор преобразующий код на высокоуровневом языке в низкоуровневый язык более близкий к железу. Общепринято, что это машкоды или пи-код. Но в принципе это может быть и код на С. Си очень не плохо подходит на роль низкоуровневого языка, так как очень просто, имеет тучу компиляторов в машкоды на разных платформах, и близок к железу. Далее остается добавить одну стадию компиляции и получи исполняемые файлы.
BC>У компиляторов цель собрать файл с машинными инструкциями. BC>У кодогенераторов — нагенерить код другого, более низкоуровнего языка.
Вот только разница между этим не очень большая. Промежуточная генерация С чуть-чуть замедлит процесс компиляции, но резко упростит компилятор. Ты можешь скрыть эту стадию, если хочешь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, Ikemefula, Вы писали:
I>Если брать буквальный перевод, то надо признать, что из Жигуля путем добавления фич можно сделать даже Белаз, не то что Порше Кайен.
С точки зрения абстракции так оно и есть. А не делают так только потому, что проще с нуля все сделать, чем фичи добавлять.
С языками же все совсем не так.
В прочем, Немерл и был создан с нуля. К мимикрии под Шарп он шел долгие годы. Первая версия была написана на МЛ-е. Это и сейчас можно наблюдать, если посмотреть начальные комиты в репозитории.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, BoobenCom, Вы писали:
BC>>На самом деле разницы между ассемблерным листингом и машкодами нет.
Есть разница в недокументированых возможностях.
Но не суть важно, вопрос к обеим.
Каким образом программа на Немерле будет работать быстрее чем на Си ?
И как убедить человека, если нужно улучшить быстродействие программы, переписать ее не с С# на Си
А с С# на Немерле (Нитра).
В этом был вопрос.
И вы почемуто потянули для себя этот бесполезный спор.
Re[32]: Nemerle через 5 лет - выстрелит или скончается?
BC>Здравствуйте, VladD2, Вы писали:
VD>>На самом деле разницы между ассемблерным листингом и машкодами нет. BC>Есть разница в недокументированых возможностях.
Даже не так However, in some cases, an assembler may provide pseudoinstructions (essentially macros) which expand into several machine language instructions to provide commonly needed functionality. For example, for a machine that lacks a "branch if greater or equal" instruction, an assembler may provide a pseudoinstruction that expands to the machine's "set if less than" and "branch if zero (on the result of the set instruction)". Most full-featured assemblers also provide a rich macro language (discussed below) which is used by vendors and programmers to generate more complex code and data sequences.
Ассемблер есть в какойто мере небольшой абстракцией над машинными коммандами.
Тоесть разница между ассемблерным листингом и машкодами есть, это не тупое соответствие имен к машкодам.
Re[11]: Nemerle через 5 лет - выстрелит или скончается?
BC>Каким образом программа на Немерле будет работать быстрее чем на Си ?
А если критическая важная часть будет компилироваться на CUDA или FPGA
BC>И как убедить человека, если нужно улучшить быстродействие программы, переписать ее не с С# на Си
Для начала он должен посидеть с профайлером не один час, прежде чем принимать такое радикально решение
BC>А с С# на Немерле (Нитра). BC>В этом был вопрос. В реальной жизни люди ищут пути вытягивать работающий код через трансляцию
, а не кидаться всё переписать. Переписать что-то большое и работающее может стоить дороже чем подарить клиенту, у которого тормозит, новое железо.
BC>И вы почемуто потянули для себя этот бесполезный спор.
А кто-то пытался убедить тебя в том что Nemerle будет быстрее чем что-то там? Разве имеет смысл вообще сравение на скорость сферических программ в вакууме? Мы же сейчас как школота, спорим "кто сильнее, бэтмэн или человек-паук?".
. Тебе лишь объясняют, что при достаточной универсальности транслятора, переписывать ничего не надо. Достаточно лишь создать дополнительные преобразования для получения требуемого результата.
Re[6]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, GarryIV, Вы писали:
GIV>Да оно же одинаково! Только else if надо писать.
Вообще-то оно процентов на 10 короче и линейнее. Понятно, что чем сложнее пример, тем больше различие, но и тут выигрыш на лицо.
GIV>PS: а че стек оверфлоу не будет?
Это еще одна фича языка — гарантированная оптимизация (переписывание в цикл) концевой рекурсии.
Так что прибавь в этот пример еще цикл на шаре, так как в нем оптимизация концевой рекурсии не гарантируется.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, GarryIV, Вы писали:
DS>>И это, компилятор рекурсию развернет в цикл, если обернуть матч в локальную ф-цию.
GIV>Это видимо для пущей простоты и читаемости.
Заворачивать ничего не надо. Приведенный пример и так развернется в цикл во время компиляции.
И, да — это для простоты. Для простоты использования функциональных алгоритмов. В Немерле можно использовать циклы, а можно концевую рекурсию. Результат будет одинаков. В Шарпе же концевая рекурсия будет оптимизироваться в релизи некоторыми рантаймами, а некоторыми не будет. Короче, не гарантировано спецификация, а значит не применимо для общего случая и дает оверхед, даже если переполнения стека не произойдет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, AlexRK, Вы писали:
ARK>Так не рябит, хотя если операторов будет побольше, все равно придется блоки делать многострочными. ARK>Но теперь на виду корявость проверки длинных условий.
Что бы ты не делал, переписав код на Шарп ты получишь более корявое решение.
DarthSidius пытался продемонстрировать, что в Немерле можно избежать вложенных ветвлений превратив их в плоский список.
Мелочь, конечно, но их в Немерле море.
ARK>Недавно тут некий VladD2 спрашивал про неконсистентность. Вот без особого моего желания всплыл пример: почему условия начинаются с символа "|", а продолжаются ключевым словом "when"? Почему не сделать "case-when-then"? Или "when-if-then"?
По грамматике. Вот только "неконсистентность" тут не причем.
Один из видов паттернов — это подстановочный символ (вилкард) — "_". Он сопоставляется с любым выражением. Так же есть паттерн "переменная". Она так же сопоставляется с любым выражением, но позволяет связать с ним имя.
Guard = это дополнительное условие применимое к любому паттерну. В том числе и к паттернам "_" и "переменная". Таким образом можно создать вырожденный match который паттерны которого будут всегда сопоставляться, но вызовется только тот, чей Guard вернет true. Если таких Guard-ов несколько, то сработает тот что указан в матче раньше.
ARK>Еще тут же — почему символ "=>" используется как в ветках ПМ, так и в лямбдах, в разных семантически контекстах, но похожих синтаксически?
Нормальное явление для языков. Тем более, что по смыслу эти вещи очень похоже. Тебя не смущает, что в C# using используется и в качестве стейтмента, и в качестве директивы импорта? А то что в дженериках используются знаки < и >?
Короче, ты просто придираешься.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Nemerle через 5 лет - выстрелит или скончается?
Если серьезно, тебе показывали абстрактный пример. Ты начал умничать. В этом примитивном случает ты может и сможешь переписать код на ФВП, но во общем случае — нет. К тому же по соображениям производительности ФВП могут быть недопустимы.
В общем, не стоит подменять тему обсуждения. Тут выразительность языка сравнивается, а не проводится турнир "перепиши код короче". На лябдах и на Немерле можно.
К тому же это явно не эквивалентный код. Твой вариант а) обламывается на конце файла: б) не его нельзя вызвать последовательно для получения значений. Короче, это сжатие методом jpeg, с потерей качестве .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, bazis1, Вы писали:
B>Ну тогда надо сравнивать код реализации итератора с кодом вашего вундер-компилятора
Тебе пример и на шарпе написали. Подразумевается, что эта функция может вызваться последовательно для считывания отдельных строк из потока.
Но вряд ли речь идет о чтении данных. Человек вам пытался пример показать. Но вы снова работаете мартышками. То к темени очки приложите, то к линк-у...
B>Ты хочешь понять, почему у вас мало юзеров, или меня убедить что завтра все вдруг оценят ваш немерле и пойдут им пользоваться?
У кого у нас? Мы сами юзеры. А вы мартышки из известной басни. И заняться вам не чем. Вот вы здесь и занимаетесь гоном на вещи которые понять не смогли.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, BoobenCom, Вы писали:
BC>Этот же код упадет со Stackoverflow при наличии длинного файла, не ? BC>Первый раз в жизни вижу такое ... хм ... экзотическоре решение на рекурсии.
Шарповская версия — да. Немерловая — нет, так как в Немерле ганатирована (спецификацией) оптимизация хвостовой рекурсии.
В Немерле реально циклов даже нет. Это все макросы переписывающие код в рекурсивные локальные функции. А уже компилятор оптимизирует код и превращает его в условные и безусловные переходы в МСИЛ-е (т.е. в аналоги циклов).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, IT, Вы писали:
IT>Это заблуждение. Для того, чтобы взлететь нужно с годик, два, три массово и навязчиво попиарить продукт где только можно. Какой для этого нужен бюджет понятия не имею. Но вот то, что новых фич там может и не быть совсем — это факт.
Согласен. Но и продукт должен быть надлежащего качества. Так что мы прежде чем по новой пробовать пиарить, все таки родим убер-реализацию .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, kaa.python, Вы писали:
KP>Гик-оринтированному, Windows-only языку никакие деньги и пиар не помогут. Надо просто перестать насиловать труп и закопать его
Ты пока там Раст продолжай ковырять. Вероятность, что он взлетит все же не нулевая.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, kaa.python, Вы писали:
KP>Как может умереть то, что и так мертво? Нашествие живых мертвецов и срочно требуется серебряная пуля?
Лучше скажи, как может быть мертво то, чем пользуются люди?
Вот сколько у тебя продуктов на Расте написано? У меня на Немерле где-то 10 приложений. В том числе Нитра, которая уже по сложности переплюнула Немерл.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, hi_octane, Вы писали:
BC>>Каким образом программа на Немерле будет работать быстрее чем на Си ? _>А если критическая важная часть будет компилироваться на CUDA или FPGA
Сколько кода уже скомпилировано в продакшин Немерле->CUDA\FPGA ?
BC>>И как убедить человека, если нужно улучшить быстродействие программы, переписать ее не с С# на Си _>Для начала он должен посидеть с профайлером не один час, прежде чем принимать такое радикально решение
А что там курить ? Шарп\Немерле по сравнению с Си скриптовый язык.
Ты вот эту штучку покури, например как на Си написана обычное Trie, может
горячий пыл CUDA\FPGA\Генераторы Шмырыгаторы поутихнет. http://judy.sourceforge.net/doc/shop_interm.pdf