LINUX.ORG.RU

Создатель Python разочарован в Scala

 , ,


2

0

Гвидо ван Россум, создатель Python, в своем блоге делится впечатлениями от изучения языка Scala: "К сожалению, я полностью разочарован в этом языке". Причиной является слишком сложная система типов Scala: "Если такая система необходима для корректной обработки разных типов данных во время компиляции, я однозначно предпочту динамическую типизацию".

>>> пост

anonymous

Проверено: maxcom ()
Ответ на: комментарий от tailgunner

Ок. Теперь понял. Просто для меня union достаочно низкоуровневая вещь. В хаскелле это кстати один тип с разными конструкторами. И если я уж его одним способом создал - то по другому пользовать и не могу. Что мне кажется больше похоже по сути.

theos ★★★
()
Ответ на: комментарий от theos

> Просто для меня union достаочно низкоуровневая вещь.

Да и сам Си - невысокого уровня

> В хаскелле это кстати один тип с разными конструкторами.

Это и в Си один тип :) Конечно, конструкторов в Си нет.

tailgunner ★★★★★
()
Ответ на: комментарий от Led

>Как правило - именно ним

какие-то у вас ну очень уникальные проекты...
по крайней мере в россии спецов по ерлангу - единицы

thevery ★★★★
()
Ответ на: комментарий от anonymous

>> в адрес Хаскеля (100% академического языка, не справляющегося с элементарными практическими задачками)
>anonymous 100% idiot?


Отнюдь. Вот вам примитивная задачка из практики. (Кстати, я её недавно задавал местным горе-лисперам в лице Sun-ch сотоварищи, и они пока не справились.)

Суть такова. Считать из потока в память массив мегабайт эдак на двести и посчитать на нём парочку разных статистик. При этом померять размер аллокированного хипа. Спасибо.

anonymous
()
Ответ на: комментарий от anonymous

> Суть такова. Считать из потока в память массив мегабайт эдак на двести и посчитать на нём парочку разных статистик. При этом померять размер аллокированного хипа. Спасибо.

Что сделать конкретно надо?

mv ★★★★★
()
Ответ на: комментарий от mv

1) считать из /dev/urandom 10 мегабайт мусора (пусть это Xn, n=1..10M) в память;
2) посчитать среднее (M=sum(Xn), n=1..10M) и отклонения Dn=|Xn-M|
3) сплюнуть отклонения в файл, в результате должно получиться ещё 10 мегабайт мусора
4*) задача со звёздочкой, олимпиадная, самая сложная :) не задавать вопросов типа "а зачем так, а ведь можно по-другому" и тому подобных. Задача сформулиролирована как минимальная из класса задач на вычисления на больших массивах, не решаемых в один проход (в режиме потока). Реальные задачи сложнее, я всего лишь берегу ваши силы.
5) запустить получившуюся программу под valgrind, чтобы померять выделение оперативной памяти.

Благодарю за проявленный интерес.

anonymous
()
Ответ на: комментарий от sv75

> Что когда я говорю "множество", я не говорю чего? 

Тебе таки придется сказать "чего", иначе ты получить парадоксы
 наивной теории множетств :-)

> Говорите, но кто сказал что это "чего" соответствует статическому
 типу данных? К примеру, откуда взялись union в С -- ведь они ни
 чёрта не статические по сути? 

union в плюсах -- это способ *быстро* объяснить компилятору, что ты
 *лучше* него понимаешь, в чем дело. 

Смотри один из немногих стоящих примеров юзания юнион, который *не
 нарушает* типизацию:


// g++ union_test.cxx && ./a.out
#include <iostream>

struct Point {int x; int y; };

struct Rect { union {
    struct {
        Point top_left;
        Point bottom_right;
    } point;
    struct {
        int left;
        int top;
        int right;
        int bottom;
    } coord;
};};

int main(int argc, char** argv) {
    Point a; a.x=1; a.y=2;
    Point b; b.x=3; b.y=4;
    Rect r;

    // Ява-прогерам смотреть эти две строки:
    r.point.top_left=a; r.point.bottom_right=b;
    std::cout << r.coord.left << r.coord.top << r.coord.right << r.coord.bottom << "\n" ;

    return 0;
}

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от anonymous

> 5) запустить получившуюся программу под valgrind, чтобы померять выделение оперативной памяти. Анонимус, тут ты меряешь не язык, а программера :-)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от theos

> Можете привести _нормальный_ пример где действительно нужны union?

Да, смотри мой ответ sv75.

Кстати, как *это* делается на других языках? :-)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Ну я просто не знаю другого инструмента для быстрой оценки аллокированного хипа :) понятное дело, что valgrind в первую очередь ловит ошибки ДНК.

