|
|
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
kosh the bestподробнее: я высказал предположение, что транслятор llvm ir в машкод целевой платформы можно написать и на других языках, помимо си и с++ с терпимым провалом в скорости трансляции Какая разница - IR или C++? И то и другое должно транслироваться БЫСТРО . В том же Clang большая часть времени при компиляции тратися именно внутри LLVM (не верите - возьмите профайлер и убедитесь). И делать это быстро на чем либо отличном от C++ вы не сможете. Все остальное будет намного, недопустимо более медленным. далее я написал, почему все же на си и с++ будет быстрее - за счет нативных типов (в том числе и беззнаковых) Это как раз нисколько не преимущество, у JVM тоже они нативные, а беззнаковые тут ну совсем не нужны. и возможности напрямую работать с голой памятью, накладывая на нее структуры данных так понятнее? А этой фразы я вообще не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 22:18 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
oldjackalи возможности напрямую работать с голой памятью, накладывая на нее структуры данных так понятнее? А этой фразы я вообще не понял.а что непонятного? выделил мегабайт памяти, и размещай там объекты как хочешь. а в джаве - огромная фрагментация данных в куче. и весь доступ осуществляется через крупные цепочки ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 22:22 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNа что непонятного? Кривизна формулировки. выделил мегабайт памяти, и размещай там объекты как хочешь. Ну так и надо говорить про арифметику указателей. а в джаве - огромная фрагментация данных в куче. и весь доступ осуществляется через крупные цепочки ссылок. А вот это неверно. Как раз автоматический GC позволяет избежать фрагментации там, где руками это сделать очень непросто. Правда, в обсуждаемой задаче (компиляторы) это совершенно не важно, фрагментации там не будет в любом случае, так как мы можем оперировать очень хорошо разграниченными пулами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 22:33 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
kosh the bestдалее я написал, почему все же на си и с++ будет быстрее - за счет нативных типов (в том числе и беззнаковых) и возможности напрямую работать с голой памятью, накладывая на нее структуры данных так понятнее?Как будто в лиспах нет возможности накидать гадостей в голую память :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 22:50 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
oldjackal, ну хватит уже раскрутка компилятора, бутстрэппинг яву пишут на яве, лиспы тоже пишут на лиспах и прочее хватит тут всех убеждать, что компиляторы нужно писать на с++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 22:52 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
oldjackalЗа счет того, что в коде на C++ будут использоваться пулы - т.е., породил парсер AST, кодогенератор сделал из него LLVM IR модуль, и весь пул с AST тут же удаляется, тогда как в managed языках на этом AST потом будет долго спотыкаться GC. И так на каждом этапе компиляции, со всеми промежуточными структурами (а они могут быть очень большими).Ну то есть пулы придумали именно сиплюсплюсовцы и никак не раньше, ага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 22:55 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
kosh the bestхватит тут всех убеждать, что компиляторы нужно писать на с++У Си при построении компиляторов обнаруживаются два больших достоинства --- меньший дефицит годных кадров и достаточно удобные средства отладки, компенсирующие неприспособленность языка для задач сопоставления с образцом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:00 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
> Как будто в лиспах нет возможности накидать гадостей в голую память :) не очень понимаю, как это сделано вот пусть у нас есть бинарный файлик в определенном формате - пусть этот файлик выступает в роли простейшего хранилища обычной реляционной таблички с фиксированным количеством полей в сишке его можно прочитать в память и потом тупо начать накладывать структурки c полями, соответствующими полям таблицы на эту память по определенному смещению - тогда доступ к полям будет осуществлятся исключительно быстро а как это сделать в лиспах? там же все равно будут некие накладные расходы - скорей всего, будет происходить копирование этого куска памяти, соответствующего одной записи в некое s-exp для возможности дальнейшей обработки.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:03 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
iv_an_ruКак будто в лиспах нет возможности накидать гадостей в голую память :) В общелиспе? Так, чтоб об эту голую память GC не спотыкался? Не, нет такой возможности разумными путями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:10 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
kosh the bestяву пишут на яве Ага, так написали, что единственный действительно удобный для пользователя компилятор Java - это Jikes. Который, таки да, работает как раз более чем в десять раз быстрее чем родной компилятор. Угадайте, на чем он написан? лиспы тоже пишут на лиспах Ну, про этих в приличном обществе лучше вообще не говорить. хватит тут всех убеждать, что компиляторы нужно писать на с++ Уточнение - БЫСТРЫЕ компиляторы надо писать на C++. Да, язык низкоуровневый, некоторые вещи требуют большого объема boilerplate-кода, но за все за это мы получаем сверхсветовую скорость работы. Поверьте, оно того стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:13 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
iv_an_ruНу то есть пулы придумали именно сиплюсплюсовцы и никак не раньше, ага. Ну то есть пулы фундаментально несовместимы с тотальным GC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:14 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
kosh the bestа как это сделать в лиспах? Там вообще другая идеология, там глупо было бы этими вещами заниматься. Там скорее вот так сделают: http://okmij.org/ftp/Scheme/binary-io.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:16 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
iv_an_ruнеприспособленность языка для задач сопоставления с образцом. 1) Посмотрите на tablegen в LLVM 2) Посмотрите на Elsa (и конкретно на http://scottmcpeak.com/elkhound/sources/ast/index.html ) 3) Ничто не мешает и более сложные DSL поверх C++ (или какого либо препроцессора над C++) сделать. Можно даже аналог scrap your boilerplate сделать ( http://www.haskell.org/haskellwiki/Scrap_your_boilerplate ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:21 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
oldjackalАга, так написали, что единственный действительно удобный для пользователя компилятор Java - это Jikes. Который, таки да, работает как раз более чем в десять раз быстрее чем родной компилятор. Угадайте, на чем он написан?Ну угадали. И что? Оп-па - последний билд на SF датирован февралём 2005 года. Ну что сказать - всех уделал. P.S. Да, разумеется - IBM, взявши проект под своё крыло могла его закрыть и развивать, но "меня опять терзают смутные сомнения ...". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:25 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
iv_an_rukosh the bestдалее я написал, почему все же на си и с++ будет быстрее - за счет нативных типов (в том числе и беззнаковых) и возможности напрямую работать с голой памятью, накладывая на нее структуры данных так понятнее?Как будто в лиспах нет возможности накидать гадостей в голую память :)тут уж конкретный лисп нужно упоминать. а то в некоторых - нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:26 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
Ну, все, вывод ясен. С++ нужен для написания быстрых компиляторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2012, 23:29 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
oldjackal1) Посмотрите на tablegen в LLVM 2) Посмотрите на Elsa (и конкретно на http://scottmcpeak.com/elkhound/sources/ast/index.html ) 3) Ничто не мешает и более сложные DSL поверх C++ (или какого либо препроцессора над C++) сделать. Можно даже аналог scrap your boilerplate сделать ( http://www.haskell.org/haskellwiki/Scrap_your_boilerplate )В достаточно разумном компиляторе задачи сопоставления с образцами не заканчиваются с окончанием синтанализа, а только начинаются. И для их решения сишными средствами приходится городить толстый-толстый слой всякой ерунды, а чтобы эта ерунда шевелилась с разумной скоростью, приходится начинать с самого низа --- своя выделялка памяти большими кусками, свои пулы внутри этих кусков, свои специальные кучки внутри этих кусков, свои объекты в этих кучках и пулах (а typedef для этих объектов по историческим причинам у нас носит имя caddr_t :), свои структурки из этих объектов, специфические уже для конкретного транслятора, свои процедурки обходов этих структурок, сопоставлений с образцами, переписываний, поисков неподвижных точек... А ведь всё это --- здоровенный велосипед, многократно изобретённый и внедрённый, и он пишется не потому, что предыдущие плохи, а потому что в достаточно продолжительном проекте оказывается дешевле написать и поддерживать свой, чем интегрировать чужое и поддерживать эту интеграцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2012, 00:05 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
iv_an_ruoldjackalЯ так полагаю, "несколько" будет как минимум в порядок, если заменить C++ на Java или там Lisp какой. Хотите ждать результатов компиляции в десять раз дольше?Не знаю, как прям сейчас, а недавно самый быстрый код для честных 80-битных даблов (без GPU) генерили из смеси Austin Kyoto Common Lisp + Livermore SDL. Так что фраза "Java или там Lisp какой" выдаёт в вас немножко неспециалиста. Очевидно речь идет о том, на каком языке можно написать самый быстрый компилятор. iv_an_ruoldjackal, Сравнивать лисп и си по скорости компиляции ещё забавнее, так как си вообще компиляется до-о-олго, дольше любого паскаля, ну а лиспы компиляются быстрее любых паскалей. А сравнивать компиляции разного качества оптимизации --- ну, не знаю с чем сравнить. Очевидно речь идет о том, на каком языке можно написать самый быстрый компилятор. И так и сяк вопрос повернули. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2012, 04:12 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
kosh the bestoldjackal, ну хватит уже раскрутка компилятора, бутстрэппинг яву пишут на яве, А как этот компилятор называется? И какие библиотеки на яве могли бы помочь в написании компилятора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2012, 04:23 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
На чем пишут компиляторына каком языке можно написать самый быстрый компилятор.На ассемблере! Принципиальные возражения будут? Нет. При вложении достаточных денег написать можно. На практике почему-то так не делают. И пишут много на чём, выбирая нужный компромисс между производительностью и ценой разработки. Можете попробовать написать на плюсах самоприменимый mix ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2012, 09:34 |
|
||
|
Зачем нужен C++ ?
|
|||
|---|---|---|---|
|
#18+
iv_an_ruВ достаточно разумном компиляторе задачи сопоставления с образцами не заканчиваются с окончанием синтанализа, а только начинаются. Я где-то про парсинг вообще говорил? Библиотека ast в Elsa это уже совсем другой уровень. А уж tablegen и подавно. Вы бы хоть посмотрели внимательно, прежде чем комментировать. И для их решения сишными средствами приходится городить толстый-толстый слой всякой ерунды, Ой не надо. Чего там толстого-то? ADT это тупо tagged unions, компилятор даже довольно сложного языка шаблонов пишется на коленке за час максимум (код-то надо очень простой генерить, лесенки из if-ов и switch-ей получаются). а чтобы эта ерунда шевелилась с разумной скоростью, приходится начинать с самого низа --- своя выделялка памяти большими кусками, свои пулы внутри этих кусков, Все уже украдено до нас. Полно готовых аллокаторов. свои специальные кучки внутри этих кусков, свои объекты в этих кучках и пулах (а typedef для этих объектов по историческим причинам у нас носит имя caddr_t :), свои структурки из этих объектов, специфические уже для конкретного транслятора, свои процедурки обходов этих структурок, Какие такие процедурки? Весь этот boilerplate тривиально генерить из декларативного, высокоуровневого описания. сопоставлений с образцами, переписываний, поисков неподвижных точек... Опять же, тривиальный boilerplate. То, что всякие там компиляторы haskell делают - это вовсе не rocket science, это очень примитивное раскрытие простейших шаблонов. Такое и поверх C++ сделать элементарно. А ведь всё это --- здоровенный велосипед, многократно изобретённый и внедрённый, и он пишется не потому, что предыдущие плохи, а потому что в достаточно продолжительном проекте оказывается дешевле написать и поддерживать свой, чем интегрировать чужое и поддерживать эту интеграцию. Такие велосипеды делаются легко и быстро. Так что нет даже смысла искать готовое, настолько все тривиально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2012, 15:00 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38024122&tid=1342061]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
136ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 395ms |

| 0 / 0 |
