Изначально это было одно из моих сообщений в рассылках ALTLinux
AM> Т.е. ваше мнение что на Си нужно (и достаточно безопасно) писать
AM> только системное ПО (модули, ядра, драйвера)? А приложения (и уж
AM> тем более взаимодействующие с интернет) на чем-то ином?
Именно так.
AM> А на чем тогда
Хоть на Visual Basic. Я абсолютно серьёзно.
Если совсем серьёзно, то при программировании по Windows лучше всего использовать любой. NET язык, а при портабельном программировании либо Java (из распространённых), либо, что гораздо лучше, Tcl.
AM> (вроде тотже апач, mysql, squid на Си и писаны)?
Ну и светятся в багтраке с завидной периодичностью. И будут светиться всегда. Просто потому, что при программировании на C нужно иметь очень высокую квалификацию, и требуемая квалификация растёт экспоненциально с ростом программы. Притом затраты на организацию совместной разработки тоже растут нелинейно.
Кстати апач, mysql и squid не совсем прикладные программы всё-таки, и при их написании вставки кода на си отнюдь не помешают (особенно это касается апача и сквида).
SQL-сервер можно и нужно писать на языках вроде OCaml, ибо бОльшая часть нагрузки на процессор это:
Всё это прекрасно оптимизируется. Я не удивлюсь если движок типа SQLite,
написаный на OCaml, окажется:
Но это всё _сейчас_ имеет смысл только в mission critical приложениях. Просто потому, что хороших программистов на языках отличных от C и жабы за разумные деньги найти сложно, и они _потребуют_ великолепной зарплаты, соц программ, хорошего менеджмента. Далеко не всегда руководство просто достаточно квалифицировано, чтобы создать такие тепличные условия (дело не в деньгах даже, программисты за 2–3k$ реально дешевле программистов за 500–1000$).
Поэтому:
интерфейс — пишется на Tcl (превосходная переносимость, элементарно
сам встраивается в программы на других языках, а также в него легко
встраиваются модули).
логика — зависит от её объёмов, в порядке убывания: OCaml, Tcl, Java, C
вещи, требующие максимальной производительности — OCaml, C, Java
Ну и далее смотреть и смотреть по ситуации.
Главный принцип программиста — лень.
Второй главный принцип — «разделяй и властвуй»
Если код можно не писать, а лицензировать — он лицензируется. Если код можно не писать, а взять готовую библиотеку и написать вокруг обёртку — так и делается. Если код не является тем, ради которого покупается написаный продукт — код продвигается в виде правок к используемым библиотекам (пусть другие люди, которые лучше знают эту сферу, занимаются его поддержкой).
В случае свободных программ не зазорно использовать в качестве _расширений_ проприетарные библиотеки (IMHO). Например написать патч к mplayer, который бы использовал Intel'овские примитивы для DSP _если они есть у пользователя_ было бы полезно (это как пример).
Ну и следует понимать, что написаное выше есть всего лишь результат _моего_ весьма небольшого опыта в IT — я знаю меньше десятка языков программирования и практически не владею функциональным программированием, а значит уже большую часть возможностей попросту не вижу. Посему каждый раз надо внимательно обследовать сферу, для которой пишется программа, и искать наилучший инструмент. После чего садиться, и изучать этот инструмент.
Скажем пример — пишется приложение. Приложение должно быть _очень_ масштабируемых (грубо говоря от сотового телефона до мейнфрейма). Какой язык будет выбран? Java. Просто потому что это «политика партии» и в этом случае можно получить больше поддержки, больше кода будет написано сторонними разработчиками.
Или смотреть что нужно пользователю. Скажем _сейчас_ производительность находится чуть ли не на последнем месте по важности, а _безопасность_ на первом. Поэтому выбирая интерпретируемые языки программирования, или языки вроде OCaml, где написание кривого кода несколько усложняется, можно получить преимущество на рынке за счёт большей надёжности и более быстрого добавления новой функциональности.
В любом случае, надо действовать осознанно — где приоритет «плыть туда
же, куда main stream», где «плаву не туда, куда плывёт течение, а туда,
куда я хочу», где ориентироваться на дешивизну разработчиков, а где на
качество результата.
Если же вопрос в плане «чему учиться?» то я рекомендую:
Стоит обратить внимание на Lisp — так говорят умные люди, которым я доверяю. Времени пока не нахожу.
Самый главный недостаток C — ASCIIZ-строки:
Второй недостаток — адресная арифметика. Это мощнейший инструмент для специалиста (коих по сравнению с общим количеством программистов на C в лучше случвае 1:100), а для человека, который не понимает до конца как это работает, это хороший способ сделать ненадёжную программу.
Третий недостаток — невозможность ни в С, ни в С сделать по-настоящему хорошую сборку мусора. Собственно это одна из причин, почему многие современные программы требует несоизмеримое задачам количество памятью: просто в C и C не так уж и легко с ней работать.
Обсудить статью можно здесь
(C) Denis Smirnov 15 Aug 2004
так как статья находится в разработке, её копирование на другие сайты запрещается
Посмори SPForth. Отличная идея, прекраснейшая производительность. Невероятная компактность кода.
На все 100% русский! Полнотсью GPL. Одна проблема — пока только под Виндой. Можно взять ficl — полностью кроссплатформенный.
http://sourceforge.net/projects/spf/
www.forth.org.ru
forth-j.narod.ru
http://www.amadeus-3.com/main_files/oberon2vsCPP.php
http://www.amadeus-3.com/main_files/space.html
«That is where we learned that Canada and the UK (and probably other countries as well) strictly prohibit the use of C and C++ for developments related to any nuclear application. The only languages which were accepted were Ada and Modula-2, thanks to the fact that it had become the only programming language with full ISO standardisation (a very complex process) and certified compilers.»
TCL – это, имхо, скорее из разряда того, что нужно знать, чем того, что нужно использовать в production.
Минусы:
Плюсы:
Гм... и еще:
За мнение о Си – респект. Но, с другой стороны – неплохая переносимость в т.ч. win/linux и значительная простота по сравнению с той же Java.
В остальном, те кто знает несколько языков – обычно считают, что для каждой области задач – свой язык.
Потому как есть erlang (функциональное программирование в условиях мягкой многозадачности), newLisp (искореженный недо-лисп, но маленький, переносимый и фичастый) и еще куча.
Возможно, стоит завести страничку со свободным редактированием. Чтобы каждый мог вписать любимое «зубило» и оставить свои за/против (с флеймом в комментариях ;-)
.NET microsoft в виндах стопудов додавит. Под виндами скоро забудут все языки кроме C#.Библиотека классов может быть и хороша но крайне не производительна.
Теперь по поводу С / С?++
На С писать я согласен бред.
По поводу С++: замечание по поводу ASCIIZ строк абсолютно не уместны кто ж вас заставляет ими пользоваться есть строковые классы (если у вас нет напишите, я не призываю к STL).
цитата:
--
Второй недостаток — адресная арифметика. Это мощнейший инструмент для специалиста (коих по сравнению с общим количеством программистов на C в лучше случвае 1:100), а для человека, который не понимает до конца как это работает, это хороший способ сделать ненадёжную программу
--
Зачем вообще браться за програмирование если не понимаешь что делаешь, может стоит заняться тем что понимаешь?