Смысл как раз есть. Реализации операторов с/с++ под новый камень на паскале напишешь? Ничего, что сначала придётся реализовать его? К тому же он ещё и тормозов добавит. Или системный загрузчик. Или внутренности системной поддержки многопточности и многозадачности? Кстати, на языке ассемблера, даже на спектрумовском, простейшие подзадачи вроде копирования видеопамяти во внеэкранный буфер решаются проще, чем на c/c++, паскале и даже бейсике. Беда языков ассемблера в том, что на них сложность быстрей всех не эзотерических растёт с размером. Но для внутренностей перегруженных операторов длинной арифметики встроенный в gcc язык ассемблера как бы вообще не вне конкуренции. А займ/перенос на c/c++ – натуральное издевательство над программистом.
Тарас-Прогер
Меня плюсы полностью устраивают, со временем постараюсь отойти от STL, попробую Boost, а как язык они мне очень нравятся.
Не вижу смысла сравнивать языки между собой, так как идеального варианта нет, по крайней мере код на плюсах хорошо оптимизируется.
Daniil Petrov
> Меня плюсы полностью устраивают,
Меня тоже. Но я не пишу систем, пока не брался за кодогенерацию, там низкий уровень обязателен, хоть и кусочно. И редко берусь за длинную арифметику, а копирование видеопамяти писал ровно один раз и мне хватило.
Тарас-Прогер
> А если кросплатформенности, то тебе нужен не ассемблер и даже не паскаль, а
> язык высокого уровня. Например, си
вот уж не знаю плакать или радоваться, что Паскаль стал ниже уровнем, чем Си.
skalogryz
> Паскаль, по-умолчанию, высокоуровненее, чем Си,
а как отмерять этот уровень — равный ему или немножко выше
от ноля уровня воды поверхности планеты. или как.
?
>и без сборщика мусора
Давно встроен. С XE2 примерно если речь о Delphi.
Память полностью освобождается, даже если ты забыл сделать Free.
>потому что в нём идёт хороший такой RTL
Какой такой RTL? VCL? Никто не заставляет. Я VCL не использую.
Не говорили бы коль не знаете.
Delphi как и FPC мощные и гибкие системы.
Последний вообще кросплатформенный, да еще и бесплатный.
Rikk
> а как отмерять этот уровень — равный ему или немножко выше
> от ноля уровня воды поверхности планеты. или как.
по количеству кода, который от тебя прячет язык, по отношению к созданному машинному коду (ну или ассемблеру)
например в паскале можно так:
var s1, s2: string; s : string; begin s1 := ... s2 := ... s := s1 + s2;
eDmk
> Какой такой RTL?
unit System.
например.
ты его тоже не используешь?
тест прост:
begin writeln('hello world'); end.
skalogryz
> по количеству кода, который от тебя прячет язык, по отношению к самому
> машинному коду (ну или ассемблеру)
1 какое количество кода , который от меня прячет язык паскаль?
в байтах. пять байтов.или десять байтов.или сколько там байтов.
2 какое количество кода , который от меня прячет язык си?
в байтах.пять байтов.или десять байтов.или сколько там байтов.
3 какое количество кода , который от меня прячет язык паскаль по отношению к самому машинному коду(ну или ассемблеру)?
паскаль—машинный код(ну или ассемблер) отношение.
в байтах.пять байтов.или десять байтов.или сколько там байтов.
4 какое количество кода , который от меня прячет язык си по отношению к самому машинному коду(ну или ассемблеру)?
си—машинный код(ну или ассемблер) отношение.
в байтах.пять байтов.или десять байтов.или сколько там байтов.
Rikk
> какое количество кода , который от меня прячет язык ...?
в штуках байт не скажу. зависит от кода языка высокого уровня и настроек компилятора.
Хотя отношение найти, я думаю можно:
Вот и получится хорошее такое отношение.
а тебе правда нужно разжевать что и где язык высокого уровня от тебя прячет?
может начать с вызова функции, передачи параметров и стэк фреймов.
Хех, или то, что паскаль может генерировать код для проверки границ, и переполнений...
мне кажется, ты это всё знаешь. или нет?
На моём примере со строками.
s:=s1+s2;
len1 := length(s1); len2 := length( s2); lenfinal := len1 + len2; s := allocatestring( lenfinal) Move( s1[1], s[1], len1); Move( s2[1], s[len1+1], len2);
причём в языке Си, скорее всего всё это пришлось бы либо писать тебе самому.
в (условный) ассемблер вышестоящий код переписывать не буду. :D
Пример с writeln
writeln('hello world ', i+j);
OpenHandle(stdout); WriteHandle_ConstStr( stdout, 'hello world '); ts := allocatestring( ); ti := i+j; convert_int_to_str( ts, ti); WriteHandle_DynStr( stdout, ts); deallocatestring( ts); FlushHandle( stdout);
А в Си такого нет; Там будь добр подключи нужный (из тысячи) хедер, и вызови нужную (из тысячи) функции.
(зато подобного можно добится в Крестах... и да, это отдельная дисциплина :D)
skalogryz
> Вот и получится хорошее такое отношение.
какое
skalogryz
> причём в языке Си, скорее всего всё это пришлось бы либо писать тебе самому.
в отличие от не пришлось бы либо писать не самому?
Rikk
> какое
написал же: "хорошее"
Rikk
> в отличие от писать не самому?
именно так.
чем больше язык берёт на себя, тем он выше.
ускоряет разработку, но уменьшает контроль
skalogryz
> написал же: "хорошее"
ну вы же знаете что отношение имеет известную точность
например 10/5=2
skalogryz
> Берём конечный размер .exe файла и делим его размер ВСЕХ исходников.
exe(в байтах)/его размер ВСЕХ исходников=N
N=? цифра
какое отношение.число.цифра.
>смотрим итоговый размер исполняемого файла, и думаем, чем занято место.
191 Кб на Delphi XE6. Че не так?