Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Имбецилы

Автор Алексей Гринь, октября 17, 2009, 13:43

0 Пользователи и 1 гость просматривают эту тему.

Triton

На мой взгляд, таки да, не хватает возможности явно указывать разрядность целочисленных типов. Также не хватает конкретных правил по преобразованию этих типов друг в друга и возможности средствами языка отслеживать арифметическое переполнение.
Что-то вроде int( 8 ), checked unsigned(32) и т.п.
Но это уже Ада получится. Жаль, что Ада не так распространена как Си, это очень достойный язык.
Молиться, поститься и слушать радио Ватника

Алексей Гринь

Цитата: Triton от ноября 13, 2009, 12:51
и возможности средствами языка отслеживать арифметическое переполнение
Проверка задним числом — постфактум — в таких делах не уместна. Проверяйте заранее пределы. Средствами языка Си возможно всё.

Цитата: Triton от ноября 13, 2009, 09:40
Вы сами-то поняли, что написали?
?

Цитата: Triton от ноября 13, 2009, 10:13
Не так давно вы хвалили Си и порывались писать собственный ООП слой на макросах (изобретать синтаксис). В Си очень и очень маленький словарь стандартной библиотеки (а в freestanding варианте - и вовсе почти весь отсутствует).
В общем, опять взаимоисключающие параграфы.
Ой лол. Взаимоисключающим параграфом было бы, если бы библиотеки у Си не было вообще. А она есть.

Цитата: Triton от ноября 13, 2009, 10:13
Что мешает сделать gtk-биндинг для любого языка (собственно, они и есть для многих языков) и не изобретать велосипед?
Тем, что это рукоблудие. Vala — родной для gtk язык без оверхеда и без синтаксиса больного дисграфией имбецила. Биндинги — костыли и говно.
肏! Τίς πέπορδε;

Triton

Цитата: Алексей Гринь от ноября 13, 2009, 13:36
Цитата: Triton от ноября 13, 2009, 12:51
и возможности средствами языка отслеживать арифметическое переполнение
Проверка задним числом — постфактум — в таких делах не уместна. Проверяйте заранее пределы. Средствами языка Си возможно всё.
Давайте тогда уж и обращение по нулевому указателю средствами ОС не отслеживать, и деление на ноль оставлять как есть, и игнорировать запись данных в невыделенную страницу памяти. Будте последовательны. Это же тоже проверки задним числом, а средствами языка Си возможно всё.

Цитата: Алексей Гринь от ноября 13, 2009, 13:36
Цитата: Triton от ноября 13, 2009, 09:40
Вы сами-то поняли, что написали?
?
Значит не поняли...

Цитата: Алексей Гринь от ноября 13, 2009, 13:36
Тем, что это рукоблудие. Vala — родной для gtk язык без оверхеда и без синтаксиса больного дисграфией имбецила. Биндинги — костыли и говно.
Уровень аргументации вполне ясен, спасибо.
Молиться, поститься и слушать радио Ватника

myst

Контроль типов транслятором — это тоже проверка задним числом. :eat:
Даёшь полную свободу машинного кода и безошибочных кодеров!

myst

Я питал надежды по поводу BitC, но кажется, там всё стухло. :'(

Алексей Гринь

Цитата: Triton от ноября 13, 2009, 13:56
Значит не поняли...
А вы поясните, если такой умный.

Цитата: Triton от ноября 13, 2009, 13:56
Давайте тогда уж и обращение по нулевому указателю средствами ОС не отслеживать, и деление на ноль оставлять как есть, и игнорировать запись данных в невыделенную страницу памяти. Будте последовательны. Это же тоже проверки задним числом, а средствами языка Си возможно всё.
Ололо, ОС как раз и написана на Си, так что вы опять фейлите. Всё это реализовно как раз средствами языка Си :D

Цитата: myst от ноября 13, 2009, 15:07
Контроль типов транслятором — это тоже проверка задним числом.
С фигов ли? Отличай compile-time-проверку от run-time-проверки. Транслятор балуется с compile-time, а это НИКАК не проверка задним числом. Более того, код вообще не запустится, если что не так: проверки не будет ВООБЩЕ. Вот run-time — проверка задним числом, да. Но как раз она Сяхой не поддерживается.
肏! Τίς πέπορδε;

Triton

Цитата: Алексей Гринь от ноября 13, 2009, 15:48
Цитата: Triton от ноября 13, 2009, 13:56
Значит не поняли...
А вы поясните, если такой умный.
Бесконечная рекурсия, всего и делов.


Цитата: Алексей Гринь от ноября 13, 2009, 15:48
Цитата: Triton от ноября 13, 2009, 13:56
Давайте тогда уж и обращение по нулевому указателю средствами ОС не отслеживать, и деление на ноль оставлять как есть, и игнорировать запись данных в невыделенную страницу памяти. Будте последовательны. Это же тоже проверки задним числом, а средствами языка Си возможно всё.
Ололо, ОС как раз и написана на Си, так что вы опять фейлите. Всё это реализовно как раз средствами языка Си :D
Гринь, спокойно, санитары уже выехали.  :D
Фейлите как раз вы, вы даже не понимаете, о чём я говорю.
Молиться, поститься и слушать радио Ватника

