Небольшое исследование

Доброго всем!
Для себя провожу небольшое исследование разных вопросов, вот один из них:

- Как узнать сумму чисел "123123123123" ?

Заранее спасибо всем, кто откликнется.

Сложите их.

Сложите их.

Хорошо :-) Возможно я

Хорошо :-) Возможно я невнятно выразился, как научить компьютер это делать?

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

Сумма чисел "123123123123"

Сумма чисел "123123123123" будет 123123123123.

Не грусти, товарищ! Всё хорошо, beautiful good!

Логично :-) Но ведь если

Логично :-) Но ведь если рассматривать к примеру число 12, то его написание состоит из двух символов 1 и 2. Каждый из этих символов представляет собой число. Когда мы пишем эти символы вместе, мы автоматически (так нас учили в школе) добавляем вес каждому следующему числу, начиная с права. Пример:

2 + 1*10

А вот как сделать так, что бы компьютер рассматривал каждый символ строки "123123123123", как отдельное число и суммировал эти числа, без учета "веса" этого числа?

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

Элементарно. Находишь длину,

Элементарно.
Находишь длину, и сканишь в цикле начиная с первого символа. результат хоть суммируй,хоть умножай,хоть в массив загоняй.
Непонятно правда зачем это может понадобитсья(нумерология?)

Спасибо. Как я понимаю,

Спасибо.
Как я понимаю, что-то вроде:

for (i=0; i <= length "123123123123"; i++)
{
Здесь идет приведение типов и суммирование
return РЕЗУЛЬТАТ;
}

А если строку "123123123123" нужно будет разбить на двухзначные числа или трехзначные, как поступить в таком случае?

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

ты это не жмись, а задачу то

ты это не жмись, а задачу то расскажи? посчистать сумму чисел всевозможных разбиений числа записанного в 10-чной форме?

держи

test :: [String] -> Int
test = sum  . (map read) .tail . subsequences

~

запись числа 12 в 10-тичной

запись числа 12 в 10-тичной системе счисления состоит из двух цифр 1 и 2. запись "123123123123" это одно число, состоящее из большого кол-ва цифр.
так что пожалуйста формулируйте задачу сразу корректно.
а так foldl' (+) 0 . (map digitToInt)

Спасибо всем

Спасибо всем откликнувшимся.
Я пытаюсь, для себя, выяснить границу удобного применения различных языков программирования.
Например в newLISP такая задача решается так:

(set 'foo "123123123123")
(apply + (map int (explode foo)))

добавление условия, на скольки-значные числа нужно разбивать входную строку, делается элементарно:

(set 'foo "123123123123"
     'n 3)
(apply + (map int (explode foo n))) 

С другой стороны, есть профессиональные библиотеки написанные для решения различных задач, импортировать функции из этих библиотек в newLISP тоже не проблема. Вот пример импорта необходимых функций из библиотеки GTK:

(set  'GTK                  "/usr/lib/libgtk-x11-2.0.so.0"
      'GTK_IMPORT_LIST      '("gtk_init"
                              "gtk_window_new"
                              "gtk_window_set_title"
                              "gtk_table_new"
                              "gtk_container_add"
                              "gtk_widget_show_all"
                              "gtk_main"
                              "gtk_exit"))
(dolist (x GTK_IMPORT_LIST)(import GTK x))

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

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

научись сначала нащупывать

научись сначала нащупывать границу когда поставленное условие некорректно или неоднозначно и да, haskell круче :)

idioticSum = foldl1 (+) . (takeBy n)
             where 
                takeBy n ls = take n ls : takeBy n (drop n ls) 

в принципе можно и однострочником, но не вижу смысла

qnikst написал(а): научись

qnikst написал(а):
научись сначала нащупывать границу когда поставленное условие некорректно или неоднозначно...

Вся прелесть и заключается в том, что условия могут уточнятся по ходу "пьесы". Бывает, что и алгоритм решения приходится менять кардинально. Хочется для себя понять, на каком языке программирования и при решении каких задач смена алгоритма наименее болезненна.

qnikst написал(а):
...и да, haskell круче :)

Говорят, что у Слона, яйца больше чем у Мыши, и тем не менее, Слон боится Мышь :-) Так говорят :-)

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

> Вся прелесть и заключается

