L>public class Program
L>{
L> public static void Main(string[] args)
L> {
L> var toSortInts = new[] {1, 8, 5, 22, 3};
L> var sorted = toSortInts.Select(curInt => new Task(() =>
L> {
L> Thread.Sleep(curInt);
L> Console.WriteLine(curInt);
L> }))
L> .ToList();
L> sorted.ForEach(t => t.start());
L> Console.ReadLine();
L> }
L>}
L>
У вас не работает с отрицательными числами. Держите на плюсах, слегка оптимизированный:
#include <iostream>
#include <vector>
#include <thread>
#include <chrono>
#include <algorithm>
template< typename It >
void sleepSort( const It& begin, const It& end )
{
if ( begin == end )
return;
const auto max = *std::max_element( begin, end );
const auto min = *std::min_element( begin, end );
for ( auto it = begin; it != end; ++it )
{
std::thread( [min, i = *it]
{
std::this_thread::sleep_for( std::chrono::milliseconds( i - min ) );
std::cout << i << std::endl;
} ).detach();
}
std::this_thread::sleep_for( std::chrono::milliseconds( max - min + 1 ) );
}
int main( int argc, char *argv[] )
{
std::vector<int> v = { 20, 5, 15, 10, -5, };
sleepSort( v.begin(), v.end() );
return 0;
}
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, Михaил, Вы писали:
М>>Какой же с++ все-таки избыточно-многословный...
N>Зато работает. В отличие от изначального варианта.
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, Михaил, Вы писали:
М>>Какой же с++ все-таки избыточно-многословный... CC>Это не сам С++, это заюзанная либа из стандартного комплекта.
Она же давно частью стандарта стала.
А вообще, я в том смысле, что по сути пишешь много, а понятно для непосвященного мало). В отличие от той же джавы или с#, которые любой сишник поймет даже не умея программировать на этих языках.
М>Она же давно частью стандарта стала.
Она всегда была неотъемлемой частью стандарта языка.
Языка C++ не существует вне стандартной библиотеки, ровно также и наоборот.
Здравствуйте, Михaил, Вы писали:
М>Она же давно частью стандарта стала.
Ещё раз: это всего лишь либа, поставляемая в комплекте с компилером. Никто не заставляет использовать именно её.
М>В отличие от той же джавы или с#, которые любой сишник поймет даже не умея программировать на этих языках.
Ты только что по сути сказал что шарпеи и жабники заметно тупее любого наСИльника
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, eskimo82, Вы писали:
E>Языка C++ не существует вне стандартной библиотеки
Это кардинально не так.
Я видел и участвовал в достаточном колве здоровенных проектов на С++, в которых не использовалось ни единого символа из "std::". Более того, на основании этого опыта я могу сказать что std таки сделана доволько уродливо. Можно сделать то же самое куда более внятно и просто.
E> ровно также и наоборот.
А вот наоборот верно.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Михaил, Вы писали:
М>>>Какой же с++ все-таки избыточно-многословный... N>>Зато работает. В отличие от изначального варианта. М>Это ж не от языка, а от писателя зависит
В том-то и дело. Если тебя смущает количество символов, то их можно и на плюсах сократить, использовав using. Но всё равно надо сравнивать одинаковые программы, а не работающую и чуть длиннее и неработающую и короче.
SaZ>>У вас не работает с отрицательными числами. Держите на плюсах, слегка оптимизированный:
А вот на Go.
package main
import (
"fmt"
"sync"
"time"
)
func main() {
sleepSort([]int{20, 5, 15, 10, -5})
}
func sleepSort(v []int) {
if len(v) == 0 {
return
}
min := v[0]
for _, e := range v {
if e < min {
min = e
}
}
wg := sync.WaitGroup{}
wg.Add(len(v))
for _, e := range v {
go func(e int) {
defer wg.Done()
time.Sleep(time.Millisecond * time.Duration((e - min)))
fmt.Println(e)
}(e)
}
wg.Wait()
}
CC>Я видел и участвовал в достаточном колве здоровенных проектов на С++, в которых не использовалось ни единого символа из "std::".
У меня для тебя плохие новости — стандартная библиотека это не только символы из std::, но и рантайм поддержка различных конструкций C++, типа dynamic_cast или operator new.
М>>Она же давно частью стандарта стала. CC>Ещё раз: это всего лишь либа, поставляемая в комплекте с компилером. Никто не заставляет использовать именно её.
Еще раз: Это часть компилятора, написаная на специальном (не C++) языке.
Здравствуйте, CreatorCray, Вы писали:
М>>В отличие от той же джавы или с#, которые любой сишник поймет даже не умея программировать на этих языках. CC>Ты только что по сути сказал что шарпеи и жабники заметно тупее любого наСИльника
Или ленивее разбираться в закорючках, если у них и так все работает. Ну и как говорится, Everyone knows 40% of C++. Unfortunately, it's never the same 40%
Здравствуйте, eskimo82, Вы писали:
E>У меня для тебя плохие новости
Да ну!
E>стандартная библиотека это не только символы из std::, но и рантайм поддержка различных конструкций C++, типа dynamic_cast или operator new.
Это называется C++ runtime
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
E>>У меня для тебя плохие новости CC>Да ну!
E>>стандартная библиотека это не только символы из std::, но и рантайм поддержка различных конструкций C++, типа dynamic_cast или operator new. CC>Это называется C++ runtime
Всё вместе это образует стандартную библиотеку. Которую практически невозможно отделить от компилятора, разве что только подхачить, но тогда и C++ уже не будет.
Здравствуйте, eskimo82, Вы писали:
E>Всё вместе это образует стандартную библиотеку. Которую практически невозможно отделить от компилятора, разве что только подхачить, но тогда и C++ уже не будет.
Дюд, не неси пурги. Ничего неотделимого там нет, это всё сказки.
Я лично писал на С++ там, где не было предусмотрено родного рантайма. Реально необходимые функции пишутся на том же С++, пара функций либо naked с интринсиками либо просто сразу на асме.
C++ это именно то, что встроено в язык. Всё что написано на самом С++ — вспомогательные либы.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, SaZ, Вы писали:
M>>Сложность O(n)? SaZ>Да,
SaZ>но только в абстрактной операционной системе, где сложность реализации таймеров О(1). Увы, в реальности таких ОС пока нет .
Это другое
CC>Я лично писал на С++ там, где не было предусмотрено родного рантайма. Реально необходимые функции пишутся на том же С++, пара функций либо naked с интринсиками либо просто сразу на асме.
Ты занимался хакерским анонизмом, т.к. поддерживать этот геморой людям теперь приходится с каждым выходом новой версии компилятора/платфоры/железа.
И еще поди ушел оттуда оставив это "подарком" для последователей.
Здравствуйте, eskimo82, Вы писали:
E>Ты занимался хакерским анонизмом, т.к. поддерживать этот геморой людям теперь приходится с каждым выходом новой версии компилятора/платфоры/железа.
Дооо, драйвера конечно же пересобирают каждый раз как новый компайлер выйдет, ага. И в каждой версии конечно же меняют ABI.
E>И еще поди ушел оттуда оставив это "подарком" для последователей.
Где юг показать или сам найдёшь?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
CC>Дооо, драйвера конечно же пересобирают каждый раз как новый компайлер выйдет, ага.
Драйвера не пишут на С++. А если и пишут то на уродливом "Си с классами и темплейтами без всего остального".
Даже без шикого использования темплейтов, т.к. многие вещи требуют поддержки со стороны компилятора и стандартной библиотеки
(например предикат std::is_pod или std::is_trivial, не говоря уже о всяких std::move и std::forward)
CC>И в каждой версии конечно же меняют ABI.
Именно так дело и обстоит — ABI С++ настолько нестабильно что двоичную совместимоть C++ кода никто серьезно даже и не рассматривает в виде ее отсутсвия.
E>>И еще поди ушел оттуда оставив это "подарком" для последователей. CC>Где юг показать или сам найдёшь?
Наговнокодил и свалил — теперь сознаваться неудобно вдруг стало ?
А как оно работает? Я так понимаю, на каждый элемент создаётся новый поток. Т.е. где-то в ОС создаётся список потоков. Потом каждый поток засыпает на N секуд. Это помещает поток в некую очередь спящих потоков. Эта очередь спящих потоков упорядочена? Насколько я понимаю, да, то собственно тут сортировка и происходит, т.е. мы используем сортировку из ядра ОС. Вероятно эта очередь реализована, как дерево. Поэтому такая сортировка по сути есть сортировка с помощью вставки в дерево поиска.
Здравствуйте, eskimo82, Вы писали:
CC>>Дооо, драйвера конечно же пересобирают каждый раз как новый компайлер выйдет, ага. E>Драйвера не пишут на С++.
Доброе утро! Много лет уже как.
E> А если и пишут то на уродливом "Си с классами и темплейтами без всего остального".
А можно перечислить это самое "остальное"?
E>Даже без шикого использования темплейтов, т.к. многие вещи требуют поддержки со стороны компилятора и стандартной библиотеки
И какие же?
E>(например предикат std::is_pod или std::is_trivial, не говоря уже о всяких std::move и std::forward)
Ты правда думаешь что это можно только через std сделать?
И самому написать аналог ну никак?
Более того, что эти врапперы реально кому то всерьёз настолько нужны что надо применять именно их.
Совсем народ отучился понимать что происходит под капотом.
CC>>И в каждой версии конечно же меняют ABI. E>Именно так дело и обстоит — ABI С++ настолько нестабильно что двоичную совместимоть C++ кода никто серьезно даже и не рассматривает в виде ее отсутсвия.
Вот поднял ты версию одного и того же production grade компилятора а там — трах тибидох, всё поменялось, да?
Самому не смешно?
E>PS: Юг ты и сам найдеш.
Давай давай, ветер в спину
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, vsb, Вы писали:
vsb>А как оно работает? Я так понимаю, на каждый элемент создаётся новый поток. Т.е. где-то в ОС создаётся список потоков. Потом каждый поток засыпает на N секуд. Это помещает поток в некую очередь спящих потоков. Эта очередь спящих потоков упорядочена? Насколько я понимаю, да, то собственно тут сортировка и происходит, т.е. мы используем сортировку из ядра ОС. Вероятно эта очередь реализована, как дерево. Поэтому такая сортировка по сути есть сортировка с помощью вставки в дерево поиска.
Нет, это стометровка бегунов с известными скоростями бега: стартуют все вместе, а финишируют как раз по сортированной последовательности.
CC>>>Дооо, драйвера конечно же пересобирают каждый раз как новый компайлер выйдет, ага. E>>Драйвера не пишут на С++. CC>Доброе утро! Много лет уже как.
Ты там слово class увидел и решил что это C++ ?
В этом случае у меня для тебя плохие новости.
E>> А если и пишут то на уродливом "Си с классами и темплейтами без всего остального". CC>А можно перечислить это самое "остальное"? E>>Даже без шикого использования темплейтов, т.к. многие вещи требуют поддержки со стороны компилятора и стандартной библиотеки
Ну открой стандарт и почитай. Или читать не умееш, хочеш чтобы тебе рассказали ?
E>>(например предикат std::is_pod или std::is_trivial, не говоря уже о всяких std::move и std::forward) CC> CC>Ты правда думаешь что это можно только через std сделать? CC>И самому написать аналог ну никак? CC>Более того, что эти врапперы реально кому то всерьёз настолько нужны что надо применять именно их.
Эти "враперы" — часть компилятора и могут быть написаны на специальном вендоро-зависимом не C++ языке.
А могут и вообще не иметь исходника.
CC>Совсем народ отучился понимать что происходит под капотом.
По капотом стандартной библиотеки нет никакого C++. А есть совершенно другой compiler-bound язык.
CC>>>И в каждой версии конечно же меняют ABI. E>>Именно так дело и обстоит — ABI С++ настолько нестабильно что двоичную совместимоть C++ кода никто серьезно даже и не рассматривает в виде ее отсутсвия. CC> CC>Вот поднял ты версию одного и того же production grade компилятора а там — трах тибидох, всё поменялось, да? CC>Самому не смешно?
Нет не смешно. Именно так и обстоят дела и в gcc, и в clang, и даже в студии.
E>>PS: Юг ты и сам найдеш. CC>Давай давай, ветер в спину
У тебя штаны упали и шнурки развязались, одна голая жопа сверкает.
N>AMD драйвера для видеокарт на плюсах пишет, классы, наследование и шаблоны там есть. Так что у меня для тебя плохие новости — ты застрял в 80-х.
У меня для тебя тоже плохие новости: AMD драйвера на плюсах не пишет и не может писать полноценно на плюсах т.к. поддержка исключений C++ отсутсвует в Linux kernel.
А это значит — чуть что и kernel panic.
Т.к. исключение мы не то что обработать не можем, мы даже выбросить его не можем. В целом так себе удовольствие. И влечет это за собой невозможность полноценно использоваать плюсы, начиная от невозможности корректно сообщить об ошибке из конструктора (привет двум стадиям конструирования из MFC и признакам isValid), заканчивая невозможностью использовать почти весь функционал стандартной библиотеки (контейнеры, некоторые алгоритмы типа sort, умные указатели, etc...)
Т.е. практически всего того что делает язык именно плюсами.
Что остается ? Остается "Си с класами" и наивное убеждение что код написан на плюсах.
Здравствуйте, eskimo82, Вы писали:
E>Т.к. исключение мы не то что обработать не можем, мы даже выбросить его не можем.
А, ну понятно какого уровня у тебя понимание.
И бросаем и ловим, более того в кернеле дохрена чего надо заворачивать в catch, даже C API.
E>заканчивая невозможностью использовать почти весь функционал стандартной библиотеки (контейнеры, некоторые алгоритмы типа sort, умные указатели, etc...)
Весь функционал как раз доступен, не в std реализации разумеется.
E>Т.е. практически всего того что делает язык именно плюсами.
плюсами язык делают исключительно те фичи, которые нельзя реализовать библиотечно.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
E>>Т.к. исключение мы не то что обработать не можем, мы даже выбросить его не можем. CC>А, ну понятно какого уровня у тебя понимание. CC>И бросаем и ловим, более того в кернеле дохрена чего надо заворачивать в catch, даже C API.
У тебя путаница между C++ исключениями, SEH и расширениеями одного компилятора.
Видимо вызвананая професиональной деформацией на почве одной и далеко не лучшей платформы.
E>>заканчивая невозможностью использовать почти весь функционал стандартной библиотеки (контейнеры, некоторые алгоритмы типа sort, умные указатели, etc...) CC>Весь функционал как раз доступен, не в std реализации разумеется.
Не доступен, либо доступен ногами через одно место. И я уже привел выше некоторые примеры, которые ты благополучно проигнорировал.
E>>Т.е. практически всего того что делает язык именно плюсами. CC>плюсами язык делают исключительно те фичи, которые нельзя реализовать библиотечно.
Стандартная библиотека не реализуется "библиотечно", это неотьемлимая часть языка с точки зрения API и неотьемлимая часть (библиотек поддержки) компилятора с точки зрения реализации.
Здравствуйте, eskimo82, Вы писали:
CC>>И бросаем и ловим, более того в кернеле дохрена чего надо заворачивать в catch, даже C API. E>У тебя путаница между C++ исключениями, SEH и расширениеями одного компилятора.
Это ты по какой то причине пытаешься разделить по сути одну и ту же сущность на какие то совершенно раздельные.
E>Видимо вызвананая професиональной деформацией на почве одной и далеко не лучшей платформы.
А, ещё один адепт "элитной ОС", где главный пингвин С++ ниасилил а потому в ядро его не пускает. Ну да, у вас там в общем случае с заменой RTL плоховато.
Благо есть другие ОС, где народ не хочет бойлерплейтить и таки почесался по поводу C++ RTL для ядра.
Если чо в ядре макоси в кернеле поддержка C++ имеется.
E>Не доступен, либо доступен ногами через одно место.
И много ты кода в кернеле написал чтоб заявлять подобную чушь?
Для меня это bread, butter с толстым слоем икры поверху. Win/BSD/Darwin
E> И я уже привел выше некоторые примеры, которые ты благополучно проигнорировал.
Это просто тебе ответы не понравились.
E>Стандартная библиотека не реализуется "библиотечно"
А header файлы это тогда что?
Т.е. если я сотру все headers от std то внезапно всё перестанет работать?
Вот только на практике компилятору они нафиг не упали — всё работает.
E>, это неотьемлимая часть языка с точки зрения API и неотьемлимая часть (библиотек поддержки) компилятора с точки зрения реализации.
Даже RTL таки заменяемая часть, так что чушь. Берёшь компилер, пишешь на том же самом С++ пару платформенных функций, на которые тот вставляет референсы, ожидая что поддержка платформы будет прилинкована и всё.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
CC>>>И бросаем и ловим, более того в кернеле дохрена чего надо заворачивать в catch, даже C API. E>>У тебя путаница между C++ исключениями, SEH и расширениеями одного компилятора. CC>Это ты по какой то причине пытаешься разделить по сути одну и ту же сущность на какие то совершенно раздельные.
Чувак, ты перепутал в кучу разные сущности и уровни. И все только из-за с виду одного catch, а на самом деле это совершенно разные catch.
E>>Видимо вызвананая професиональной деформацией на почве одной и далеко не лучшей платформы. CC>А, ещё один адепт "элитной ОС", где главный пингвин С++ ниасилил а потому в ядро его не пускает. Ну да, у вас там в общем случае с заменой RTL плоховато. CC>Благо есть другие ОС, где народ не хочет бойлерплейтить и таки почесался по поводу C++ RTL для ядра. CC>Если чо в ядре макоси в кернеле поддержка C++ имеется.
Это ты про FreeBSD сейчас ? Там все также на Си.
E>>Не доступен, либо доступен ногами через одно место. CC>И много ты кода в кернеле написал чтоб заявлять подобную чушь?
Достаточно чтобы открыть тебе глаза.
CC>Для меня это bread, butter с толстым слоем икры поверху. Win/BSD/Darwin
И что ? Это совсем перепендикулярно языку.
E>> И я уже привел выше некоторые примеры, которые ты благополучно проигнорировал. CC>Это просто тебе ответы не понравились.
Да небыло у тебя никаких вменяемых ответов кроме мычания.
E>>Стандартная библиотека не реализуется "библиотечно" CC>А header файлы это тогда что?
Кто тебе сказал, что это header файлы ?
CC>Т.е. если я сотру все headers от std то внезапно всё перестанет работать?
А ты уверен что всегда сможеш их найти ?
E>>, это неотьемлимая часть языка с точки зрения API и неотьемлимая часть (библиотек поддержки) компилятора с точки зрения реализации. CC>Даже RTL таки заменяемая часть, так что чушь.
У меня для тебя совсем плохие новости.
CC>Берёшь компилер, пишешь на том же самом С++ пару платформенных функций, на которые тот вставляет референсы, ожидая что поддержка платформы будет прилинкована и всё.
Ну напиши на том же самом C++ крючек для dynamic_cast или throw.
Здравствуйте, CreatorCray, Вы писали:
E>>Видимо вызвананая професиональной деформацией на почве одной и далеко не лучшей платформы. CC>А, ещё один адепт "элитной ОС", где главный пингвин С++ ниасилил а потому в ядро его не пускает. Ну да, у вас там в общем случае с заменой RTL плоховато. CC>Благо есть другие ОС, где народ не хочет бойлерплейтить и таки почесался по поводу C++ RTL для ядра.
А какие еще существующие сегодня ОС, кроме макос (и то, только в IOKit) используют С++ в драйверах?
Здравствуйте, eskimo82, Вы писали:
E>Чувак, ты перепутал в кучу разные сущности и уровни. И все только из-за с виду одного catch, а на самом деле это совершенно разные catch.
Зависит от того как ты реализуешь под капотом.
CC>>Если чо в ядре макоси в кернеле поддержка C++ имеется. E>Это ты про FreeBSD сейчас? Там все также на Си.
E>Достаточно чтобы открыть тебе глаза.
Так бы и сказал что ничего всерьёз не писал.
E>Это совсем перепендикулярно языку.
А, т.е. язык это что то божественное и непостижимое, а в реальности используется что то совсем другое?
E>Кто тебе сказал, что это header файлы ?
А что это? Магия?
CC>>Т.е. если я сотру все headers от std то внезапно всё перестанет работать? E>А ты уверен что всегда сможеш их найти ?
Что за бред ты несёшь?
CC>>Даже RTL таки заменяемая часть, так что чушь. E>У меня для тебя совсем плохие новости.
Дооо! А если надо С++ на платформе где его раньше не было то с горы спускаются старцы, проводят ритуал и RTL спускается с небес, да!
Это просто кусок кода, platform support library.
И всё.
CC>>Берёшь компилер, пишешь на том же самом С++ пару платформенных функций, на которые тот вставляет референсы, ожидая что поддержка платформы будет прилинкована и всё. E>Ну напиши на том же самом C++ крючек для dynamic_cast или throw.
Ох деточка, не боги горшки обжигают.
Для Wintel будет так:
extern "C" void __stdcall _CxxThrowException (void* pExceptionObject, _ThrowInfo* pThrowInfo)
{
... а тут пиши что хочешь.
Можешь перезавернуть в платформенные, можешь сам корячиться.
}
PVOID __RTDynamicCast (PVOID inptr, LONG VfDelta, PVOID SrcType, PVOID TargetType, BOOL isReference) throw(...)
{
документацию в руки и вперёд!
Функции для того чтоб парсить инфу о типах что нагенерил компилятор в доках описаны, в платформе есть.
}
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
М>>А какие еще существующие сегодня ОС, кроме макос (и то, только в IOKit) используют С++ в драйверах? CC>Да так же винда
Фи. Все думали щас он возьмет и вытащит из за запазухи голубя. Ну чудо не случилось и вытащил он дырявые носки.
С Вендой тут все очень не просто, т.к. она имплементирует исключения C++ через свой ядровый SEH.
А это значит, что писать можно только с компилятором C++ поддерживающим конкретно эту имплементацию, другой компилятор, например с sjlj, или более быстрым dwarf уже не подойдет...
И этот человек еще что-то проповедловал про замену рантайма
E>>Чувак, ты перепутал в кучу разные сущности и уровни. И все только из-за с виду одного catch, а на самом деле это совершенно разные catch. CC>Зависит от того как ты реализуешь под капотом.
Ты конечно можеш сделать людей подмножеством коней, как это сделала микрософт. Но это совершенно не значит, что это одинаковый сущности на одном и том же уровне абстракции.
Более того, возможны другие имплементации людей. Это также к вопросу совместимости ABI.
CC>>>Если чо в ядре макоси в кернеле поддержка C++ имеется. E>>Это ты про FreeBSD сейчас? Там все также на Си. CC>
E>>Достаточно чтобы открыть тебе глаза. CC>Так бы и сказал что ничего всерьёз не писал.
Я довольно много видел такого "C++ кода" порожденного горе-архитекторами-плюсовиками и затем забитого в ядро кувалдами.
После того как этот код реанимируют к жизни чтобы он ну хоть как-то работал, от плюсов там остается только слово class да и то не всегда, и куча хаков-подпорок впридачу.
E>>Это совсем перепендикулярно языку. CC>А, т.е. язык это что то божественное и непостижимое, а в реальности используется что то совсем другое?
Твои высказывания про хлеб, масло, и личинки рыбы к языку имеют отношение чуть меньше чем ничего.
E>>Кто тебе сказал, что это header файлы ? CC>А что это? Магия?
Магия, узаконеная стандартом языка. Тебе процитировать или сам найдеш ?
Ты никогда не задавался вопросом почему у большинства этих "хеадеров" нет расширения ни .hpp и ни .h ?
CC>>>Т.е. если я сотру все headers от std то внезапно всё перестанет работать? E>>А ты уверен что всегда сможеш их найти ? CC>Что за бред ты несёшь?
Т.е. в итоге ты и языка С++ не знаеш ? Неудивительно, учитывая твою позицию.
CC>>>Даже RTL таки заменяемая часть, так что чушь. E>>У меня для тебя совсем плохие новости. CC>Дооо! А если надо С++ на платформе где его раньше не было то с горы спускаются старцы, проводят ритуал и RTL спускается с небес, да!
Примерно так и есть. Тебе напомнить историю Симбиана, Бады и Андроида ? Когда там C++ появился ты видимо не вкурсе ?
CC>Это просто кусок кода, platform support library. CC>И всё.
Это очень сложный "кусок кода", настолько сложный, что не все вендоры готовы вот прям щас взять и спортировать его на свою платформу.
Да и просто пересобрать его для существующей платформы с первого раза еще ни у кого не получалось правильно.
И все это — при открытых исходниках.
А ты, гусар, собрался его в легкую заменять. Ну вперед — замени, например у студии, на собственный.
CC>>>Берёшь компилер, пишешь на том же самом С++ пару платформенных функций, на которые тот вставляет референсы, ожидая что поддержка платформы будет прилинкована и всё. E>>Ну напиши на том же самом C++ крючек для dynamic_cast или throw. CC>Ох деточка, не боги горшки обжигают.
Ты сначала попробуй а потом мне рассказывай про свои горшки.
А потом еще раз попробуй, на следующей версии компилятора.
И потом еще один раз, через версию, если не дойдет.
CC>Для Wintel будет так: CC>extern "C" void __stdcall _CxxThrowException (void* pExceptionObject, _ThrowInfo* pThrowInfo) CC>{ CC>... а тут пиши что хочешь. CC>Можешь перезавернуть в платформенные, можешь сам корячиться. CC>}
А тут ничего особо не напишеш особо кроме kernel panic.
Но ты ведь наверно понимаеш что кидать kernel panic тут как-то не по джентельменски — соседнии приложения, и юзер, да и босс юзера, купивший твой софт не оценят.
А если еще твой софт где-ть на АЭС работает — тут не просто не поймут, но еще и бо-бо могут сделать....
Поэтому ты конечно можеш пореверсить твой любимый компилятор на предмет stack frames, честно откатываться к ним, вызывать деструкторы (что там у нас за недокументированая структурка _ThrowInfo ? ).
А потом еще раз... и еще один... И еще один через пару лет — поддержка она такая. И даже еще разок, лет через пять...
Пока не обанкротишся — всё бабло ушло на поддержку этого говна, либо не уволишся, оставив подарок последователям (что видимо и произошло в твоем случае).
CC>PVOID __RTDynamicCast (PVOID inptr, LONG VfDelta, PVOID SrcType, PVOID TargetType, BOOL isReference) throw(...) CC>{ CC>документацию в руки и вперёд! CC>Функции для того чтоб парсить инфу о типах что нагенерил компилятор в доках описаны, в платформе есть. CC>}
В случае Visual Studio — выделенное является враньем. Частично инфу конечно можно добыть методом гугла и реверса, но...
Здравствуйте, eskimo82, Вы писали:
E>Ты конечно можеш сделать людей подмножеством коней, как это сделала микрософт. Но это совершенно не значит, что это одинаковый сущности на одном и том же уровне абстракции.
Это всё чепуха. Компилятору пофигу как ты будешь RTL внутри реализовывать: проедешься на готовом или сделаешь отдельно, если контракт по вызовам соблюдается — всё работает замечательно.
E>Более того, возможны другие имплементации людей. Это также к вопросу совместимости ABI.
И чо? Семейство компилятора и платформа для писанины в кернел величина постоянная, так что мимо.
E>Я довольно много видел такого "C++ кода" порожденного горе-архитекторами-плюсовиками и затем забитого в ядро кувалдами.
Я видел много говнокода на самых разных языках, и что с того?
E>от плюсов там остается только слово class да и то не всегда, и куча хаков-подпорок впридачу.
Ну я тоже видел что если дать поддерживать С++ код сишникам то в итоге там остаётся только то, что сишники хоть как то понимают, да
Всё остальное объявляется непонятной ересью и яростно переписывается.
E>Твои высказывания про хлеб, масло, и личинки рыбы к языку имеют отношение чуть меньше чем ничего.
Это инструмент, которым я зарабатываю на жизнь.
CC>>А что это? Магия? E>Магия, узаконеная стандартом языка.
Please! Перестань уже молиться и посмотри наконец под капот!
E>Ты никогда не задавался вопросом почему у большинства этих "хеадеров" нет расширения ни .hpp и ни .h ?
А ты никогда не задавался вопросом почему директиве #include пофигу вообще на все расширения и прочее?
Так вот, это всё "синтаксический сахар" (тм)
CC>>А если надо С++ на платформе где его раньше не было то с горы спускаются старцы, проводят ритуал и RTL спускается с небес, да! E>Примерно так и есть.
Вай какой дремучий пц!
E>Это очень сложный "кусок кода", настолько сложный, что не все вендоры готовы вот прям щас взять и спортировать его на свою платформу.
Ну и на какую же платформу вендоры отказываются "портировать", аргументируя именно как "вай как сложно, слющай!"?
E>Да и просто пересобрать его для существующей платформы с первого раза еще ни у кого не получалось правильно. E>И все это — при открытых исходниках.
Руки из жопы никто не отменял.
E>А ты, гусар, собрался его в легкую заменять.
Более того, уже несколько раз заменял для разных платформ.
E> Ну вперед — замени, например у студии, на собственный.
Уже было, два раза.
E>Ты сначала попробуй а потом мне рассказывай про свои горшки.
Я это уже делал, причём за деньги
E>А потом еще раз попробуй, на следующей версии компилятора.
Да вот спросил у бывших коллег, они пользуют примерно 8 лет назад написанный рантайм и горя не знают.
Или ты не про промышленные компиляторы а про всякое экспериментальное, где всё перехреначивают каждый месяц?
E>И потом еще один раз, через версию, если не дойдет.
E>А тут ничего особо не напишеш особо кроме kernel panic.
Ты — безусловно, у меня тут сомнений уже не осталось.
E>Но ты ведь наверно понимаеш что кидать kernel panic тут как-то не по джентельменски
Дык не кидай, зачем? Или ты других способов не знаешь?
E>что видимо и произошло в твоем случае.
Хреновый из тебя "телепатор"
E>В случае Visual Studio — выделенное является враньем. Частично инфу конечно можно добыть методом гугла и реверса, но...
Дооо, страшный секрет охраняемый драконом!
...\VC\crt\src\eh\rtti.cpp
/***
*rtti.cxx - C++ runtime type information
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
* Implementation of C++ standard runtime type information
****/
...
extern"C" PVOID __CLRCALL_OR_CDECL __RTDynamicCast (
PVOID inptr, // Pointer to polymorphic object
LONG VfDelta, // Offset of vfptr in object
PVOID SrcType, // Static type of object pointed to by inptr
PVOID TargetType, // Desired result of cast
BOOL isReference) // TRUE if input is reference, FALSE if input is ptrthrow(...)
{
PVOID pResult=NULL;
_RTTIBaseClassDescriptor *pBaseClass;
if (inptr == NULL)
return NULL;
__try {
PVOID pCompleteObject = FindCompleteObject((PVOID *)inptr);
_RTTICompleteObjectLocator *pCompleteLocator =
(_RTTICompleteObjectLocator *) ((*((void***)inptr))[-1]);
#if (defined(_M_X64)) && !defined(_M_CEE_PURE)
unsigned __int64 _ImageBase;
if (COL_SIGNATURE(*pCompleteLocator) == COL_SIG_REV0) {
_ImageBase = GetImageBase((PVOID)pCompleteLocator);
}
else {
_ImageBase = ((unsigned __int64)pCompleteLocator - (unsigned __int64)COL_SELF(*pCompleteLocator));
}
#endif// Adjust by vfptr displacement, if any
inptr = (PVOID *) ((char *)inptr - VfDelta);
// Calculate offset of source object in complete object
ptrdiff_t inptr_delta = (char *)inptr - (char *)pCompleteObject;
if (!(CHD_ATTRIBUTES(*COL_PCHD(*pCompleteLocator)) & CHD_MULTINH)) {
// if not multiple inheritance
pBaseClass = FindSITargetTypeInstance(
pCompleteLocator,
(_RTTITypeDescriptor *) SrcType,
(_RTTITypeDescriptor *) TargetType
#if (defined(_M_X64)) && !defined(_M_CEE_PURE)
, _ImageBase
#endif
);
}
else if (!(CHD_ATTRIBUTES(*COL_PCHD(*pCompleteLocator)) & CHD_VIRTINH)) {
// if multiple, but not virtual, inheritance
pBaseClass = FindMITargetTypeInstance(
pCompleteObject,
pCompleteLocator,
(_RTTITypeDescriptor *) SrcType,
inptr_delta,
(_RTTITypeDescriptor *) TargetType
#if (defined(_M_X64)) && !defined(_M_CEE_PURE)
, _ImageBase
#endif
);
}
else {
// if virtual inheritance
pBaseClass = FindVITargetTypeInstance(
pCompleteObject,
pCompleteLocator,
(_RTTITypeDescriptor *) SrcType,
inptr_delta,
(_RTTITypeDescriptor *) TargetType
#if (defined(_M_X64)) && !defined(_M_CEE_PURE)
, _ImageBase
#endif
);
}
if (pBaseClass != NULL) {
// Calculate ptr to result base class from pBaseClass->where
pResult = ((char *) pCompleteObject) +
PMDtoOffset(pCompleteObject, BCD_WHERE(*pBaseClass));
}
else {
pResult = NULL;
if (isReference)
#ifndef _SYSCRT
throw std::bad_cast("Bad dynamic_cast!");
#else
throw bad_cast("Bad dynamic_cast!");
#endif
}
}
__except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION
? EXCEPTION_EXECUTE_HANDLER: EXCEPTION_CONTINUE_SEARCH)
{
pResult = NULL;
#ifndef _SYSCRT
throw std::__non_rtti_object ("Access violation - no RTTI data!");
#else
throw __non_rtti_object ("Access violation - no RTTI data!");
#endif
}
return pResult;
}
Официальный С++ исходник того самого магического кода, кто бы мог подумать!!!
Ну и о чём с тобой дальше вообще можно разговаривать?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, eskimo82, Вы писали:
E>Фи. Все думали щас он возьмет и вытащит из за запазухи голубя. Ну чудо не случилось и вытащил он дырявые носки.
В винде сам производитель в DDK добавил всякого разного чтоб людям жизнь упростить, там допиливать надо только если уж совсем размахнуться хочешь.
Во всяких ваших луниксах народ плюсов истерически боится — раз главный пингвин не умеет то нефиг и начинать.
E>А это значит, что писать можно только с компилятором C++ поддерживающим конкретно эту имплементацию, другой компилятор, например с sjlj, или более быстрым dwarf уже не подойдет...
С чего бы? В винде SEH просто удобен, но тебе ничего не мешает написать поиск правильного frame handler по готовым таблицам и его вызвать, если уж работаешь в таком окружении где этого хелпера под рукой нет.
Скучно с тобой.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
E>>Фи. Все думали щас он возьмет и вытащит из за запазухи голубя. Ну чудо не случилось и вытащил он дырявые носки. CC>В винде сам производитель в DDK добавил всякого разного чтоб людям жизнь упростить, там допиливать надо только если уж совсем размахнуться хочешь.
Винда — вообще помойка всего.
CC>Во всяких ваших луниксах народ плюсов истерически боится — раз главный пингвин не умеет то нефиг и начинать.
В Линуксах народ в своей массе технически более продвинутый и думать умеет. Во всяком случае в состоянии оценить последствия использования молотка там где нужна отвертка.
E>>А это значит, что писать можно только с компилятором C++ поддерживающим конкретно эту имплементацию, другой компилятор, например с sjlj, или более быстрым dwarf уже не подойдет... CC>С чего бы? В винде SEH просто удобен, но тебе ничего не мешает написать поиск правильного frame handler по готовым таблицам и его вызвать, если уж работаешь в таком окружении где этого хелпера под рукой нет.
И также ничего тебе не мешает поддерживать выделеную жирным поделку при выходе новых версий компилятора. Ну первые 5 раз хотя бы...
CC>Скучно с тобой.
А ты сам встал в такую позу.
E>>Ты конечно можеш сделать людей подмножеством коней, как это сделала микрософт. Но это совершенно не значит, что это одинаковый сущности на одном и том же уровне абстракции. CC>Это всё чепуха. Компилятору пофигу как ты будешь RTL внутри реализовывать: проедешься на готовом или сделаешь отдельно, если контракт по вызовам соблюдается — всё работает замечательно.
Ключевая фраза. Ты уверен что ты соблюдаеш недокументированный контракт ?
Ты уверен что соблюсти этот контракт возможно в лимитированных условиях ядра ?
E>>Более того, возможны другие имплементации людей. Это также к вопросу совместимости ABI. CC>И чо? Семейство компилятора и платформа для писанины в кернел величина постоянная, так что мимо.
Ну да, есть студия, есть icc, есть clang... И у всех у них разные и различающиеся точки зрения на имплементацию.
E>>Я довольно много видел такого "C++ кода" порожденного горе-архитекторами-плюсовиками и затем забитого в ядро кувалдами. CC>Я видел много говнокода на самых разных языках, и что с того?
С того что голова дана чтобы делать выводы, а не только есть икру с маслом.
E>>от плюсов там остается только слово class да и то не всегда, и куча хаков-подпорок впридачу. CC>Ну я тоже видел что если дать поддерживать С++ код сишникам то в итоге там остаётся только то, что сишники хоть как то понимают, да CC>Всё остальное объявляется непонятной ересью и яростно переписывается.
А почему код попадает к сишникам ? Псевдоплюсовики несправляются со своими порождениями ?
E>>Твои высказывания про хлеб, масло, и личинки рыбы к языку имеют отношение чуть меньше чем ничего. CC>Это инструмент, которым я зарабатываю на жизнь.
Да, но по факту ты его не знаеш.
CC>>>А что это? Магия? E>>Магия, узаконеная стандартом языка. CC>Please! Перестань уже молиться и посмотри наконец под капот!
Зачем мне смотреть под капот твоего пепелаца ?
E>>Ты никогда не задавался вопросом почему у большинства этих "хеадеров" нет расширения ни .hpp и ни .h ? CC>А ты никогда не задавался вопросом почему директиве #include пофигу вообще на все расширения и прочее? CC>Так вот, это всё "синтаксический сахар" (тм)
Это не так.
CC>>>А если надо С++ на платформе где его раньше не было то с горы спускаются старцы, проводят ритуал и RTL спускается с небес, да! E>>Примерно так и есть. CC>Вай какой дремучий пц! E>>Это очень сложный "кусок кода", настолько сложный, что не все вендоры готовы вот прям щас взять и спортировать его на свою платформу. CC>Ну и на какую же платформу вендоры отказываются "портировать", аргументируя именно как "вай как сложно, слющай!"?
А чтож ты примеры реальных платформ поскипал ? Не вписываются в твою вселенную ?
E>>Да и просто пересобрать его для существующей платформы с первого раза еще ни у кого не получалось правильно. E>>И все это — при открытых исходниках. CC>Руки из жопы никто не отменял. E>>А ты, гусар, собрался его в легкую заменять. CC>Более того, уже несколько раз заменял для разных платформ.
Так что потом тебе очень сильно били и завязали руки узлом в рот через жопу ?
E>> Ну вперед — замени, например у студии, на собственный. CC>Уже было, два раза.
Стесьняюсь спросить — а почему два ?
Или во второй раз заставили все переписывать для новой версии ?
E>>Ты сначала попробуй а потом мне рассказывай про свои горшки. CC>Я это уже делал, причём за деньги
Еще и приплачивал чтобы взяли поделку ?
E>>А потом еще раз попробуй, на следующей версии компилятора. CC>Да вот спросил у бывших коллег, они пользуют примерно 8 лет назад написанный рантайм и горя не знают. CC>Или ты не про промышленные компиляторы а про всякое экспериментальное, где всё перехреначивают каждый месяц?
В "промышленных" все перехреначивают довольно часто.
E>>И потом еще один раз, через версию, если не дойдет. CC>
И не только часто, а еще и в самый неподходящий момент.
E>>А тут ничего особо не напишеш особо кроме kernel panic. CC>Ты — безусловно, у меня тут сомнений уже не осталось.
Я всего лишь свидетель этого.
E>>Но ты ведь наверно понимаеш что кидать kernel panic тут как-то не по джентельменски CC>Дык не кидай, зачем?
И что делать ?
CC>Или ты других способов не знаешь?
Ну как, ну ка расскажи ? Или опять сольешся ?
E>>что видимо и произошло в твоем случае. CC>Хреновый из тебя "телепатор"
А чтоже это тебя так тронуло то ?
E>>В случае Visual Studio — выделенное является враньем. Частично инфу конечно можно добыть методом гугла и реверса, но... CC>Дооо, страшный секрет охраняемый драконом!
Он не документирован полностью.
CC>...\VC\crt\src\eh\rtti.cpp
Ну что-ты кусочек кода выдернул, стековые фреймы 1) недокументированы, 2) меняются от версии к версии.
CC>Официальный С++ исходник того самого магического кода, кто бы мог подумать!!!
То-то народ потихоньку занимается реверсом этих "оффициальных исходников": https://www.cnblogs.com/sunkang/archive/2011/05/06/2038810.html
CC>Ну и о чём с тобой дальше вообще можно разговаривать?
Сливаешся.