Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 116 117 [118] 119 120 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1756
,
|
|
|
|
DesweR, потому что у нас это требует одной языковой конструкции, а у вас двух.
Добавлено Вброс Купил книгу "Идеальная архитектура", ни слова о дельфи =) |
|
Сообщ.
#1757
,
|
|
|
|
Не зная, что это за язык, рискну предположить, что объявление переменных с инициализацией трех из них. Нет?
и он намекает, что в C/C++ это транслируется напрямую, а в паскале надо запоминать, что потом переменные надо проинициализировать. Что явно усложняет препроцессор/кросстранслятор. |
|
Сообщ.
#1758
,
|
|
|
|
Скрытый текст Цитата Мяут-Настоящий @ Купил книгу "Идеальная архитектура", ни слова о дельфи =) А с чего там быть делфи? Делфи обсуждают только в книжках по делфи. Во всяких паттернах/архитектурах/проектировании о делфи даже не намекнут, т.к. он для этого вообще не предназначен. Ибо перегружен ненужными AfterConstruction/BeforeDestruction/Initialization/Finalization и т.д. Я ни в одной книжке не встречал таких слов, видимо действия которые в них проводят нужны исключительно тем кто пишет на делфи... Думаю если и встретица делфи в какой то книжке по архитектуре, то скорее всего будет в описании как нельзя проектировать приложения... |
|
Сообщ.
#1759
,
|
|
|
|
Мы не забываем, потому что синтаксис позволяет при определении переменной тут же указать её стартовое значение. В C большей частью ошибки с неинициализированными переменными произрастали как раз из-за необходимости использовать в определении только константного выражения и расположения определений только в начале блока перед любыми исполнительными инструкциями. Так что тоже часто требовалось определение и инициализацию раскидывать по двум точкам.
Вот странное дело. Дядюшка Филипп придумал типизированные константы и не нашёл ничего лучше, как объявить их при этом переменными Ну, дал какой-то механизм избежать провокаций на ошибки. Ведь всё равно уже расширил синтаксис определения констант, почему не расширить и синтаксис определения переменных? И константы были бы, и переменные с инициализацией. Вообще логики не вижу. |
|
Сообщ.
#1760
,
|
|
|
|
Цитата DesweR @ Цитата D_KEY @ Это несколько не то, кроме того, у тебя присваивание на пустом месте и один let на всю функцию... А у Корвина тогда что? ![]() ![]() (let ((int i j (k 0)) (float x (y z 0))) Инициализация переменных внутри выражения let. Вообще это видимо просто попытка записать блок в виде s-expr, так как этот пример конструкции let лиспов не соответствует. Вот пример let-конструкции в scheme: ![]() ![]() (let ((x init-value) (y init-value) (z init-value)) expr) в expr мы можем использовать x, y и z. let'ы могут быть вложенными(с возможностью переопределения вышележащих "переменных"). Добавлено Цитата Мяут-Настоящий @ Вброс Купил книгу "Идеальная архитектура", ни слова о дельфи =) Не читал. Стоит того? |
|
Сообщ.
#1761
,
|
|
|
|
Скрытый текст KILLER, или потому, что в Дельфи половина GoF уже в языке, а ещё половина планируется быть введённой. ИМХО неудачное дизайнерское решение. Но это на взгляд плюсника, избалованного свободой выбора и не любящего платить за неиспользуемое. Дельфисты скажут, что так оно самое то. И в неком смысле будут правы, в VB вон всё ещё жёстче. |
|
Сообщ.
#1762
,
|
|
|
|
Цитата Мяут-Настоящий @ DesweR, потому что у нас это требует одной языковой конструкции, а у вас двух. Где-то я уже слышал такое... и говорили это мы На что вы отвечали - "синтаксический сахар" Цитата Qraizer @ Мы не забываем, потому что синтаксис позволяет при определении переменной тут же указать её стартовое значение. В C большей частью ошибки с неинициализированными переменными произрастали как раз из-за необходимости использовать в определении только константного выражения и расположения определений только в начале блока перед любыми исполнительными инструкциями. Так что тоже часто требовалось определение и инициализацию раскидывать по двум точкам. У вас объявлять можно в любой точке подпрограммы, нет отдельных секций для объявления констант, типов и переменных, и если бы переменные нельзя было инициализировать на месте - это бы выглядело очень странно. У нас же разбили по полочкам: раздел const - объявляем константы; раздел type - объявляем типы; раздел var - объявляем переменные; begin...end - собственно код. Кстати, глобальные переменные можно таки инициализировать при объявлении ![]() ![]() var N: Integer = 42; Цитата Qraizer @ Вот странное дело. Дядюшка Филипп придумал типизированные константы и не нашёл ничего лучше, как объявить их при этом переменными Ну, дал какой-то механизм избежать провокаций на ошибки. Ведь всё равно уже расширил синтаксис определения констант, почему не расширить и синтаксис определения переменных? И константы были бы, и переменные с инициализацией. Вообще логики не вижу. Сам не вижу Цитата Мяут-Настоящий @ Купил книгу "Идеальная архитектура", ни слова о дельфи =) Андерса Хейлсберга не позвали Цитата Qraizer @ KILLER, или потому, что в Дельфи половина GoF уже в языке, а ещё половина планируется быть введённой. ЕМНИП, они там все. |
|
Сообщ.
#1763
,
|
|
|
|
Цитата DesweR @ Андерса Хейлсберга не позвали ![]() Может быть потому что оно не идеально? Цитата DesweR @ Где-то я уже слышал такое... и говорили это мы ![]() На что вы отвечали - "синтаксический сахар" Разделение одной семантической конструкции на две синтаксические - это не сахар, это говнецо. |
|
Сообщ.
#1764
,
|
|
|
|
Цитата DesweR @ Синтаксический сахар - это когда одна конструкция заменяет другую или последовательность других. Как пример - циклы do и while при наличии for. И даже наличие циклов for, do и while при наличии if, goto и блоков.На что вы отвечали - "синтаксический сахар" P.S. Само по себе выражение "синтаксический сахар" не несет негативного смысла. |
|
Сообщ.
#1765
,
|
|
|
|
Цитата DesweR @ У вас объявлять можно в любой точке подпрограммы, нет отдельных секций для объявления констант, типов и переменных, и если бы переменные нельзя было инициализировать на месте - это бы выглядело очень странно. У нас же разбили по полочкам: раздел const - объявляем константы; раздел type - объявляем типы; раздел var - объявляем переменные; begin...end - собственно код. И это очень глупо, неудобно и ничем не оправдано. Зачем объявлять переменную, не инициализируя ее? Кроме того, это вставляет палки в колеса immutable-объектам. Цитата Почему тогда нельзя локальные?Кстати, глобальные переменные можно таки инициализировать при объявлении ![]() ![]() var N: Integer = 42; Цитата А зачем его звать? Цитата Мяут-Настоящий @ Купил книгу "Идеальная архитектура", ни слова о дельфи =) Андерса Хейлсберга не позвали |
|
Сообщ.
#1766
,
|
|
|
|
Цитата D_KEY @ Дык компилятор должен рассчитать потребный размер кучи и отвести там место под переменные. Правда компиляторы C для микроконтроллеров как-то справляются с этим и без секции var, хотя и размещают автоматические переменные в аналоге кучи. Зачем объявлять переменную, не инициализируя ее? |
|
Сообщ.
#1767
,
|
|
|
|
Цитата Мяут-Настоящий @ Может быть потому что оно не идеально? И C# тоже? Цитата Мяут-Настоящий @ Разделение одной семантической конструкции на две синтаксические - это не сахар, это говнецо. Где сказано, что это одна семантическая конструкция? Цитата trainer @ Синтаксический сахар - это когда одна конструкция заменяет другую или последовательность других. Он и есть. (я о С++, если не так поняли) Цитата D_KEY @ И это очень глупо, неудобно и ничем не оправдано. А по мне (хотя мне без разницы) - глупо, неудобно и ничем не оправдано - разбрасывать объявления по всему тексту программы, вопрос вкуса и воспитания. Цитата D_KEY @ Почему тогда нельзя локальные? Ох, много было холиваров на эту тему, обоснования разные, но официальных причин, лично я, не встречал. |
|
Сообщ.
#1768
,
|
|
|
|
у меня ![]() ![]() (let ((int i j (k 0)) (float x (y z 0))) ...) вообще-то. ![]() ![]() (int main () (let ((int i)) (print i) ; => 0 (let ((int (i 1))) (print i) ; => 1 (set i 2) (print i) ; => 2 (let ((int i)) (print i) ; => 0 (set i 3) (print i)) ; => 3 (print i)) ; => 2 (print i) ; => 0 (let ((int (j 4))) (print j)) ; => 4 (print j))) ; ошибка компиляции ![]() ![]() int main () { int i; print(i); // => 0 { int i = 1; print(i); // => 1 i = 2; print(i); // => 2 { int i; print(i); // => 0 i = 3; print(i); // => 3 } print(i); // => 2 } print(i); // => 0 { int j = 4; print(j); // => 4 } print(j); // ошибка компиляции } покажи аналог на паскале =) |
|
Сообщ.
#1769
,
|
|
|
|
Цитата korvin @ покажи аналог на паскале =) Аналог чего? Зеркальности семантики? |
|
Сообщ.
#1770
,
|
|
|
|
Цитата D_KEY @ Цитата Почему тогда нельзя локальные?Кстати, глобальные переменные можно таки инициализировать при объявлении ![]() ![]() var N: Integer = 42; ниасилили =) Добавлено Цитата DesweR @ Аналог чего? Зеркальности семантики? полностью идентичный код в синтаксисе паскаля. я перевел из s-выражения в С без преобразований AST. |