myst

Цитата: Алексей Гринь от ноября 13, 2009, 15:48
Ололо, ОС как раз и написана на Си, так что вы опять фейлите. Всё это реализовно как раз средствами языка Си :D
Которая?

myst

Цитата: Алексей Гринь от ноября 13, 2009, 15:48
С фигов ли? Отличай compile-time-проверку от run-time-проверки. Транслятор балуется с compile-time, а это НИКАК не проверка задним числом.
Всё, что после написания кода,  задним числом. Грамотное проектирование, грамотное кодирование — 0 ошибок, так? д'Артаньяны же не ошибаются. ;)

Triton

Цитироватьrun-time — проверка
Когда ваш файловый менеджер обнулит при переносе файл с вашими-очень-важными-данными, вместо того, чтобы свалиться по эксепшену; когда ваш сервер отдаст злоумышленникам все приватные данные (после банального переполнения буфера или же, например, в результате атаки на переполнения умножения в calloc), вместо того чтобы упасть и своим трупом закрыть проход врагу, вот тогда вы мне расскажете про ненужность автоматических проверок целочисленной арифметики.
Молиться, поститься и слушать радио Ватника

myst

Способность Си превращать салат в кровавое месиво уже не раз аукнулось на эти годы. Прав был старик Вирт, ох, прав...

Алексей Гринь

Цитата: Triton от ноября 13, 2009, 16:12
Цитировать
ЦитироватьЗначит не поняли...
А вы поясните, если такой умный.
Бесконечная рекурсия, всего и делов.
Ну, блин, введите в пример третью структуру, не то важно. Компилер останавливается сразу же, даже не войдя в рекурсию, потому что он не знает, какой это такой тип - struct B. Ему нужно делать пинка под зад, то бишь форвард-декларейшен. Будь он двухпроходным, вошёл бы в рекурсию, да так бы и написал, что рекурсия.

Цитата: Triton от ноября 13, 2009, 16:12
Гринь, спокойно, санитары уже выехали.  :D
Фейлите как раз вы, вы даже не понимаете, о чём я говорю.
Ну вы-то можете говорить о чём угодно, только вот делаете вы не по теме. Обсуждались ограничения си. Вы в пример приводите вещи, как раз в 99.9% случаев реализованные на си.

Цитата: Triton от ноября 13, 2009, 16:25
Когда ваш файловый менеджер обнулит при переносе файл с вашими-очень-важными-данными, вместо того, чтобы свалиться по эксепшену; когда ваш сервер отдаст злоумышленникам все приватные данные (после банального переполнения буфера или же, например, в результате атаки на переполнения умножения в calloc), вместо того чтобы упасть и своим трупом закрыть проход врагу, вот тогда вы мне расскажете про ненужность автоматических проверок целочисленной арифметики.
Атаки переполнения и умножения в calloc существуют как раз из-за нежелания делать предпроверку, о которой я благую весть несу. Наличие в мире такой вещи, как "исключения", никак на это не влияет.
肏! Τίς πέπορδε;

Triton

Цитата: Алексей Гринь от ноября 13, 2009, 16:45
Цитата: Triton от ноября 13, 2009, 16:12
Гринь, спокойно, санитары уже выехали.  :D
Фейлите как раз вы, вы даже не понимаете, о чём я говорю.
Ну вы-то можете говорить о чём угодно, только вот делаете вы не по теме. Обсуждались ограничения си. Вы в пример приводите вещи, как раз в 99.9% случаев реализованные на си.
Вы отличайте всё же палец от сами знаете чего. "Реализовано в языке" (как механизм с определённой семантикой) и "реализовано на языке" (как произвольный алгоритм) - это вещи разные совершенно.
Эти "вещи" реализованы аппаратурой процессора, ядром и принятой моделью исполнения процессов. А уж на чём они написаны - дело десятое. Хоть на басике, хоть в машинных кодах.
Когда программа делает *(int*)(NULL) = 123, то она прибивается операционной системой как глючная, а вовсе не потому, что такова семантика данной конструкций. По семантике это undefined behaviour, и с тем же успехом эта команда могла бы форматировать вам диск или менять разрешение на мониторе.

Цитата: Алексей Гринь от ноября 13, 2009, 16:45
Атаки переполнения и умножения в calloc существуют как раз из-за нежелания делать предпроверку, о которой я благую весть несу.
Атаки переполнения существуют потому, что выбранный язык реализации настолько беспомощен, что не может гарантировать ровным счётом ничего.
Попробуйте переписать тот же багнутый алгоритм на Оберон, а потом его хакнуть - успехов.
Молиться, поститься и слушать радио Ватника