anonymous
()
Ответ на: комментарий от phasma

>и где там написано, что appengine не на питоне ?

Ага жабские и перловые биндинги к аппэжнжайн были к питону - да?

r ★★★★★
()
Ответ на: комментарий от thevery

>какие-то у вас ну очень уникальные проекты...

Разные

>по крайней мере в россии спецов по ерлангу - единицы

Да, с кадрами напряг. Но толковые программисты быстро учатся.

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

>Там в основе Django.

Нету там в основе джанги - джанга там установлена по умолчанию а фрейм офрк они не ограничивают.

>Естественно, на другом фреймворке.


Мы наверное разное подразумеваем под энжайн. Аппэнджайн это хрень которая позволяет хостить апликейшены - питон это всего лишь фронтэнд.

r ★★★★★
()
Ответ на: комментарий от tailgunner

> То есть ты утверждаешь, что четкая статическая структура есть не всегда? O_O ПРЕДАТЕЛЬ

Иногда проще плюнуть на четкую статическую структуру.

Например: целое_число и целое_ненулевое_число это два разных типа данных, но в 99% случаев их никто не будет пытаться реализовывавать *отдельно*.

Впрочем, может быть хорошая система типов такое и позволила бы.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от sv75

>Примеры: unix shell как DSL, языки описания сценариев игр (для небанальных случаев проще взять питон, что и делается).

Это не DSL ни разу. Не надо путать DSL и скриптинг.

r ★★★★★
()
Ответ на: комментарий от thevery

>не стать скале следующией java в первую очередь из-за сложности. Вот groovy вторым языком может стать, это да.

Динамически типизированный язык? Не смешите мои тапки. Жаба - это не только мордны типа CRUD на вебе ваять.

r ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>Например: целое_число и целое_ненулевое_число это два разных типа данных, но в 99% случаев их никто не будет пытаться реализовывавать *отдельно*.

По причине того что нету выразительных средств языка (AFAIR в ada они были).

r ★★★★★
()
Ответ на: комментарий от r

>По причине того что нету выразительных средств языка (AFAIR в ada они были).

К стати интересно а нужно ли? Я с трудом представляю себе реалистичные сценарии использования кроме компиляции с тапчеками и рантайм исключениями. Даже если допустить некую систему типов где можно определеить что

type positive = int(0..)
i : positive

то это поломается

f (x: positive, y: positive): positive = x - y

i = f (5,10)

И никакой компилятор этого не проверит.

Максимум - можно вставить TypeException.

То есть подобные вези не особенно прижились именно по причине практической малоприменимости.


r ★★★★★
()
Ответ на: удаленный комментарий

Что-то неладно с Java community на ЛОРе.
Такого количества озабоченных и комлексующих психов я на програмерских форумах давно не видел.

Да, я не сторонник Питона. Да, я программирую на Java.
Но, господа, умалищённые фанатики, вы ведь и в подмётки не годитесь Гвидо.

Оно,понятно, ЛОРовские аналитеги никогда не отличались наличием ума, но как-то от сторонников Java я такого психоза не ожидал :(

Есть пара неадекватных личностей, но к ним все привыкли и не обращают внимания но такой наплыв!

Весьма печально.

NonHuman ★★★
()
Ответ на: комментарий от r

> По причине того что нету выразительных средств языка (AFAIR в ada они были).

Речь шла именно о целых числах -- т.е.

А. ..., -3, -2, -1, 0, 1, 2, 3, ...

Б. ..., -3, -2, -1, 1, 2, 3, ...

Компилятору надо проверить, что в результате x-y мы получаем не ноль. Это возможно, но таки бывает часто очень сложно :-)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от pierre

> Ну, тогда решай свои задачи горами тестов и часами отладки.

Ох-хо-хо... Примерно так и приходится. Основной язык программирования в данный момент - C++. Как только сложность программы переваливает за некоторый рубеж без тестов (и юнит- и интегральных, с точки зрения пользователя) всё одно не обойтись, независимо от языка программирования.

AlexM ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>В общем случае это конечно невозможно, да, я знаю.

Ограничено только константами. А это не стоит возни - одно значение из внешней среды ломает всю цепочку. А в рантайме тормозов только добавляет - чек на каждую арифметическую операцию.

r ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> Компилятору надо проверить, что в результате x-y мы получаем не ноль. Это возможно, но таки бывает часто очень сложно :-)

Ты хочешь чего-то странного. Это нетипичный use case. А если все-таки приспичило, то просто сразу после вычисления x-y проверяешь на нуль и кидаешь эксепшн в случае чего. Что может быть проще?