> Вся прелесть и заключается в том, что условия могут уточнятся по ходу "пьесы". Бывает, что и алгоритм решения приходится менять кардинально. Хочется для себя понять, на каком языке программирования и при решении каких задач смена алгоритма наименее болезненна.

Браться за задачу когда ты не понимаешь, что ты хочешь не имеет смысла. Отсуствие условия != изменение условия. К слову я привёл варианты
решения аж трёх условий. у тебя решение только двух :)

> Говорят, что у Слона, яйца больше чем у Мыши, и тем не менее, Слон боится Мышь :-) Так говорят :-)

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

qnikst

qnikst написал(а):
...Отсутcвие условия != изменение условия...

Прошу меня извинить, условие было в топике.
Строка "123123123123", в топике, взята в кавычки для того, что бы подчеркнуть, что это именно СТРОКА.
А про изменение условий, согласен, мой косяк :-) Но разве всегда все известно наперед?

Цитата:
...К слову я привёл варианты решения аж трёх условий. у тебя решение только двух :)...

Я не стремлюсь мерятся "пиписками", и все же:

(define (symm-str STR N)
  (letn (STR  (join (parse STR {[^0-9]+} 1))
         N    (if N N (length STR))
         FUN  (lambda (LSTR LN)(apply + (map int (explode LSTR LN))))
         TMP  '())
        (if (<= 0 N)(FUN STR N)
                    (begin (dotimes (i (+ (length STR) 1))
                                    (push (FUN STR i) TMP))
                           (apply + TMP)))))

(println (symm-str "123123123123"))                                   => 123123123123
(println (symm-str "123123123123" 0))                                 => 0
(println (symm-str "123123123123" 1))                                 => 24
(println (symm-str "123123123123" 2))                                 => 132
(println (symm-str "123123123123" 3))                                 => 492
(println (symm-str "123 любая произвольная строка 1+2=3 123123" 3))   => 492
(println (symm-str "любая произвольная строка"))                      => 0
(println (symm-str "123123123123" -1))                                => 136803656853
Цитата:
...а некоторые говорят, что ищут границы применимости языков, а на самом деле потроллить лиспом зашли.

Ну может совсем чуть-чуть :-) На самом деле я действительно ищу задачи, которые удобнее решать тем или иным языком программирования. Я хочу познакомить широкую общественность с newLISP, и для этих целей готовлю сайт. Мне хочется, что бы информация, которую я буду выкладывать, была бы объективной. Вот поэтому немного так троллю :-)

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

если честно я код распарсить

если честно я код распарсить не сумел, так что расскажите, а что он при <0 делает. и да за "123 любая произвольная строка 1+2=3 123123" 3)) убивать мало :)

qnikst написал(а):если

qnikst написал(а):
если честно я код распарсить не сумел, так что расскажите, а что он при <0 делает...

Хорошо, на самом деле это не сложно:

(define (symm-str STR N)
  ; letn - функция, которая связывает строку и код, в который должна развернутся эта строка
  ; Переменную STR я сначала разбираю, исключая все не числовые символы, потом, то что получится
  ; склеиваю обратно в строку
  (letn (STR  (join (parse STR {[^0-9]+} 1))
         ; Если не указанна длинна разбивки, принимаю ее равной длине строки
         N    (if N N (length STR))
         ; Объявляю анонимную функцию, которая берет строку, разбивает ее на части указанной длинны
         ; и суммирует полученный результат 
         FUN  (lambda (LSTR LN)(apply + (map int (explode LSTR LN))))
         ; Создаю пустой список, я его буду использовать как стек
         TMP  '())
         ; Если длинна разбивки строки больше или равна 0 - выполняю анонимную функцию, объявленную ранее
        (if (<= 0 N)(FUN STR N)
                    ; В противном случае запускаю цикл, в котором перебираю все возможные длины разбивки строки,
                    ; и с полученным значением вызываю анонимную функцию
                    (begin (dotimes (i (+ (length STR) 1))
                                    ; Результат работы анонимной функции укладываю в импровизированный "стек"
                                    (push (FUN STR i) TMP))
                           ; По завершению цикла суммирую все, что находится в импровизированном "стеке"
                           (apply + TMP)))))
Цитата:
...и да за "123 любая произвольная строка 1+2=3 123123" 3)) убивать мало :)

Можно узнать почему?

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

> почему? абсолютное

> почему?

абсолютное неопределенное поведение, приводящее к необходимости полного покрытия кода юнит-тестами, при этом с большой вероятностью делающее не то. что надо. Раз уж делать динамический лисп-стайл-код, то нужно, чтобы возвращало [123,1,2,3,246]. Кстати в случае <0 в нас разные результаты, есть подозрение, что некорректный код не мой.

qnikst

qnikst написал(а):
...абсолютное неопределенное поведение, приводящее к необходимости полного покрытия кода юнит-тестами...

А как быть? Хотя вы правы, если функция не получает данные извне, нет смысла в такой перестраховке.

Цитата:
...Раз уж делать динамический лисп-стайл-код, то нужно, чтобы возвращало [123,1,2,3,246]...

Так и есть :-)

(set 'STR "123 любая произвольная строка 1+2=3 123123")
(println (parse STR {[^0-9]+} 1))                        => ("123" "1" "2" "3" "123123")
(println (join (parse STR {[^0-9]+} 1)))                 => "123123123123"
Цитата:
...Кстати в случае <0 в нас разные результаты, есть подозрение, что некорректный код не мой.

Поясните, покажите

; 1+2+3=6 12+3=15 6+15+123=144
(println (symm-str "123" -1))    => 144

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

а не, всё ок. я не прав :)

а не, всё ок. я не прав :)

Python: a="123123123123" su=0

Python:

a="123123123123"
su=0
step = 1 ### Можно менять
while a:
   su += int(a[:step])
   a = a[step:]
print su

вот так как-то... к сожалению, lambda пока ниасилил (если она вообще применима)

P.S.: Linux - это красная таблетка :-) Windows - синяя...

А по вашему мнению, для

А по вашему мнению, для какого типа задач удобен Puthon, и почему?

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

(*)

Python удобен для всех типов задач, кроме задач, связанных с адовым выжиманием из железа максимальной производительности. http://norvig.com/python-lisp.html

Спасибо, очень познавательный

Спасибо, очень познавательный обзор.
А скажите, можно ли у Puthona как-то исключить/заменить эти отступы с "красной строки", или это мертво в язык вмонтированно?

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

(*)

По аналоги с исключением/заменой у Лиспа этих "скобочек".

Спасибо, понял :-)

Спасибо, понял :-)

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

Скажите это разработчикам

Скажите это разработчикам django, turbogears... Что там еще есть? А! OpenERP... Это может быть и было верно... Когда-то... А сейчас все заоптимизировано.

P.S.: Linux - это красная таблетка :-) Windows - синяя...

Это верно всегда т.к. питон

Это верно всегда т.к. питон это интерпретируемый язык ещё и с идиотским GIL. Будет неверно когда CPython будет юзабельным. Другое дело, что в большинстве задач на это можно спокойно забить.

(*)

C какой частью моего высказывания вы несогласны? С первой - что Python удобен для большинства типов задач? Или со второй - что Python неудобен для задач адового выжимания из железа максимальной производительности? Вероятно, со второй. Ну так я вовсе не утверждал, что не существует модулей на С, которые можно использовать в Питоне, достигая очень очень неплохой производительности. Я утверждал, что такие задачи как написание "Hyper fast Audio and Video encoder" (media-video/ffmpeg) или "Compress or decompress FILEs in the .xz format" (app-arch/xz-utils) или "Некой Абстрактной Числодробилки" лучше решать не на Питоне. Вот что я имел в виду.

про скорость

про скорость

P.S.: Linux - это красная таблетка :-) Windows - синяя...

то, что FFI вызов блочит

то, что FFI вызов блочит рантайм питона, если там не приняты меры это видать тоже норм и для улучшения скорости и отзывчивости. :)

; Рабочая строка, над которой

; Рабочая строка, над которой мы будем издеваться
a="123123123123"

; Сюда будем суммировать, это контейнер
su=0

; Шаг прохода по массиву
step = 1 ### Можно менять

; Условие выхода из цикла не понял,
; скорее всего цикл оканчивается с обработкой последнего символа из строки-массива
while a:

   ; Интересная конструкция. Похоже берется элемент строки-массива с индексом step
   ; И результат, приведенный к типу Int приплюсовывается к контейнеру
   su += int(a[:step])

   ; Вот эта часть для меня загадка. Здесь что, идет укорачивание строки-массива
   ; до места с индексом step? Тогда, при значении шага > 1, часть строки-массива
   ; потеряется и результат вычисления будет не верный.
   a = a[step:]

; Здесь, похоже, демонстрируется результат вычисления 
print su

Не могли бы вы, прокомментировать свой код и показать результаты выполнения?

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

while a: НЕ пусто ('')

while a:
НЕ пусто ('') тождественно True

a[:step] - работа со строками в Python'е сделана очень удобно. Данная инструкция выделяет из a первые step байт (в данном случае символов).

a[step:] - выборка символов после step. т.е. обработанные не предыдущем шаге символы просто отбрасываем. корректно работает, даже если осталось

первые три инструкции можно в одну строку записать:
a, su, step = "123123123123", 0, 1

вообще, для решения вашей задачи достаточно того минимума введения в язык, что дано в википедии :)

P.S.: Linux - это красная таблетка :-) Windows - синяя...

Aladdin написал(а): while

Aladdin написал(а):
while a:
НЕ пусто ('') тождественно True

Пока a: что то содержит. Из этого следует, что дальше a: режется и пилится :-)

Цитата:
a[:step] - работа со строками в Python'е сделана очень удобно. Данная инструкция выделяет из a первые step байт (в данном случае символов).

a[step:] - выборка символов после step. т.е. обработанные не предыдущем шаге символы просто отбрасываем. корректно работает, даже если осталось

Как я понял, это работает примерно так:

(set 'STR "12345")

(println (0 STR))       => 12345
(println (1 STR))       => 2345
(println (2 STR))       => 345
(println (3 STR))       => 45
(println (4 STR))       => 5
(println (1 -1 STR))    => 234
(println (2 -2 STR))    => 3
(println (-1 STR))      => 5
(println (-2 STR))      => 45
(println (-3 STR))      => 345
(println (-4 STR))      => 2345
(println (-5 STR))      => 12345

Каждому свое конечно, но зачем вводить лишние элементы синтаксиса? Это мне непонятно.

Цитата:
...вообще, для решения вашей задачи достаточно того минимума введения в язык, что дано в википедии :)

Так глубоко изучать Puthon я не планировал :-)

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

Раз "пошла такая пьянка", вот

Раз "пошла такая пьянка", вот интересная статья про то, как по мнению автора, корректно сравнивать языки программирования.

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

(*)

Давно хотел спросить. Из моей ссылки выше - в части Quotation - в чём фишка этого Quotation? Неужели только в том, что 'hello - это строка 'hello' а '(this is a test) это просто список строк ['this', 'is', 'a', 'test']?

mastepaner написал(а): Давно

mastepaner написал(а):
Давно хотел спросить. Из моей ссылки выше - в части Quotation - в чём фишка этого Quotation? Неужели только в том, что 'hello - это строка 'hello' а '(this is a test) это просто список строк ['this', 'is', 'a', 'test']?

Если вы имеете ввиду вот этот кусок:

'hello 
'(this is a test) 
'(hello world (+ 2 2))

Одиночная кавычка вначале строки, это сокращенная запись функции quote. Эта функция указывает Лиспу не вычислять значение выражения. Например:

(set 'VALUE "Присваиваемое значение")
(println VALUE)                        => "Присваиваемое значение"
(println (quote VALUE))                => VALUE
(println 'VALUE)                       => VALUE

Здесь получилась такая "фишка". Лисп разместил в памяти строку "Присваиваемое значение", и адрес размещения строки в памяти связал с другой строкой - VALUE. Если теперь запросить у Лиспа VALUE, он с готовность вернет связанную строку, но если указать quote перед VALUE, тогда Лисп вернет эту строку, а про связанную и не вспомнит.
Немного сумбурно получилось :-)

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

ааа они придумали указатели.

ааа они придумали указатели. если я правильно понял статью, то brainfuck и whitespace всех уделывают.

Это просто я так сумбурно все

Это просто я так сумбурно все описал. Вот еще пример, может он лучше меня все объяснит:

(set 'CUBE '(lambda (x)(* x x x)))
(println 'CUBE)                    => CUBE
(println (CUBE 5))                 => 125
(println (source 'CUBE))           => (define (CUBE x)(* x x x))

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

Вот, взгляни на модуль работы

Вот, взгляни на модуль работы с brainfuck:-)

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

в Python ВСЁ указатели :) и

в Python ВСЁ указатели :) и сборщик мусора там интерактивный - у каждого объекта в памяти, на который обращаются переменные, есть счетчик ссылок на него. как он обнуляется, так объект уничтожается. Типа так:
a = 2
b = a
a += 1
чему равно b ? ;)

на объект 2 (который был двойкой, пока не было выполнено a += 1) указывают два указателя. делаем b = 3. Не смотря на то, что b и так 3 (упс, проговорился! :) ), создается новый объект, декрементируется счетчик указателей на объект, на который указывали a и b. делаем a = 4. счетчик объета, на который указывала a, декрементируется, становитс равным 0 и объект уничтожается. Без периодических запусков сборщиков мусора, как в java. а на счет скорости... обратитесь к учебному курсу по Python на ibm-developers ;) Байт-код, завязаный на либы и ядро, написаное на C не так уж и медленен...

P.S.: Linux - это красная таблетка :-) Windows - синяя...

eegorov@egorov-ey /tmp $ cat

eegorov@egorov-ey /tmp $ cat test.py 
a = 1;
b = a;
a += 1;
print(a);
print(b);
eegorov@egorov-ey /tmp $ python test.py 
2
1

Толи я что-то не понимаю, толи ты переврал насчет указателей.
ЗЫЖ Я под указателями понимаю следующее:

eegorov@egorov-ey /tmp $ cat test.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
        int * a = (int *)malloc(sizeof(int));
        int * b;                                                                                                                             
        *a = 1;                                                                                                                              
        b = a;                                                                                                                               
        *a += 1;
        printf("a: %d\n", *a);
        printf("b: %d\n", *b);
        free(b);
}

eegorov@egorov-ey /tmp $ gcc test.c -o test
eegorov@egorov-ey /tmp $ ./test 
a: 2
b: 2

вероятно, да, напутал... до a

вероятно, да, напутал... до a += 1 это один объект, потом раздление. :S
P.S.:
http://otvety.google.ru/otvety/thread?tid=2105e01ecf09ca45 - вот тут пример, поддтверждающий мою правоту в первой части

Help on built-in function id in module __builtin__:

id(...)
    id(object) -> integer
    
    Return the identity of an object.  This is guaranteed to be unique among
    simultaneously existing objects.  (Hint: it's the object's memory address.)

P.S.: Linux - это красная таблетка :-) Windows - синяя...

Цитата: А вам не кажется,

Цитата:
А вам не кажется, что вы несколько извращаете ситуацию? Почему вы считаете, что Питон работает с числами как с объектами? Это же явный изврат. Питон выводит 3 не потому что в b хранится указатель на a (в этом случае он должен был бы вывести 4 так как a изменилось, а значит изменилось значение, лежащее по этому адресу), а потому что он как любой нормальный язык программирования присвоил b ЗНАЧЕНИЕ a, а не ссылку на него.

©

это мнение комментатора по

это мнение комментатора по указанной ссылке. :) я же привел "мнение" help(id)

P.S.: Linux - это красная таблетка :-) Windows - синяя...

Да я тебя прекрасно понял. И

Да я тебя прекрасно понял. И то, что объект создается во время модификации я не оспариваю. Я просто не склонен рассматривать в питоне все переменные как указатели. Именно в контексте программирования на нем, а не написания расширений для него.

это мнение комментатора. я же

это мнение комментатора. я же привел мнение help(id) ;)

P.S.: Linux - это красная таблетка :-) Windows - синяя...

я вот единственное в

я вот единственное в документации не могу найти инфу, или так происходит т.к. числа это immutable типы и создаётся новый объект, или так как в Java есть Primitive и Reference Types + чит для чисел < const. Интересно если бы кто из питонистов прояснил.

судя по help(id) (id(a),

судя по help(id) (id(a), id(b)) - так же и в питоне. только названо иначе.

P.S.: Linux - это красная таблетка :-) Windows - синяя...

судя по id в питоне не так

судя по id в питоне не так как в java. Действительно в питоне всё это объекты, только есть immutable и не immutable объекты, таким образом b=a, присваивает значению в ссылку на объект на который указывает а, но любая операция над а изменяющая его создаёт новый объект (не очень-то эффективно).
В java есть Reference Types обладающие такими же свойствами и primitive types, и мощной системой boxing-unboxing, для выжимания производительности из всего этого.

картинка если help не врёт

                         |-----------------------|
a = 1          [a]----> {1}-------------------->(+)
b = a                    ^-----------[b]         |
a+= 1     [a]->[a']---->{2}<---------------------+

a = 4 b = 4 id(a), id(b) ?

a = 4
b = 4
id(a), id(b)
?

P.S.: Linux - это красная таблетка :-) Windows - синяя...

>>> a =4 >>>

>>> a =4
>>> id(a)
26683248
>>> b=4
>>> id(b)
26683248

что-то не так?

все так. :) четверка - "одна

все так. :) четверка - "одна и та же" :)
upd: вот тут интересненький обзор по ОЯП. Питона, там, правда, нет, но в конце график "Линия Вирта". Языки избыточны?
upd1: а сцылку не дал :) http://www.uni-vologda.ac.ru/cs/syntax/ariphm.htm

P.S.: Linux - это красная таблетка :-) Windows - синяя...

уйди пожалуйста читать маны

уйди пожалуйста читать маны по своему защищаемому тобой ЯП, или сначала хотя бы проверяй примеры, которые ты приводишь. Ещё
раз повторюсь, что питон не предназначен для выжимания всех возможностей из железа, он для других задач, это отличный скриптовый
язык, который можно использовать для административных скриптов, небольших утилит, быстрого создания UI, в WEB, немало правда?

к слову в яве сейчас наилучший GC среди всех мутабельных языков, питонам шарпам и прочим зверям до него ещё несколько лет развития,
если развитие явы остановят.Другое дело immutable языки там могут быть принципиально другие GC, но там свои проблемы.

по поводу Цитата: к слову в

по поводу

Цитата:
к слову в яве сейчас наилучший GC среди всех мутабельных языков, питонам шарпам и прочим зверям до него ещё несколько лет развития,
если развитие явы остановят.Другое дело immutable языки там могут быть принципиально другие GC, но там свои проблемы.

а если учесть, что в java еще и патентами обложено...

P.S.: Linux - это красная таблетка :-) Windows - синяя...

С рулит!

С рулит!

char str[] = "123123123123";
int i, result;
for(i = 0, result = 0; str[i]; result += str[i++] - '0');
printf("The sum of charachters in the string: %d\n", result);

А никто и не сомневался, но

А никто и не сомневался, но хочется узнать, для каких типов задач он рулит? И какие задачи лучше не решать с использованием Си?

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

Если говорить о вопросе,

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

eegorov написал(а): Если

eegorov написал(а):
Если говорить о вопросе, поставленном в топике, то данная задача достаточно легко реализуется практически на любом языке программирования, поэтому метод проведения твоего "исследования", на мой взгляд, не совсем корректен...

Каюсь, хотел вызвать дебаты :-) Один человек не может знать все одинаково хорошо, поэтому такой вброс.

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

Вот тут я сильно сомневаюсь в объективности показателей. Если бы проекты делались так:

Идет общее собрание...
МЕНЕДЖЕР:
- У нас есть солидный заказчик и ему нужно создать СУПЕР-ПРОГУ. На каком языке ее лучше реализовать?
КОНСУЛЬТАНТ:
- Раз эта СУПЕР-ПРОГА будет работать ТАМ, тогда лучше использовать этот ЯП, а вот эти модули лучше писать на этом ЯП.
МЕНЕДЖЕР:
- Программистам понятно? Марш учить соответствующие ЯП!
ПРОГРАММИСТЫ:
- Так точно! Есть!

К сожалению это не так. Я когда то давно баловался ассемблером, и хорошо себе представляю, что им лучше пользоваться, когда программируешь на уровне CPU. Когда используешь Ассемблер, просто видишь как дышит процессор, какие логические "ниточки" он дергает.
Над ним уже расположен Си. Вот с ним я знаком поверхностно и не могу хорошо себе представить на каких задачах он хорош.

Цитата:
...Понятно, что для написания ядра операционной системы больше подходит С (хотя на питоне тоже, вроде, пишут), но для web-приложения выбор C будет неоправданным.

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

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

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".