Triton

Кстати fclose(NULL) согласно спецификации также обладает undefined behavior, и, надо сказать, в glibc этот behavior таки действительно undefined. (Во всяком случае, в версии glibc приблизительно трехлетней давности.) Ни проверок, ни игнорирования NULL, ни вызова abort()...
Одна единственная опечатка if (file == NULL) мне стоила почти недели отладки программы, которая работала "почти всегда" и падала в рандомном месте.
Тоже нерадивый программист в моём лице виноват?
Молиться, поститься и слушать радио Ватника

myst

Цитата: Triton от ноября 13, 2009, 17:04
Попробуйте переписать тот же багнутый алгоритм на Оберон, а потом его хакнуть - успехов.
Кстати, из Oberon'а можно было бы сделать очень неплохой системный язык... Но гигатонны кода на C...

myst

Цитата: http://en.wikipedia.org/wiki/BitC
In April 2009, Shapiro - driving force behind both BitC and Coyotos.[2] - announced that he had accepted a position at Microsoft to work on the Midori project, and that after August 2009 he would not be working further on BitC[3].

BitC is no longer under active development.
Ну точно стух. :'(

Алексей Гринь

Цитата: Алексей Гринь от ноября 13, 2009, 16:45
Будь он двухпроходным, вошёл бы в рекурсию, да так бы и написал, что рекурсия.
В моновом Сишарпе, нопремер:
  Struct member `monostest.C.b' of type `monostest.B' causes a cycle in the struct layout(CS0523)

Цитата: Triton от ноября 13, 2009, 17:04
Эти "вещи" реализованы аппаратурой процессора, ядром и принятой моделью исполнения процессов.
Это, уважаемый, фелософея и димагогея. Любое 2 + 2 в итоге «реализованы аппаратурой процессора». Что вы хотите этим доказать?

Цитата: Triton от ноября 13, 2009, 17:04
Вы отличайте всё же палец от сами знаете чего. "Реализовано в языке" (как механизм с определённой семантикой) и "реализовано на языке" (как произвольный алгоритм) - это вещи разные совершенно.
Ухты, налицо путание семантики и синтаксиса. Если си синтаксически не понимает исключений, переполнений или ООПа, это не значит, что оно нереализуемо семантически.

С точки зрения семантики, разницы между

Цитироватьif(a == 0)
   fatal("Divide by zero!");
result = b / a;

и

Цитироватьtry
{
   result = b / a;
}
catch(DivideByZeroException e)
{
   fatal("Divide by zero!");
}

НЕТ.
То, что вы втираете, это синтаксис. Да, средствами синтаксиса не ничего такого не реализовано. Оно и правильно.

"Реализовано на языке", "реализовано в языке" - бла-бла-бла, эти постоянные бессмысленные категоризации никому не упёрлись.

ЦитироватьАтаки переполнения существуют потому, что выбранный язык реализации настолько беспомощен, что не может гарантировать ровным счётом ничего.
Вы, похоже, не поняли, придётся повторить: атаки переполнения существуют как раз из-за нерасторопности делать предпроверки. Неужели так сложно проверить длину буфера?

Цитата: Triton от ноября 13, 2009, 17:31
Тоже нерадивый программист в моём лице виноват?
Да, это ваша ошибка, а не си.
肏! Τίς πέπορδε;

Алексей Гринь

ag@ag-laptop:~/Проекты/cf$ cat main.c
#include "core/cfException.h"
#include "core/cfInvalidCastException.h"
#include "core/cfObject.h"

int main(void)
{
    CF_TRY
    {
        cfObject* o = CF_BOX_BOOL(false);
        int i = CF_UNBOX_INT(o);
        printf("Triton is cool!!111\n");
    }
    CF_CATCH(e)
    {
        printf("There was an invalid statement, but I ignored it! :)\n");

        CF_CATCHED;
    }
    CF_END_TRY;

    return 0;
}
ag@ag-laptop:~/Проекты/cf$ cd ./bin/Debug
ag@ag-laptop:~/Проекты/cf/bin/Debug$ ./cf

There was an invalid statement, but I ignored it! :)
ag@ag-laptop:~/Проекты/cf/bin/Debug$
肏! Τίς πέπορδε;

Алексей Гринь

肏! Τίς πέπορδε;

Triton

Ок, я буду на вашем языке разговаривать с вами.
Это ваша ошибка и проблема, что вы не понимаете (к примеру) всей глубины механизма шаблонов Си++, которые давно вкурило всё прогрессивное человечество. Учите матчасть и гуглите, гуглите.
Наше учение истинно потому что верно.
Молиться, поститься и слушать радио Ватника

sknente

:3

myst

Цитата: sknente от ноября 14, 2009, 03:44
Еще один спор ни о чем?
Предмет спора не имеет значения, важен процесс. ;)

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр