Чего Вам не хватает в С ?

Тема в разделе "LANGS.C", создана пользователем osox, 14 июн 2010.

  1. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    J0E
    у меня начинает появляться мнение, что вы не мне, а себе чтото доказываете. откуда иначе такая настойчивость? вы еще помните что именно вы доказываете то?
    впервые встречаю человека, который вопрос о его профессии считает оскорблением и переходом на личности.
    а то, что вы не программист-практик, или скажем так, не имеющий достаточно плотной практики, видно из вашей привычки обсуждать задания. и упорно спорить по такой мелочи как выбор языка. скажу вам по секрету, целые оси пишут на пхп и жабаскрипте. а раньше писали и на жвбасике. и ничего.
    опять же придавание такого значения всяким мелочам, пусть и с важно звучащими названиями, это тоже своего рода критерий. бесполезный мусор он тоже место занимает и ресурсы потребляет, знаете ли.
    можно я скажу, что мне плевать на мнение какогото там неизвестного мне степанова? я знаю что я имел в виду и сформулировал это самое "имел ввиду", помойму, достаточно понятно. нужен и код и данные. и обязательная связь между ними. и возможность порождать/удалять и прочие манипуляции с ними как с единым целым. иначе это не объект.

    например, в лимбо можно писать так

    A : adt {
    _a : int;
    set : fn (a: self ref A, n: int);
    get : fn (a: self ref A): int;
    };

    ch := chan [10] of A; # буферизированый канал для передачи бъектов класса А. автоблокируется после приемки > 10 объектов.

    теперь по ch мы можем атомарно (те, если тут буфер заполнился и заблокировался, то он одновременно заблокируется и там) двунаправлено пересылать объекты A той же самой простейшей операцией. пересылать не только между потоками, но и между процессами и по сети между компами под разными осями, с разной архитектурой.

    никто и не спорит. вы мыслите на уровне слов, они вам кажутся важными и поэтому вы и выбираете среди них более важно звучащие. у меня на слова просто нет времени. кроме работы хотелось бы иметь немного времени для личной/семейной жизни, немного для проектов интересных мне самому, не все ж комуто шить? потому загромождать голову лишними украшениями нет ни времени, ни желания. вы видели когда нибудь гараж или мастерскую в рюшечках и кружевах?
    каким тредам? где вы это нашли? имеете ввиду, возврат номера ответившего канала при слушаньи их пачки? так это ж нормально. все так делают. и вынь тоже.
    вот к примеру, вы пишете планировщик чегото там. часть каналов вас связывает с собственным интерфейсом, часть со своими потоками, часть имитируют обычные файлы, а часть закиута в инет и, скажем, шевелит интерфейсом клиента там. вы слушаете сразу всю пачку (можно и не так, можно и проальтерировать, можно и завести отдельные пачки, но, предположим, у вас сервер скриптов и потому вы в самом сервере различия не делаете). когда приходит сообщение, вам надо передать его обработчику (создать поток, выделить ресурсы в нем, оформить среду выполнения опять же в нем (это плановая концепция. больше такого не встречал) и тогда уже запустить скрипт, плугин). обработчики могут быть абсолютно разные и заранее неизвестные. как вы свяжете не зная номера ответившего канала в пачке?
    да ради бога. и что тут такого? вы так говорите, будто все эти языки это некие закрытые дары небес. и их можно использовать строго от сих до сих.
    Прогу на алефе, возможно, с усложнениями можно написать и на С++ и еще на многих лангах, не исключая басик и екма-скрипт.
    тоже самое и в отношении С++. (например, алеф и С также, поддерживают шаблоны, кои вы так любите)
    про С и асм я вообще молчу, сами понимаете, что возможностей хватит.

    либы это тоже не чтото волшебное. в отношении либ алеф разделяет политку С и С++. а лимбо уже пошло дальше - модульная политика оберона. кроме того, либы это почти всегда хуже, чем встроенные возможности языка.

    кстати, а почему почти все? все можно реализовать. например, оператор >>> алефа вот так реализуется на питоне

    c = a >>> b;
    ========
    c = (a >> b) | (a << (32 - b))

    не помню, правда, знаковый в питоне сдвиг или нет.

    а оператор

    !{
    //....
    }

    c помощью критических секций.

    каждому свое. ктото так любит свой мерседес, что и походы по лесам и болотам на нем ездит. мощи то хватает. главное, чтоб из ям вытаскивать у водителя сил хватило.

    не. тут не о полиморфности. тут о типизации по скриптовому варианту.
    кстати, о каком большинстве работы вы упоминаете?

    когда вы говорили о промышленных языках, вы говорили о Ф. при чем тут страуструп, годы, и горы написанного кода?

    он написан на Ф? в википедии картинки с линя.
    насчет нет - не вижу особого прогресса. те же тормоза, та же жадность до ресурсов, та же возросшая проблема с переносимостью. уже даже не между осями и архитектурами, а между разными выпусками того же нет. последняя 4рка, или сколько там - опять несовместима. те годы ничему решеточную команду не научили.

    ну а я разве не пишу примеров? или написал их меньше, чем вы? вопроса в конце не понял. не хватает контекста.

    какието цифры, какието слова.. мне это очень мало говорит. точнее, совсем ничего. прочли пару строк чужых сорцов, подрубили стороннюю либу не совсем по инстукции. вот вам и ресерч, вот вам и рефакторинг.

    ошибки есть во всем. и вынь, и мсвс падали у меня не раз и не два. и код выдавали "промышленные" глючный, в должный вид приводимый колдовскими фразами вроде "a = a;". только не требуйте сразу доказательств. это вещь эксклюзивная. по заказу не вылазит.

    ну а насчет преимуществ перед С++, так ведь и С++ перед асмом не имеет преимуществ, кроме компактности и читабельности сорцов и переносимости. так и тут. алеф проектировался в том числе и как язык для написания ядра и ядерных сервисов, потому многие вещи этого уровня на нем занимают меньше строк по сорцам и занимают меньше кода по бинарям.

    кстати, насчет оч сложного компилятора вы таки сильно промахнулись. иногда надо знать предмет прежде, чем мнение высказывать. вы, помнится, говорили, что вы - эксперт. должны знать этот существенный момент.


    ---------------
    предлагаю поставить точку в нашей дискуссии, тк у меня ей ей щас нет времени отвечать вам. кроме того, я совершенно не против С++, просто не вижу нужды абсолютно все писать на нем. не потому, что нельзя, а потому, что на чемто другом это и проще и удобнее и быстрее и отлаживаемее.

    напоследок маленький пример на лимбо, помойму я приводил его гдето тут уже (не самый компактный код, но лезть в него счас не охота). простая консольная инет чатилка
    Код (Text):
    1. implement hw_nc2;
    2.  
    3. include "sys.m";
    4. include "draw.m";
    5.  
    6. sys : Sys;
    7.  
    8. wdir := "/n/-";
    9.  
    10. hw_nc2: module
    11. {
    12.     init:    fn(ctxt: ref Draw->Context, argv: list of string);
    13. };
    14.  
    15. init(nil: ref Draw->Context, nil: list of string)
    16. {
    17.  
    18.     sys = load Sys Sys->PATH;
    19.  
    20.     sys->bind("#s", wdir, Sys->MREPL);
    21.     ioch := sys->file2chan(wdir, "ch");
    22.     spawn read_write(ioch);
    23. }
    24.  
    25. read_write(ch : ref Sys->FileIO)
    26. {
    27.     while(1){
    28.         alt {
    29. #--------------
    30.         (offset, count, fid, rc) := <-ch.read   =>
    31.               if(rc != nil){
    32.                  prmpt := array of byte "\n# ";
    33.                  b := array[count] of byte;
    34.  
    35.                  f := sys->open("/fd/1", sys->OWRITE);
    36.                  sys->write(f, prmpt, len prmpt);
    37.  
    38.                  f = sys->open("/fd/0", sys->OREAD);
    39.                  res := sys->read(f, b, len b);
    40.  
    41.                  if(res > 0){
    42.                      rc <- = (b[ : res - 1], "");
    43.                  }else{
    44.                      rc <- = (nil, "");
    45.                  }
    46.             }
    47. #--------------
    48.          (offset, data, fid, wc) := <-ch.write  =>
    49.              if(wc != nil){
    50.                  sys->print("\nwrite off = %d, id = 0x%X\n%s\n",
    51.                                                    offset,
    52.                                                    fid,
    53.                                                    string data
    54.                                      );
    55.                 wc <- = (len data, "");
    56.             }
    57. #--------------
    58.         }
    59.     }
    60. }
    прогу надо скомпилить, запустить, потом запустить сервер п9
    listen -A tcp!*!8080 {export /n/-}

    клиент подключается к вашему компу командой
    mount -A tcp!<ип сервера>!8080 /<путь куда вы монтируете>

    прога создает канал ch
    на сервере он будет /n/-/ch
    на клиенте - /<путь куда вы монтируете>/ch

    далее, один пишет в этот ch, а другой из него читает. любым способом. например, echo/cat. ничего сложного. если надо передать картинки, другие данные итд. влоть до проигрывания своих музык на чужом компе, то все боле мене аналогично.
     
  2. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    qqwe
    Увы, я считаю лишь, что тебе нечего сказать по теме, поэтому ставится под сомнение моя квалификация, откуда должен следовать логичный вывод: все, что я написал - ерунда ;) Со второй попытки ты хоть указал причины мнения (это к вопросу с потерянным контекстом). Похоже, под "программист-практик" ты понимаешь "кодер", то есть человек, который пишет по готовому подробному ТЗ. Мне приходится еще и составлять эти ТЗ. Очень важно не допускать лишней работы, это экономит время на разработку и вдвойне на поддержку.
    Да это и так понятно из твоего утверждения что STL - ОО. Степанов это ее автор и считает ООП ошибкой природы :)
    Если я правильно понял, то:
    1. Есть несколько типов сообщений.
    2. Для каждого типа сообщения есть свой обработчик.
    3. Сообщение может прийти по произвольному каналу.
    4. Нужно связать сообщение с обработчиком.
    Если так, то зачем знать номер канала? Сообщение привязывается к обработчику в зависимости от типа. Если обработчику нужно дальше работать с каналом по которому пришло сообщение, то обработчику достаточно передать непосредственно инстанс (адрес) этого канала. Если каналы хранятся в массиве, то можно передать и номер канала в этом массиве. Обрати внимание, номер - это не инкапсулированные с точки зрения ОО данные канала, а свойство по которому канал ищется в контейнере, без массива смысла в номере нет.
    Напрасно все смешано в кучу, у динамически типизируемых языков часть ошибок переносится в рантайм, а при статической типизации они выявляются при компилировании. Но давай наоборот, на С++ можно писать драйвера в винде, как с остальными?
    Последнее называется утиная типизация. Это вариант полиморфизма без наследования. Если функция крякает как канал, значит это канал :)
    Та лишняя и бесполезная работа по созданию и синхронизации потоков и каналов выполняется в процессе компиляции.
    Настала моя очередь переходить на личности: программист-практик умеет искать в гугле ;)
    Никогда не употреблял таких слов в отношении своей скромной персоны, наверное это был кто-то другой))) А что у С подобного языка может быть очень простой компилятор, неужели как транслятор лиспа на лиспе? :) Я вроде не скрывал своего незнания, потому и вопросы. Спрошу по другому: оно больше 50К строк или нет?
     
  3. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Название темы не вполне неправильное. Правильно - "Что надо было бы выкинуть из C". break из switch-case выкинул бы с огромной радостью и удовольствием. Ибо дикое корявое уродство. И цирк с "=" и "==" прекратил бы, заменив на Паскаль-стильные ":=" и "=". А уж из плюсов вообще, по-хорошему, надо полтора тома Страуструпа выкинуть. Язык, руководство по которому имеет толщину с "Войну и мир", явно дефективен от рождения.
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    посмотрел F# - действительно хороший, продуманный язык
     
  5. expert

    expert New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    151
    CyberManiac
    лол, надеюсь что ты не программер и никогда им не станешь.
     
  6. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    CyberManiac
    Как Вы себе представляете правильный switch?
    C-вариант мне кажется более оправданным, т.к. присваивание употребляется значительно чаще теста на равенство.
    Хотя паскалевский имеет большую стойкость к hand jitter. :derisive:
    expert
    "Не суди о книге о обложке" (С)
     
  7. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    CyberManiac
    нет, только не ":=". это же как если бы вызов функции записывался с фигурными скобками. это ж неудобно просто.
    break в switch - это отдельная тема. добавляет гибкости, но потенциальный повод для невнятных ошибок. и если что-то удобнее записать без break между case-ами, как это переписать в случае, когда case завершается неявно?
    про национальные названия идентификаторов я даже говорить не буду - у меня в голове не укладывается, как здравомыслящий человек может желать подобного.

    GoldFinch
    ну да, OCaml-то продуманный язык.
     
  8. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    вы наверное не видели Устройство Даффа
     
  9. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    спрошу пока все тут никто не знает вот например я прошу у гугля точное соответствие например char **p но он выдает и char *p и char **p а мне надо именно двойной указатель простой я в выводе результатов видеть не хочу есть такая возможность ?
    p.s извиняюсь за оффтоп
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    http://www.google.ru/support/websearch/bin/answer.py?answer=136861#exceptions
     
  11. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    Booster
    спасибо прочел (может плохо?) но так и не получилось составить так запрос чтоб были одни двойные все равно попадаются и обычные в результате или от них не избавится ?
    мне именно надо чтоб одни двойные были и не одного простого
    например одни char **p и не одного char *p
     
  12. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    expert, "входящий сюда, надежду оставь в тамбуре" Я им стал, когда ты ещё пешком под стол ходил.
     
  13. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    green
    Ну хотя бы вот так:
    switch (всяка_хрень)
    {

    }
     
  14. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    green
    Ну хотя бы вот так:
    switch (всяка_хрень)
    {
    case хрень_1: {мои дохрена операторов}; // А break тут не пишем!
    case хрень_2: {мои дохрена операторов}; // И тут тоже не пишем
    }

    Voodoo
    А чего неудобного-то? Только не надо рассказывать, как трудно набрать один символ. Это совсем нетрудно.

    Я за почти 20 лет использования этого языка ВООБЩЕ НИ РАЗУ не использовал case без break. Если бы такое чудо случилось, я бы это запомнил обязательно. Необходимость использовать case без break возникает может в одном случае на тысячи (если не на десятки тысяч). Устраивать геморрой в тысячах случаев ради одного-единственного, когда такое может понадобиться - это какое-то грязное гнусное извращение.

    Наверное, так же, как и читать книжки на родном языке. И чтобы цены в магазинах были написаны в десятичной системе, а не в шестнадцатиричной.
     
  15. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    CyberManiac
    А как насчёт замены в медицине латинских терминов национальными? :derisive:
     
  16. make

    make New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2009
    Сообщения:
    59
    CyberManiac
    GoldFinch Вам уже подсказал. https://secure.wikimedia.org/wikipedia/en/wiki/Duff's_device
    Небогатый стало быть опыт :)
     
  17. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    CyberManiac
    А я довольно часто использую такие конструкции... не по необходимости, а по целесообразности.
     
  18. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    green
    Рецепты и в карточку давно уже пишут на русском. В детстве, помнится, писали по-латыни, но "было детство - х.. с ним, с детством". И юристы тоже по-латыни не балакают, несмотря и вопреки.
     
  19. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    green
    Это как это? "Не по необходимости" = "не надо", "по целесообразности" = "с заданной целью". Итого: "я использую эти конструкции с той целью, что они там не нужны". Т.е. конструкции ради конструкций? С такой практикой лучше завязывать, ибо до добра не доведёт, а доведёт до жирного геморроя при отладке. Когда перестаёшь искать приключений на свою ж0пу, жизнь сразу становится намного легче и приятнее.
     
  20. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    CyberManiac
    Иноязычные названия иногда полезны, т.к. повышают строгость выражения и позволяют избавиться от побочного смысла и нежелательных ассоциаций, связанных с родными эквивалентами. В этом смысле мне даже жаль англоязычных программистов - они лишены этого. :derisive:
    Возьмём ту же медицину - представьте, что чужеземные пенис и анус заменили всем понятными русскими названиями... :)