dave ★★★★★
()
Ответ на: комментарий от r

> Это не DSL ни разу. Не надо путать DSL и скриптинг.

Язык описания данных для игр по-моему сложно отделить от скриптинга. А DSL там же есть, потому что есть domain.

sv75 ★★★★★
()
Ответ на: комментарий от sv75

> Вы считаете С++ или пусть даже Java в тестах хотя бы с полным покрытием кода не нуждаются?

Я не считаю их нормально типизированными языками :-)

pierre
()
Ответ на: комментарий от pierre

> Я не считаю их нормально типизированными языками :-)

Нормально типизированный (это haskell? ) не будет нуждаться в тестировании? Не верю.

sv75 ★★★★★
()
Ответ на: комментарий от DIMON

> А создатель Scala разочарован в Python. Счет 1:1 :)

Это вряд ли. Иначе бы он сидел спокойно кодил на яве.

sv75 ★★★★★
()
Ответ на: комментарий от anonymous

хорошо, что ты не работаешь программистом.

anonymous
()
Ответ на: комментарий от anonymous

много однообразной математики.

/fixed/

anonymous
()
Ответ на: комментарий от r

как я и сказал — гвидо ниасилило прочитать книжко.

anonymous
()
Ответ на: комментарий от valich

а чо тебя кормить-то? ну, писал на Forth. потом на LISP. потом на C. потом на C++. теперь на LISP и C++. на LISP удобней писать, на C++ — отлаживать. %-)

anonymous
()
Ответ на: комментарий от Absurd

собственно, весь ваш stl — хуита.

anonymous
()
Ответ на: комментарий от sv75

>языки описания сценариев игр (для небанальных случаев проще взять питон, что и делается).

для небанальных случаев проще взять Lua, что и делается.

/fixed/

anonymous
()
Ответ на: комментарий от anonymous

> самое забавное -- ведь действительно нафиг не нужна. вот засада-то.

Если под математикой понимается матан с линейкой -- то да, если только вы не моделируете что-то, хорошо описываемой матаном или линейкой.

Но математика -- это не матан ;)

sv75 ★★★★★
()
Ответ на: комментарий от thevery

неверное потому, что они не нужны в больших количествах.

anonymous
()
Ответ на: комментарий от NonHuman

>вы ведь и в подмётки не годитесь Гвидо.

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

anonymous
()
Ответ на: комментарий от sv75

это я саммоню луафагов и луахэйтеров, для фана.

anonymous
()
Ответ на: комментарий от anonymous

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

whitespace на 1 лет моложе.

Ви таки что-то имеете против форматирования? Неужто анонимус озабочён сложностью кодогенерации на питоне?

sv75 ★★★★★
()
Ответ на: комментарий от r

>Динамически типизированный язык? Не смешите мои тапки. Жаба - это не только мордны типа CRUD на вебе ваять.

вот потому я и сказал "вторым"

thevery ★★★★
()
Ответ на: комментарий от anonymous

> Да

А в чём ваша проблема? Если это не кодогенерация -- то, как я смутно подозреваю, вы вряд ли придерживаетесь какого-либо coding style и в других языках.

sv75 ★★★★★
()
Ответ на: комментарий от Led

Ссылку, ссылку в студию, сестра!

anonymous
()
Ответ на: комментарий от sv75

> Но математика -- это не матан ;)

Полностью соглашусь с тобой. Есть еще логика, теория предикатов, теория алгоритмов и прочее. Например, постановщик задачи должен мыслить математически. Это не значит, что он должен иметь диплом математика. Он просто должен так мыслить. Внутренняя непротиворечивость или корректность постановки задачи. Правильное определение основных use cases. Да и много всего остального наберется. Для все этого нужны навыки математического мышления.

А постановкой задачи в программировании приходится заниматься постоянно. От уровня всего проекта до уровня мельчайших функций. Чтобы правильно спроектировать и написать простейшую функцию, нужно прежде правильно поставить задачу. И так постоянно.

Да, математика гораздо шире.

Еще вы тут спорите о том, кем должен быть настоящий супер-пупер программист. Математиком или филологом? На этот вопрос уже давно отвели. Как основные открытия делаются на стыке наук, так и классный специалист должен разбираться во многих вещах. Мыслить как математик, чувствовать красивый и некрасивый код как эстет. Иметь превосходную интуицию. Чтобы развить в себе эти качества нужны годы обучения как гуманитарным так и естественным наукам. (sv75, или это опять overkill?)

В общем, узкие специалисты имеют свой предел. И так в любой области.

dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.