Автор Тема: Язык для прикладных задач  (Прочитано 41013 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Язык для прикладных задач
« : Август 01, 2012, 10:46:03 am »
Хочу поделиться одним наблюдением. При решении сложных прикладных задач над большими объемами данных узким местом практически всегда является чтение и запись этих самых данных. Т.е. скорость работы программы упирается в скорость жесткого диска, скорость сети, производительность сервера, да и вообще в нагруженность системы. Во что угодно, только не в скорость языка. По моим наблюдениям соотношение обычно 1:10, т.е. за десять минут работы программы код работает всего 1 минуту.
Вывод: решение прикладных задач на нативных языках не имеет смысла.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Язык для прикладных задач
« Ответ #1 : Август 01, 2012, 11:18:18 am »
Хочу поделиться одним наблюдением. При решении сложных прикладных задач над большими объемами данных узким местом практически всегда является чтение и запись этих самых данных. Т.е. скорость работы программы упирается в скорость жесткого диска, скорость сети, производительность сервера, да и вообще в нагруженность системы. Во что угодно, только не в скорость языка. По моим наблюдениям соотношение обычно 1:10, т.е. за десять минут работы программы код работает всего 1 минуту.
Вывод: решение прикладных задач на нативных языках не имеет смысла.

Эмм. Ну вот мне нужно рисовать спектрограмму в режиме реального времени. То есть в простейшем случае это будет либо DFT либо DCT (дискретное преобразование фурье, либо дискретное косинусное преобразование). Теперь вопрос - реально ли все равно на каком языке решать такую ПРИКЛАДНУЮ задачу?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Язык для прикладных задач
« Ответ #2 : Август 01, 2012, 11:34:12 am »
Если есть графическая библиотека (написанная на нативном языке естественно), то почему нет?!

ps На жабаскрипте вон целые 3д сцены ваяют под WebGL.
« Последнее редактирование: Август 01, 2012, 11:35:51 am от ilovb »

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Язык для прикладных задач
« Ответ #3 : Август 01, 2012, 11:54:12 am »
Если есть графическая библиотека (написанная на нативном языке естественно), то почему нет?!

ps На жабаскрипте вон целые 3д сцены ваяют под WebGL.
Визуализация спектрограммы тут не является узким местом.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Язык для прикладных задач
« Ответ #4 : Август 01, 2012, 12:10:32 pm »
Идеальный язык для прикладных программ -- это Дельфы, всё остальное нафиг не надо )))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Язык для прикладных задач
« Ответ #5 : Август 01, 2012, 12:13:09 pm »
2 valexey
Я не думаю что скорость вычислений будет катастрофически низкой. И если даже будет, то этот маленький кусочек можно и нативно наваять. Исключения из правил никто не отменяет. Всегда будут ситуации, когда необходимо спуститься на уровень ниже (иногда и до асма).
Опять же вычисления в реальном времени это довольно специфическая область, которая обычно обеспечивается специальными средствами. Но это опять же не повод решать прикладную задачу полностью на нативном языке. Большую часть кода лучше писать на хорошем гибком скриптовом языке имхо. В прикладных задачах удобство важнее производительности.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Язык для прикладных задач
« Ответ #6 : Август 01, 2012, 12:17:30 pm »
Идеальный язык для прикладных программ -- это Дельфы, всё остальное нафиг не надо )))
На мой взгляд Дельфы тоже слишком сложен и ограничен, чтобы прикладник тратил время на него.
Я бы голосовал за 1С, но он слишком примитивен для современного языка.

зы Lua кандидат
« Последнее редактирование: Август 01, 2012, 12:23:15 pm от ilovb »

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Язык для прикладных задач
« Ответ #7 : Август 01, 2012, 12:21:57 pm »
В идеале, для различных прикладных задач должны быть различные простые языки высокого уровня, которые должны быть надстройкой над единым низко-среднеуровневым языком, к примеру, тем же Обероном.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Язык для прикладных задач
« Ответ #8 : Август 01, 2012, 12:33:30 pm »
Вот кстати насчет Оберонов... КП хвалят на том форуме за рефлексию, а мне вот с некоторых пор думается, что рефлексия в нативном языке нафик не нужна. Нужна рефлексия - юзай скриптовый язык.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Язык для прикладных задач
« Ответ #9 : Август 01, 2012, 12:36:06 pm »
2 valexey
Я не думаю что скорость вычислений будет катастрофически низкой.
А я тоже не думаю, я знаю какой будет скорость, потому как именно этим и занимаюсь :-) И ладно преобразование фурье, оно относительно быстрое, но есть же например еще и сингулярное разложение матриц, а вот это уже тормоза вполне конкретные. Вплоть до того, что получается лишь один раз в несколько секунд анализ производить.

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

Опять же вычисления в реальном времени это довольно специфическая область, которая обычно обеспечивается специальными средствами.
Область может и специфическая, но весьма попсовая на самом деле. Любой видео или даже аудиоплеер - это реалтайм, любой софтфон (тот же скайп) - это реалтайм. Почти любая игра - это реалтайм :-)

Но это опять же не повод решать прикладную задачу полностью на нативном языке.
Вообще, что такое нативный язык? :-) Вот Ада - это нативный язык? А C++?

Большую часть кода лучше писать на хорошем гибком скриптовом языке имхо. В прикладных задачах удобство важнее производительности.
Дык в том то и дело что языки которые были разработаны исключительно для скриптовых применений, не удобны для всех остальных применений, ибо слижком уж низкоуровневы (в них нет инструментария для создания собственных абстракций). Ну что ты напишешь хорошего на таком типичном скриптовом языке, как язык bat-файлов доса? Ну, или, если брать более продвинутый язык созданный для скриптовых применений - на bash'e?

Не следует путать скриптовые языки (то есть языки которые создавались исключительно для скриптового применения, то есть написания СКРИПТОВ) с языками у которых пока есть только реализации в виде интерпретаторов (то есть компиляторы в native пока не написаны, например php, хотя у него вроде бы уже есть и компилятор в native или около того).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Язык для прикладных задач
« Ответ #10 : Август 01, 2012, 12:52:13 pm »
Ну под скриптовыми я подразумеваю такие как JS, ActionScript, 1С, Lua, ну и всякие питоны с рубями наверно тоже.
Вот Java скорее нативный...
Дать точное определение конечно сложно.

В скриптовых языках рефлексия обычно работает без дополнительных телодвижений.
Ну например:

Запись = Новый Структура("Имя, Фамилия")
Запись["Имя"] = "Вася"
Запись["Фамилия"] = "Пупкин"

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Язык для прикладных задач
« Ответ #11 : Август 01, 2012, 01:03:06 pm »
Или вот еще пример:

Поля = "Один, Два, Три, Четыре";

Запись = Новый Структура(Поля)

Счетчик = 1;

Выполнить("
|Для Каждого Поле Из Запись Цикл
|   Запись[Поле.Ключ] = Счетчик;
|   Счетчик = Счетчик + 1;   
|КонецЦикла;")

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Язык для прикладных задач
« Ответ #12 : Август 01, 2012, 01:03:42 pm »
Ну под скриптовыми я подразумеваю такие как JS, ActionScript, 1С, Lua, ну и всякие питоны с рубями наверно тоже.
Вот Java скорее нативный...
Дать точное определение конечно сложно.
Ну почему же сложно? Очень просто: скриптовый язык - язык который был разработан исключительно для скриптовых применений. Таким образом ни современный js, ни, тем более ActionScript, ни Lua/Python/Ruby, скриптовыми языками НЕ являются. Равно как и java.

Далее: все эти языки, кроме java, роднит одно - динамическая типизация (в ActionScript'e, и, по моему, Ruby, есть и статическая, также статическая уже и в js встречается). Но динамическая у всех, это не значит что она у всех одинаковая - у некоторых языков из перечисленных выше, типизация строгая, у некоторых слабая/не строгая.

В скриптовых языках рефлексия обычно работает без дополнительных телодвижений.
Ну например:
Запись = Новый Структура("Имя, Фамилия")
Запись["Имя"] = "Вася"
Запись["Фамилия"] = "Пупкин"
Эмм.. А чем, тут суть? И чем это так сильно отличается от:
map<string, string> record;
record["Имя"] = "Вася";
record["Фамилия"] = "Пупкин";
Замечу, что никакого рефлекшина тут не надо :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Язык для прикладных задач
« Ответ #13 : Август 01, 2012, 01:05:17 pm »
Или вот еще пример:

Поля = "Один, Два, Три, Четыре";

Запись = Новый Структура(Поля)

Счетчик = 1;

Выполнить("
|Для Каждого Поле Из Запись Цикл
|   Запись[Поле.Ключ] = Счетчик;
|   Счетчик = Счетчик + 1;   
|КонецЦикла;")
Я откровенно не понимаю что тут делается :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Язык для прикладных задач
« Ответ #14 : Август 01, 2012, 01:18:31 pm »
А так? :D

VAR
rec: RECORD
   one: INTEGER;
   two: INTEGER;
   three: INTEGER;
   four: INTEGER;
END;
i: INTEGER;
BEGIN
   i := 1;
   RUN("FOR EACH field IN rec DO rec[field.key] = i; INC(i); END;");
END