Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Pascal, Delphi, Lazarus?

До речі, чому зник Pascal і відмирає Delphi, а про Lazarus мало хто в курсі?

👍ПодобаєтьсяСподобалось1
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Ти саме про старий Delphi чи вже про RAD Studio (цікаво цим хтось користується?)

Я наразі використовую RAD Studio 10.4, це ж і є Delphi ))) (+ UniGUI)

Ну під Delphi я розумію legacy зроблене коли він був популярним.
Зараз продукт називається RAD Studio. Може і те саме, але контекст інший і означає що хтось ДОБРОВІЛЬНО цим користується.

Delphi — живий! Що з ним не так? Все так!

Помогите пожалуйста. Приведите примеры, когда в программе Lazarus следует применять оператор неполного ветвления.

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

Delphi, Kodak, Nokia — у них всех есть что-то общее

Delphi живее всех живых.
Даже конференции всякие проводят.

сорри ссылка не вставилась почему-то:
rad-studio-osaka.doorkeeper.jp/events/21747
Ну а тут еще немного митапов по всему миру, почти- delphi.meetup.com

Не скажи, что живее всех живых.
Просто сравни свою ссылку с делфи и php.meetup.com

Все делфи программисты соберутся за одним (буквально) столом?

Да, все три.

We are using Python (more) and R (less) for very heavy analysis in HFT. Actually we are moving from R to Python (Pandas).

Actually we are moving from R to Python (Pandas).
Why not from Python to R ? :)

R was written by scientists for scientists
Python was written for software engineers.
In our company software engineers and data analysts are using shared code.
So Python was chosen for compatibility.

It is easier for analysts to move to Python than for developers to move to R

Вирішив провести простий експеримент на швидкість виконання одинакових обчислень на одному і тому самому компі на мовах Pascal, Lazarus, C++ і Python. Обчислення включають джентельменський набір для чисельного моделювання: генерація псевдовипадкових чисел, підняття в дробову степінь, тригонометричні функції, запис в великий масив, цикл, перевірка умови. Кожен код запускався по 10 разів, і на основі цього був обчислений середній час виконання і середньо-квадратичне відхилення.

Ось який вийшов рейтинг:
Почесне четверте місце: Python з часом виконання 31.3 ± 1.1 сек.
Третє місце з великим відривом отримує C++ з часом 4.54 ± 0.01 сек.
Друге місце за Pascal 3.86 ± 0.01 сек.
І перше місце з мінімальним розривом в межах 1 сігма займає Lazarus 3.81 ± 0.04.
Вітаємо переможців !

Тепер поясніть мені, чому мертві Pascal і Lazarus рвуть на клоччя новомодний Python ?
Я на ньому буду чекати результатів в 10 раз довше?

Ось коди на 4-ох мовах, покажіть, що не так.

На Pascal

[code]
program test;
uses crt,math,sysutils;
var
a:array [1..5000000] of double;
t1,t2,b,c,d:double;
i:longint;
begin
randomize;
t1:=Time;
for i:=1 to 5000000 do begin
b:=random;
if b>0.5 then c:=exp(1.546*ln(b)) else c:=exp(0.434232*ln(b));
d:=cos(c+i);
a[i]:=arctan(d);
end;
t2:=Time;
writeln((t2-t1)*24*3600);
end.
[/code]

На Lazarus
[code]
procedure TForm1.Button1Click(Sender: TObject);
var
a:array [1..5000000] of double;
t1,t2,b,c,d:double;
ed:string;
press1, press2: tdatetime;
i,diff:longint;
begin
randomize;
press1:=now;
for i:=1 to 5000000 do begin
b:=random;
if b>0.5 then c:=exp(1.546*ln(b)) else c:=exp(0.434232*ln(b));
d:=cos(c+i);
a[i]:=arctan(d);
end;
press2:=now;
str((press2-press1)*24*3600,ed);
label1.caption:=ed;
end;
[/code]

На С++

[code]
#include <vector>
#include <fstream>
#include <cmath>
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <ctime>
using namespace std;
int main()
{
vector<double> a(4999999);
double t1,t2,b,c,d;
int i;
srand(time(NULL));

t1=std::clock();
for (i=0; i<4999999; ++i) {
b=double(rand())/double(RAND_MAX);
if (b>0.5) { c=pow(b,1.546);} else {c=pow(b,0.434232);}
d=cos(c+i);
a[i]=atan(d);
}
t2=std::clock();
cout<<(t2-t1)/(double)(CLOCKS_PER_SEC)<<endl; }="" [="" code]="" На="" python="" [code]="" import="" math="" import="" time="" import="" random="" import="" struct="" a="[None]" *="" 4999999="" random.seed(time.time())="" t1="time.time()" for="" i="" in="" range(0,="" 4999999):="" b="random.random()" if="" b="">0.5:
c=math.pow(b,1.546)
else:
c=math.pow(b,0.434232)
d=math.cos(c+i)
a[i]=math.atan(d)
t2=time.time()
print t2-t1
[/code]

Думаю, это связано с «true native». не зря говорят что нативные Applications работают быстрее «прослоек». Ближе к железу. Напиши еще на Ассамблере. Но вот чего С++ подкачал... ХЗ. Он быстрее Delphi и это точно. Что-то не так.

Я не на Делфі а на Лазарусі тестував, по часу він нічим від Паскаля не відрізняється.

Кстати ты в астрономии ж работал, вот несколько библиотек, можешь глянуть, если интересно :

astro Astronomy Functions, Tools and Routines
astrochron A Computational Tool for Astrochronology
astrodatR Astronomical Data
astroFns Astronomy: time and position functions, misc. utilities
astrolibR Astronomy Users Library
celestial Collection of common astronomical conversion routines
moonsun Basic astronomical calculations with R
.........

Это еще раз подтверждает то, что определенному типу задач есть свой инструмент. Дерзайте.

Це точно, не розумію, чому data scientist дрочать на Python?

Не думайте об этом, «майнстрим» меняется очень быстро в IT. Вы же не программируете систему реального времени. Вам это не нужно. Огурец можно нарезать Джедаивским мечем, а можно и простым ножом. Выбор за вами, есть только синяя и красная таблетка, пришло время выбирать. Делайте свой выбор осознано. Это может изменить ваше будущее.

Ну так вакансії Data Scientist рябіють Пітонами, а не C++ чи Паскалями !
Я ж повинен якось підлаштовуватися, треба ще JAVA перевірити.

Сегодня живем так, а завтра по другому. Ну я же сказал, зависит от задачи. Видимо им его с головой хватает и есть еще запас прочности. А нет придумают 100500 hiphop’ов

Python высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

Тобто за “повышение производительности разработчика и читаемости кода” жертвують machine time. Я собі уявляю який там machine learning шустрий чи Монте Карло Марковські ланцюжки на Python.

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

Залишилося тільки попасти туди.

В датасцайнс питон забайнден на нейтивные библиотеки

Це точно, не розумію, чому data scientist дрочать на Python?
Изза хотя бы динамической типизации.. В статистике вам нужны 100500 тестов над обьектами и вообще вы работаете “с командной строкой”, а не пишете программы... Те же графики вы делаете “и так и сяк”, а не пишете код, который будет многократно использоватся (в большинстве случаев). И да, к чертям производительность, главное что б код очень легко читался. И для статистиков щас мейнстрим — R, даже потому что в нем “все — вектор”, и про циклы как бы надо вообще забывать....

Принаймні в моїй науці більшість на С/C++.

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

у пітоні куча біндінгів куда завгодно. Заюзали scipy — отримали зручну і шустру числодробілку. заюзали pylab, pyplot — візуалізували інформацію нє отходя от касси, shapely — зручна робота з геометрією.
Все це вже є, працює* на різних ос.
Плюс зручність інтерпретатора.
Плюс, імхо, простіший синтаксис.

А візуалізувати графіки чи рахувати статистику шляхом
uses graph; var g, h, i, x, y, c: integer; begin g := detect; initgraph(g,h,''); setcolor(10); line(10,10, 300,300);
буде дещо довше, ніж згодувати массив з данними бібліотеці.

Наприклад, тому, що обʼєднує зручну логіку вищого рівня з високооптимізованими засобами для безпосереднього виконання складних операцій (numpy, scipy працюють з матрицями і тому подібними суто математичними обʼєктами, надаючи python-інтерфейс до них як до атомарних).

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

Сорі, код на С++ погано вставився в топік, ось дійсний код:

#include <vector>
#include <fstream>
#include <cmath>
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <ctime>

using namespace std;

int main()
{
vector<double> a(4999999);
double t1,t2,b,c,d;
int i;
srand(time(NULL));
double norma_rmax=1/double(RAND_MAX);
cout<<norma_rmax<<endl; t1="std::clock();" for="" (i="0;" i<4999999;="" ++i)="" {="" b="double(rand())/double(RAND_MAX);" if="" (b="">0.5) { c=pow(b,1.546);}
else {c=pow(b,0.434232);}
d=cos(c+i);
a[i]=atan(d);
}
t2=std::clock();
cout<<(t2-t1)/(double)(CLOCKS_PER_SEC)<

Что-то вы неправильно меряете.
У меня собранный плюсовый код выполняется порядка 0.040s
Это с ключем -Ofast. Без него — 0.6s

Я на Intel Core i5, [email protected] GHz CPU запускаю, а ви?

Он же. MBP late 2013 ([email protected]).
Ключик -O3 или -Ofast компилятору ставите?

ну поставив
g++ -O3 test.cpp
все одно ті ж 4.5 сек

???
4.65661e-10
0.038626
Что за компилятор такой, что на три порядка медленнее?

Поставив Ubuntu 14.04.2, компілятор gcc version 4.8.2
g++ -O3 -Ofast test.cpp -o a.out
час все одно 3.67386
В чому може бути діло?

g++ -march=native -mfpmath=sse -msse2 -O3 -Ofast test.cpp -o a.out

?

Собрал в Xcode и посмотрел профайлером — из 0.037s времени выполнения функция rand() выполнялась 0.034s или 87% всего времени выполнения.
Переписывайте тест, чтобы хотя бы до десятых секунды подняться. )

Ты не замечаешь, что компилятор вообще устраняет (optimizes out) любые вычисления, потому что массив a нигде не используется! Его надо перенести на глобальный уровень, чтобы вычисления остались.
UPDATE: ниже таки заметил. но оставлю, потому что ветки путаные.

Похоже, в этом тесте сравнивались разные генераторы псевдослучайных чисел. Там должны быть разные алгоритмы реализованы.

Не, я там ниже написал о своей ошибке. Весь код кроме рэндома соптимизировался в 0 по причине неиспользования результата. Если его зафиксировать — порядка секунды выходит и раскладывается более-менее ровным слоем по математике.

Тебе дали понять, что по твоему коду нельзя точно судить. Я же говорил С++ работает быстрее это проверено годами и до нас. Но и паскаль не хуже. Но ты на быстродействие не смотри как на язык. А смотри на архитектуру, в целом. Тут тебе и ОС и Процессор и работа с регистрами процессора. Да много всего всего.... Нюансов много на самом деле. Практика показывает, что в теории должно работать быстрее, но в жизни как оказывается все наоборот.

Мои тесты вашего C++ кода. Фряха 9.3/amd64. Компиляторы gcc и clang; из gcc, 4.2.1 системный, остальные портовые из последних. Процессор Pentium G860 @ 3.00GHz (SandyBridge) — зверь явно медленнее вашего по суммарной производительности. Задавал -march=native. Машина не загружена.
gcc 4.2.1, при любом уровне оптимизации — времена порядка 1.66 секунды. То же с 4.7, 4.8.
С 4.9, 5.1 — около 1.57 секунды.
clang всех версий от 3.3 до 3.6 — тоже 1.57 или 1.58. Опять-таки оптимизация вообще не меняет цифры больше чем на долю разброса.

Так что у вас за компилятор C++?

PS: коду таки нужна правка: массив «a» вынести из main() на глобальный уровень, чтобы компилятор не оптимизировал к лешим все вычисления.

Поставив Ubuntu 14.04.2, компілятор gcc version 4.8.2
g++ -O3 -Ofast test.cpp -o a.out
час все одно 3.67386
В чому може бути діло?

Есть подозрение, что -Ofast он исключает (мёртвый по сути) тестовый код.

Update: ага, pow вместе со всем floating point. Хитрый гад.
rand() оставляет, скорее всего потому что она не чистая.

Упс, позор на мою голову. Точно!
Нужно после цикла где-то «а» использовать, типа
cout<<(a[0]+a[4999998])<

С -Ofast на убунте 14.04 и i7 3.4GHz — 0.63s.

pastebin.com для исходников.

Хорошему программисту язык программирования особой роли не играет. ЯП либо ограничивает программиста либо, дает ему больше свободы. Важно уметь хорошо мыслить. Хороших программистов всегда мало. Как показывает практика, хороший программист тот, который может четко излагать свои мысли. Может сложные вещи объяснить «простым» языком, так чтобы это было понятно многим. Без умения изъясняться карьеры не сделаешь...

Если Вы хотите построить карьеру в этой области, тогда Питон. да и не спорте)

Я зрозумів, просто руки сверблять.

Главное чтобы «котелок варил». А все остальное будет)

а почему питон так плохо вставился?

вот, отформатировал

import math
import time
import random
import struct

a = [None] * 4999999 
random.seed(time.time())

t1=time.time()

for i in range(0, 4999999):
    b = random.random()
    if b > 0.5:
        c = math.pow(b, 1.546)
    else:
        c = math.pow(b, 0.434232)
    d = math.cos(c + i)
    a[i] = math.atan(d)

t2 = time.time()
print t2 - t1

исполнялось 5.19718289375

а вот переписанный вариант более идиоматичен питону:

import math
import time
import random

random.seed(time.time())

t1 = time.time()

def func(i):
    b = random.random()
    if b > 0.5:
        c = math.pow(b, 1.546)
    else:
        c = math.pow(b, 0.434232)
    d = math.cos(c + i)
    return math.atan(d)

a = [func(i) for i in xrange(4999999)]

t2 = time.time()
print t2 - t1
исполнялось 4.48244380951

вообще-то, питон — не самая крутая числодробилка, он просто удобен, чтобы быстро проверить какие-то алгоритмы или подходы
когда нужна скорость — используют scipy или numpy, или ставят pypy, или переписывают на cython, или вообще на чем-то не питоньем

или, для самых модников — язык julia (как раз разрабатывался для математиков, для замены matlab в питон стиле, даже массивы индексируются с 1, а не с 0 ;)) - но она еще не доросла до версии 1

Не знаю, форум чомусь сам код інтерпретує, С++ теж шкарадно вставився.
В нас компи різні, я на Intel Core i5, [email protected] GHz CPU, 4 GB
попробуйте код на С++, скільки часу він у вас займе?

код

#include <vector>
#include <cmath>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <sstream>
#include <ctime>

using namespace std;

int main()
{
	vector<double> a(4999999);
	double t1, t2, b, c, d;
	int i;
	
	srand(time(NULL));
	t1 = std::clock();
	for(i = 0; i < 4999999; ++i){
		b = double(rand()) / double(RAND_MAX);
		if(b > 0.5){
			c = pow(b,1.546);
		} else {
			c = pow(b,0.434232);
		}
		d = cos(c + i);
		a[i] = atan(d);
	}
	t2 = std::clock();
	cout << (t2 - t1) / (double)(CLOCKS_PER_SEC) << endl;

	return 0;
}

виконується 1.01037
ключі компілятора — g++ ver1.cpp -Ofast -o ver1

проц і пам’ять — Pentium® Dual-Core CPU E5800 @ 3.20GHz, 8 Gb, OpenSUSE 13.1

а GCC стоїть?
в мене лінукс, тут GCC рідний
на віндовсі треба ставити MinGW мабуть

В мене теж Лінукс Убунту 10.04
Версыя g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
Copyright © 2009 Free Software Foundation, Inc.

А чому не оновлюєте ? Цікаво просто

Боюся, що зв’язки порушаться. Дуже багато всякого хитросплетеного софта стоїть. Але тепер прийдеться оновлювати.

поставив clang
ключі — clang++ ver1.cpp -ffast-math -Ofast -o ver1-clang
виконується — 0.043129

без -Ofast виконувалось навіть повільніше, ніж бінарнік від GCC — 1.07669

характеристики — та же машина

В сущности это сишный код, от плюсов там ничего кроме вектора с double не используется.
И побить его по перфомансу будет ооочень тяжело на любом языке — уперлись в производительность rand(), а это быстрая функция.
Интересно чтобы кто на яве попробовал, кстати.

Попробуйте g++ -Ofast -msse3 -march=core2 -mfpmath=both -ffast-math :)

впечатляет
без опций — 1.02242
с опциями — 0.886065

Попробував, дає помилку:
cc1plus: error: invalid option argument ‘-Ofast’
бліін, що за фігня?

версія GCC застара
в мене 4.8.1

попробував, все одно 3.69442 сек

ну поставив clang
clang++ test.cpp -ffast-math -Ofast -o test-clang
дає
clang++: command not found

що за фігня?

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

Якась фігня з clang++

andrii@andrii:~/Downloads/pit$ clang++ test.cpp -ffast-math -Ofast -o ver1-clang
The program ’clang++’ can be found in the following packages:
* clang-3.3
* clang-3.4
* clang-3.5
Try: sudo apt-get install <selected package="">

andrii@andrii:~/Downloads/pit$ sudo apt-get install clang-3.5
[sudo] password for andrii:
Reading package lists... Done
Building dependency tree
Reading state information... Done
clang-3.5 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 233 not upgraded.

andrii@andrii:~/Downloads/pit$ clang++ test.cpp -ffast-math -Ofast -o ver1-clang
The program ’clang++’ can be found in the following packages:
* clang-3.3
* clang-3.4
* clang-3.5
Try: sudo apt-get install <selected package="">

Поставився clang-3.4
clang++ test.cpp -ffast-math -Ofast -o test
дає 3.74478 сек

Як вaм вдалося досягнути 0.04 сек?
В мене ~0.9 сек, а без ключів ~1.0 сек

вже пояснювали десь тут в темі — clang вумний і виоптимізував весь цикл нафіг, бо результати його обчислень далі не використовуються

clang++ test.cpp -ffast-math -Ofast -o test
теж дає 0.9 сек

Теперь ваш результат совпал с моим (что неудивительно, т.к. и clang и процессор одинаковые).
Но мне пришлось вставить после цикла использование элемента из «а», чтобы не соптимизировалось.
Имеет смысл его добавить в код, кстати.

Только сейчас взглянул на код и ужаснулся, ребята, а что вы собственно меряете??? rand() - одна из самых тормознутых функций, если секьюрная ОС, то чтение идёт из /dev/random, который не особо быстр, ибо секьюрен. Используйте самый простой линейно-конгруэнтный счётчик, пофиг с каким периодом:

unsigned int x_seed;

unsigned int x_rand()
{
return x_seed = (x_seed * 1103515245 + 12345);
}

void x_srand(unsigned int val)
{
x_seed=val;
}

pow() - одна из самых тормознутых math функций. cos() и atan() - обычно табличные, но тоже не идеал быстродействия.

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

Нічого не зрозумів, x_rand() і x_srand() - теж саме, там опечатка?

ні, це різні функції
x_rand — видає число і обчислює наступне в послідовності
x_srand — просто задає довільний генератор

Тоді цей код непідйомний для мене, що таке змінна val?
Як ним генерувати послідовність випадкових чисел?

Так же само как и вызов rand() и srand(), только вместо них вызывается x_rand() и x_srand(). Всё отличие от libc’шных функций в том, что в libc rand() возвращает int, а приведённый код unsigned int.

Поставив Ubuntu 14.04.2, компілятор gcc version 4.8.2
g++ -O3 -Ofast test.cpp -o a.out
час все одно 3.67386
В чому може бути діло?

система загружена?
може в тебе там на фоні щось запущено?

Система чиста, тільки но поставив Ubuntu 14.04.2 та g++ i все

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3321 andrii 20 0 1592276 539360 90876 S 23,2 13,8 21:56.95 firefox
10190 andrii 20 0 737296 116516 50512 S 6,6 3,0 0:37.24 plugin-containe
1254 root 20 0 283892 47504 23836 S 5,6 1,2 5:00.41 Xorg
2247 andrii 20 0 1535704 217788 69760 S 5,0 5,6 3:27.56 compiz
3580 andrii 20 0 658032 30568 23728 S 5,0 0,8 0:19.19 gnome-terminal
2171 andrii 9 −11 513248 11760 7420 S 3,3 0,3 0:09.24 pulseaudio
7 root 20 0 0 0 0 R 0,3 0,0 0:09.90 rcu_sched
9 root 20 0 0 0 0 S 0,3 0,0 0:07.58 rcuos/1
1921 andrii 20 0 39388 3480 2944 S 0,3 0,1 0:00.58 dbus-daemon
1924 andrii 20 0 125020 6004 5408 S 0,3 0,2 0:02.02 at-spi2-registr
10157 root 20 0 0 0 0 S 0,3 0,0 0:03.09 kworker/0:2
10416 andrii 20 0 30612 3116 2576 R 0,3 0,1 0:00.09 top
1 root 20 0 33784 4360 2720 S 0,0 0,1 0:03.87 init
2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0,0 0,0 0:00.28 ksoftirqd/0
5 root 0 −20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H

Есть одно подозрение.
Что говорит вывод:
cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq

1197000
1197000
1197000
1197000
упс але cat /proc/cpuinfo показує
model name : Intel® Core™ i5 CPU M 520 @ 2.40GHz

Вот вам и ответ. :)
echo “performance” | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

зробив
root@andrii:/home/andrii/Downloads# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governorperformance
performance
performance
performance

але все одно
root@andrii:/home/andrii/Downloads# cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
1197000
1197000
1197000
1197000
Якось треба мінімальну частоту до 2.4 підняти

Гмм... Тогда загнать еще частоту (в герцах) такой же строкой как выше в

/sys/devices/system/cpu/cpu*/cpufreq/scaling_setspeed

Блін, після перезавантаження компа, знову
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
ondemand
ondemand
ondemand
ondemand

Да, он сбрасывается перезагрузкой.
Если это ноут — вы же не хотите его перегреть? Поэтому лучше не менять загрузочные настройки.
Тонкая отстройка там включает несколько шагов — соответствующий модуль, настройки acpi и соответствующих демонов.
Можно правда в GUI поменять (и у гнома и у кед есть), но оно будет активироваться, соответственно, после их загрузки.

Так це ноут. Хочеться використовувати повних 2.4 ГГц. А то самі вище бачили, задачка рахується за ~4 сек. а в інших на і[email protected] за ~1 сек. ОС переставив з нуля, може в біосі обмеження стоять?

Зараз:

andrii@andrii:/etc/default$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
ondemand
ondemand
ondemand
ondemand

Але

andrii@andrii:/etc/default$ [b]cpufreq-info[/b]
cpufrequtils 008: cpufreq-info © Dominik Brodowski 2004-2009
Report errors and bugs to [email protected], please.
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 10.0 us.
[b] hardware limits: 1.20 GHz — 2.40 GHz[/b]
available frequency steps: 2.40 GHz, 2.39 GHz, 2.26 GHz, 2.13 GHz, 2.00 GHz, 1.86 GHz, 1.73 GHz, 1.60 GHz, 1.46 GHz, 1.20 GHz
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
[b]current policy: frequency should be within 1.20 GHz and 1.20 GHz.
The governor “ondemand” may decide which speed to use
within this range.[/b]
current CPU frequency is 1.20 GHz.
cpufreq stats: 2.40 GHz:0,00%, 2.39 GHz:0,00%, 2.26 GHz:0,00%, 2.13 GHz:0,00%, 2.00 GHz:0,00%, 1.86 GHz:0,00%, 1.73 GHz:0,00%, 1.60 GHz:0,00%, 1.46 GHz:0,00%, 1.20 GHz:100,00% (1)
analyzing CPU 1:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 1
CPUs which need to have their frequency coordinated by software: 1
maximum transition latency: 10.0 us.
hardware limits: 1.20 GHz — 2.40 GHz
available frequency steps: 2.40 GHz, 2.39 GHz, 2.26 GHz, 2.13 GHz, 2.00 GHz, 1.86 GHz, 1.73 GHz, 1.60 GHz, 1.46 GHz, 1.20 GHz
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 1.20 GHz and 1.20 GHz.
The governor “ondemand” may decide which speed to use
within this range.
current CPU frequency is 1.20 GHz.
cpufreq stats: 2.40 GHz:0,00%, 2.39 GHz:0,00%, 2.26 GHz:0,00%, 2.13 GHz:0,00%, 2.00 GHz:0,00%, 1.86 GHz:0,00%, 1.73 GHz:0,00%, 1.60 GHz:0,00%, 1.46 GHz:0,00%, 1.20 GHz:100,00% (1)
analyzing CPU 2:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 2
CPUs which need to have their frequency coordinated by software: 2
maximum transition latency: 10.0 us.
hardware limits: 1.20 GHz — 2.40 GHz
available frequency steps: 2.40 GHz, 2.39 GHz, 2.26 GHz, 2.13 GHz, 2.00 GHz, 1.86 GHz, 1.73 GHz, 1.60 GHz, 1.46 GHz, 1.20 GHz
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 1.20 GHz and 1.20 GHz.
The governor “ondemand” may decide which speed to use
within this range.
current CPU frequency is 1.20 GHz.
cpufreq stats: 2.40 GHz:0,00%, 2.39 GHz:0,00%, 2.26 GHz:0,00%, 2.13 GHz:0,00%, 2.00 GHz:0,00%, 1.86 GHz:0,00%, 1.73 GHz:0,00%, 1.60 GHz:0,00%, 1.46 GHz:0,00%, 1.20 GHz:100,00% (1)
analyzing CPU 3:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 3
CPUs which need to have their frequency coordinated by software: 3
maximum transition latency: 10.0 us.
hardware limits: 1.20 GHz — 2.40 GHz
available frequency steps: 2.40 GHz, 2.39 GHz, 2.26 GHz, 2.13 GHz, 2.00 GHz, 1.86 GHz, 1.73 GHz, 1.60 GHz, 1.46 GHz, 1.20 GHz
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 1.20 GHz and 1.20 GHz.
The governor “ondemand” may decide which speed to use
within this range.
current CPU frequency is 1.20 GHz.
cpufreq stats: 2.40 GHz:0,00%, 2.39 GHz:0,00%, 2.26 GHz:0,00%, 2.13 GHz:0,00%, 2.00 GHz:0,00%, 1.86 GHz:0,00%, 1.73 GHz:0,00%, 1.60 GHz:0,00%, 1.46 GHz:0,00%, 1.20 GHz:100,00% (1)

------------------------------------
Саме важливіше, що
current policy: frequency should be within 1.20 GHz and 1.20 GHz.
The governor “ondemand” may decide which speed to use
within this range.

Як розширити цю current policy, щоб governor “ondemand” міг при навантаженні збільшувати макисмальну частоту до 2.4?

Опаньки

andrii@andrii:/etc/default$ cat /sys/devices/system/cpu/cpu*/cpufreq/bios_limit
1197000
1197000
1197000
1197000

Значить це БІОС ліміт? Як же його підвищити?

Cpp вариант выполняется за 0.64s, Cpython — 2.60s, Pypy — 0.85s.

C 0.95s paste.ee/r/cr3cN
C++ 0.95s paste.ee/r/YAtyx
Pas 1.05s paste.ee/r/cHdex
Py 7.35s paste.ee/r/eyJxk
gcc 4.9.1 -O3, python 3.4.1, fpc 2.6.4 -O3

Можна умови тестування?

Дякую, в мене g++ версії 4.4.3
компілюю просто g++ test.cpp -o test
g++ -O3 test.cpp все одно дає 4.5 сек
комп Intel Core i5, [email protected] GHz CPU

fpc в мене 2.4.0 версії, компіляція з -O3 нічого не зміню, все ті ж 4.5 сек.
В чому може бути справа?

Поставив Ubuntu 14.04.2, компілятор gcc version 4.8.2
g++ -O3 -Ofast test.cpp -o a.out
час все одно 3.67386
В чому може бути діло?

У меня древний комп, попробуйте R :

set.seed(1234)

my_func<-function(x)
{
lol<-ifelse( runif(x)>0.5, exp(1.546*log(runif(x))),
exp(0.434232*log(runif(x))))
d<-atan(cos(lol+c(1:length(x))))
return(d)
}

system.time (my_func(5000000))

пользователь система прошло
9.18 0.54 9.78

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

Дякую за код на R в мене вийшло 19.8 сек — між Пітоном і С++

Хреново :( Конечно можно не использовать «ifelse()» и ускорить в 2 раза, что то типа :

my_func<-function(x)
{
x_random<-runif(x)
x_random[x_random>0.5]<-exp(1.546*log(x_random[x_random>0.5]))
x_random[x_random<0.5]<-exp(0.434232*log(x_random[x_random<0.5]))
return(atan(cos(x_random+c(1:length(x)))))
}

system.time (my_func(5000000))

Но оно же фиговей читается :)

R в мене версії 2.10.1, може через те?

Тому що швидкість виконання — це не головне. От напишете ви за день супер-швидку програму на паскалі, а вона буде 90% часу висіти, очікуючи відповідь з мережі або жорсткого диску. А пітонщик напише те ж саме за годину, і не відчує різниці :-)
Що стосується пітона в data science, так там всі бібліотеки — це біндінги до сі та плюсів, тому просідання в швидкості особливовго нема.

Where are core affinitization, process and thread prioritization? You need to warm up it before start measuring performance.

Перед тим як починати замірювати швидкість виконання якогось шматка коду — треба прогнати його певну кількість разів, і тільки потім починати замірювати. Якщо подивитись на швидкість виконання кожної ітераціі — то буде видно що перші рази найповільніші, а потім час виконання падає до якоїсь певної майже константи. Це пов’язано з оптимизаціями роботи процесора (зокрема різних рівнив кешу). Для оцінки швидкості виконання треба дивитись на статистику без перших повільних ітерацій. Різниця по часу між першими ітераціями і наступними може бути доволі суттєва. Цей метод більше потрібен для мікро бенчмаркінга.

We should pay attention to all possible optimizations if we are interested in measuring peak performance.
I am talking about warm up on lowest level (CPU caches) => so loop iterations — not just restarting app or benchmarking method. In my experience first 100-1000 loop iterations can be slow, it depends on code you are benchmarking.

I don’t have Ukrainian/Russian keyboard at work.
Each vendor (Intel, AMD, ...) and even each CPU model or generation can have its own specific. Warm up solves this hardware-dependent problems with caches.
I would suggest to turn off any CPU “boost” options like Intel Turbo Boost because it gives not constant CPU frequency. In fact Intel Turbo Boost increases frequency until CPU becomes too hot, then it drops frequency down for cool down (and even below base frequency — depends on CPU model and generation) => non deterministic run. So if you want to get ever possible performance => turn “boost” on and look only on fastest loop iteration. If you want to compare performance results with other runs => turn “boost” off.

I don’t have Ukrainian/Russian keyboard at work.

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

In fact Intel Turbo Boost increases frequency until CPU becomes too hot, then it drops frequency down for cool down (and even below base frequency — depends on CPU model and generation) => non deterministic run.

Да, TurboBoost местами коварный. Из-за него даже пишут шедулеры так, чтобы при одноствольной нагрузке держали задачу на одном ядре не более 0.1-0.3 секунды, потом принудительно перекидывали на другое.

Ось мої заміри по порядку.
Pascal C++ Lazarus Python
1 3.85 4.55 3.92 32.98
2 3.86 4.53 3.79 31.32
3 3.86 4.54 3.81 30.46
4 3.85 4.55 3.79 33.13
5 3.87 4.53 3.81 30.65
6 3.88 4.57 3.81 31.23
7 3.86 4.53 3.80 30.88
8 3.86 4.53 3.78 30.34
9 3.89 4.56 3.80 30.18
10 3.86 4.54 3.79 32.36
Лише в Lazarus і Python перші заміри вищі за всі наступні.

І тепер треба взяти мінімум для кожного щоб порівнювати між собою.
А пріорітети процесу, потоку і прив’язку до ядра робив?
Заміри робились послідовно (всередині одного циклу)?

for (int s = 0; s < steps; s++)
{
time[s].start = getTimeStamp();
for(into x=0;x<500000;x++)
{
........
}

time[s].finish = getTimeStamp();
}

Найбільше від розігріву мав виграти Python тому що managed, хоча у випадку чистих математичних операцій впливу майже нема — от якби там була будь яка робота з об’єктами — тоді розігрів вплинув би сильно.

Правда состоит в том, что «скорость» не слишком-то важный параметр при выборе языка. В enterprise, по крайней мере.
p.s. Насчет С++ вы, батенька, морочите голову общественности. Написали плохой(=медленный) код, а говорите что язык виноват.

Не хочу.
p.p.s.
— ...предлагаю вам взять несколько журналов — в пользу детей Германии. По полтиннику штука!
— Нет, не возьму.
— Но почему вы отказываетесь?
— Не хочу.
— Вы не сочувствуете детям Германии?
— Сочувствую.
— А, полтинника жалко...
— Нет.
— Так почему же?
— Не хочу.

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

deleted, ниже уже советовали про форматирование

Я на ньому буду чекати результатів в 10 раз довше?

Без спеціалізованої бібліотеки — так. Але у такому випадку Ви ССЗБ.
Це ціна дінамічної типизації і підходу «все є посилання».

Третє місце з великим відривом отримує C++ з часом 4.54 ± 0.01 сек.

А тепер дайте йому дісно еквівалентний код (тобто ступінь через exp і ln, а не pow). Тоді можна буде робити висновки.
Ще треба буде порівняти:
1. Стиль float-рантайму. ix32+FPU, ix32+SSE, ix64+FPU, ix64+SSE всі мають різні властивості (наприклад, заміна FCOS для FPU буде 2-кілобайтною функцією для SSE, але це швидше, ніж переключення процессора до FPU та назад).
2. Вибрані режими float: точність, стиль округлення.

Тільки після цього можна буде сказати, чим C++ гірший чи навпаки.

А ті тести, що Ви зараз показали — не вийшли за межі нісенітниці звичайної, не зважаючи на всі «10 разів, середнє та дісперсію» (які, безумовно, треба робити, але тільки після усунення всіх видимих причин різниці в стилях). До речі, Ви між запусками скидали кеші ОС та процесора?

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

Кстати, о скорости. А что вы делаете с питоном, что он настолько медленно работает? Вот мои результаты на [email protected] Win 8.1:
C++ (VS2013) — 0.66
Python — 5.10

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

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

pastebin.com/4j2raEdw

В результате — 4.51

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

pastebin.com/vcq5EEXF

В итоге — 2.42

А если подумать, что у нас все равно тут полный рандом, то:

pastebin.com/uPbcnFbE

Та-дам — 0.90! И смысл разбираться в этих ваших плюсах для 90% научных сотрудников отпадает.

А что делать если какая то мат функция не выражается средствами numpy?

Забиться в угол и рыдать?

Я так и думал что питон для плакс.

Вы делаете неверные выводы на основании того, что получили глупый ответ на глупый вопрос.

Вопрос как раз очень отличный. Но если тебе нечего ответить, иди уже плачь в свой угол.

Внимание, сейчас будет «очень отличный» вопрос, требующий повышенной концентрации внимания и активизации всего вашего умственного потенциала!

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

О, пошли высосанные из пальца «аналогии», ты я вижу просто чемпион по сливам.

R все равео круче, там все єти ф-и есть...

Томас, а ти наскільки глибоко вивчив світ Python що кажеш що R крутіший за нього?
Я про R майже нічого не знаю — так що може і справді крутіший.

P.S. А який колір фломастерів на твій погляд кращий? ;)

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

А кто сказал что Делфи умирает? Альтернативы для быстрой разработки нативного приложения нет. Плюс кроспатформенные библиотеки доя андроида и IOS . То же самое Лазарус — до делфи конечно не дотягивает но альтернативы быстрого написания нативного кросплатформенного приложения тоже нет.
Кроме того, там в ембаркадеро студии не только паскаль но и с++.
Основной минус делфи что он платный.

Альтернативы для быстрой разработки нативного приложения нет.
www.youtube.com/watch?v=Is1EHXFhEe4

повторяю для тех кто в танке — НАТИВНОГО приложения

власне для тих хто в танку: дотнет платформа на віндовсі давно вже натівна, а дельфійські ліби — як були хз чим, так і лишились

Для тих, хто на БТР: native — це критерій підтримки не з боку ОС, а з боку заліза.

для тих хто... кхм, з центру амстера відписує:
це як? дельфійські екзешки на лунуху і макосі запустяться? чи без ос взагалі, незалежні виклики інструкцій?

Вони на відміну від дотнетовського псевдокоду, виконуються процесором. А по вішій логіці BAT/CMD теж є натівним кодом, бо пітримується «рантаймом» Windows.

на відміну від дотнетовського псевдокоду
ви з старими версіями джави ж не плутайте, дотнетівський байткод перед виконанням завжди компілювався в оптимізований під конкретну систему код, і вже він виконується.
BAT/CMD теж є натівним кодом
він є нейтів сорс кодом, але не програмою, наскільки я знаю перфоманс парсання батніків ніколи не було проблемою, і його ніхто не прекомпілює в команди процесора.
Вони на відміну від дотнетовського псевдокоду, виконуються процесором. А по вішій логіці BAT/CMD теж є натівним кодом, бо пітримується «рантаймом» Windows.
Ну так «псевдокод» тоже компилится и выполняется процом.

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

использует ее системные библиотеки
відколи VCL та RTL стали системними бібліотеками віндовса? а дотнет рантайм власне ним є

при чем тут VCL? Нативная програма использует API системы — это имелось ввиду.
и речь не о том как сделан дотнет а о том что програмы для него писаные не нативные. Вы вообще имеете понятие чем отличается среда выполнения (.NET или JVM) и програмы которые написаны для нее? В курсе что такое CRL и чем он отличается от нативного ассемблерного кода выполняюзщегося непочредственно процессором?
Особенность людей не писавших нативные програмы — они не имеют представления как выполняются программы в операционной системе.

при чем тут VCL
притому що це ненатівний враппер над АПІ системи, глюкавий нелогічний лівачок.
має право на життя? та, мазохістам вибирати ніхто не забороняє, але він від того не стає натівним у віндовсі.
а от дальше починається вагон уяви і спроб наїздів, які не мають нічого спільного з реальністю, і можна легко проігнорити ;)

Дык можна было (сейчас наверное тоже, хотя хз что там за бред в 8-х, 10-х) тупо юзать выньапи без всех этих VCL. Оно правда очень мало чем от вижл цепепе (майнас вижл) отличалось.

платформа да — а программы , выполняющиеся на этой платформе — нет. Нативное приложение не требует никаких платформ.

натівна аплікуха не хоче нічого, що ще не встановлене на чистій ОСі — кейс дотнету але не дельфи

не зовсім правда
в делфі і білдері можна зробити статичний білд і включити всі бібліотеки в екзешник
тоді програма буде залежати тільки від системних dll-ок

вообще то чистая ОС — это там где нет никакого .NET
в этом и разница — нативная програма запустится а дотнетовская без соответствующей прослойки в виде рантайм среды — нет.

в этом и разница — нативная програма запустится а дотнетовская без соответствующей прослойки в виде рантайм среды — нет.
И какой вывод из этого капитанского ликбеза?
вообще то чистая ОС — это там где нет никакого .NET
тільки у вашій уяві.
чиста ос — це те що отримуєш коли вставляєш ліцензійний диск з ОС при загрузці, і методично натискаєш Некст.

.NET уже давно — часть ОС (по крайней мере Windows)
Например, .NET 4.5 идет из коробки вместе с Win 8+

а в виндовс7 на которой работают половина компов в мире не идет.
Кроме того програмы написаные под ,net могут иметь проблемы с совместимостью между разными версиями того же нета. — сам недавно правил реестр руками когда у заказчика прога напсаная под 2.0 отвалилась после обновления с 4.0 до 4.5 Хорошо что майки оставили легаси ключи в реестре а в 5.0 нете и этого не будет.
У нативных програм таких проблем нет.

а в виндовс7 на которой работают половина компов в мире не идет.
дотнет іде в різних версіях в дефолтній поставці починаючи з вісти і хр сп 3, так що “в 7 не йде” — суцільний бред
Кроме того програмы написаные под ,net могут иметь проблемы с совместимостью между разными версиями того же нета.
lol, wut?
правил реестр руками когда у заказчика прога напсаная под 2.0 отвалилась после обновления с 4.0 до 4.5
looooooool wut?
а в 5.0 нете и этого не будет.
rofl, lol, WAT?
хз що ви там вигадали про дааалеке майбутне, але наразі наступна версія матиме номер 4.6

возмите чистые дистрибутивы и посмотрите что идет в виндовс а что нет.
остальное даже коментровать не стоит — наберитесь хоть немного ПРАКТИЧЕСКОГО опыта програмирования тогда будете выпучивать глаза с воплями lol и прочими школотскими мемами.
А пока что вы не имеете малейшего представления о предмете разговора.

анонім повчає іншого аноніма, видаючі такі глибокі факти з його життя, ніби з першого класу на одному унітазі сиділи?
народ негодує, так попкорна на весь день не вистачить
/trolling
давайте, давіть авторитетом і власним практичним досвідом, які дистрибутиви віста+ були без фреймворка?
п.с. той бред що ви несете це звичайно весело, але хтось ж прочитає і може повірити...

ну поставь на висту современную .net програму
как минимум потребует обновится — так какой толк что там шла какая нибудь первая или вторая версия.
И кстати в украинском языке нет слова «бред», умник. Выучи сначала обычный язык потом в програмирование лезь.
А то что ты начинающее быдлокодить школоло видно и без фактов — достаточно посты посмотреть, так что хватит засирать тему.

ну поставь на висту современную .net програму
define: сучасна дотнет програма.. а то гугль такого бреду не знає :))
так какой толк что там шла какая нибудь первая или вторая версия.
мдя... ти схоже вісту ще не застав, з її модним 3м фреймворком, і релізом ВПФ.
а от якщо б в вісті йшла остання версія фреймворку, з поправкою що віста вийшла майже 10 років назад — це було б дивно, лікарі такими фактами б дуже зацікавились...
Выучи сначала обычный язык
російську, чи що?
та не, дякую, мені і так добре :))
А то что ты...
нууууу, давай, смаааали...
а не, блін, знову тьмяно і унило :(
піду з горя жерти банана, 100к мавп хоч перебором мають шанс геніальні речі писати...
И кстати в украинском языке нет слова «бред», умник. Выучи сначала обычный язык потом в програмирование лезь.

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

сам недавно правил реестр руками когда у заказчика прога напсаная под 2.0 отвалилась после обновления с 4.0 до 4.5
Расскажете какие-то детали? Интересно узнать.
сам недавно правил реестр руками когда у заказчика прога напсаная под 2.0 отвалилась после обновления с 4.0 до 4.5
Расскажете какие-то детали? Интересно узнать.
Судячи за все, на машині залишилася лише 4.5.
Забули “золоте правило”:
In general, you should not uninstall any versions of the .NET Framework that are installed on your computer, because an application you use may depend on a specific version and may break if that version is removed. You can load multiple versions of the .NET Framework on a single computer at the same time. This means that you can install the .NET Framework without having uninstall previous versions. For more information, see Getting Started with the .NET Framework.
msdn.microsoft.com/...-us/library/bb822049.aspx
Судячи за все, на машині залишилася лише 4.5.
він все одно в себе включає всі фреймворки починаючи з 2.0.
тут щось або більш збочене, або просто яскрава уява
він все одно в себе включає всі фреймворки починаючи з 2.0.
тут щось або більш збочене, або просто яскрава уява
Не факт. Перші ж лінки дають таке.
stackoverflow.com/...2-0-to-run-on-net-4-0-4-5
stackoverflow.com/...-in-a-net-2-0-application
Рекомендую переглянути УСІ відповіді.
p.s. Здається, на верху гілки мова йшла про те, що у нас exe. Сорсів може і не бути.
Рекомендую переглянути УСІ відповіді.
там все ок, починаються проблеми з збочених «адміністративних дій», після того «майкрософт все поламав!!!!»... — видалення вручну старого фреймворка, без перекомпіляції виставляння іншого підтримуваного рантайма, етс...
а реальність (постом нижче) в рази збоченіше:
blogs.msdn.com/...ged-control-under-ie.aspx
запуск десктопної аплікухи як обєкт хтмл сторінки (ІЕ онлі звичайно ж) з правами доступу рівня екстеншина бравзера, але запуск відбувається без адміністративних прав, які треба для встановлення екстеншина...
АКА добре що заборонили

все детали в msdn

msdn.microsoft.com/...-us/library/hh367887.aspx

раздел WebApplications

Internet Explorer will fail to launch an application that uses managed browser hosting controls. The previous behavior can be restored by setting the EnableIEHosting value of the registry subkey HKLM/SOFTWARE/MICROSOFT/.NETFramework to 1 for x86 systems and for 32-bit processes on x64 systems, and by setting the EnableIEHosting value of the registry subkey HKLM/SOFTWARE/Wow6432Node/Microsoft/.NETFramework to 1 for 64-bit processes on x64 systems.

0_o. у вас использовался .Net контрол в Internet Explorer-е? то есть Managed browser hosting controls? За 9 лет .Net девелопмента ниразу не видел их реальное использование... Имхо, это еще хуже чем activex-ы. Неужели нужно было до такого доходить и не было другого варианта? тот же Silverlight забытый всеми и то получше был бы в этом случае

IEHost это вообще такое нечто дико древнее еще со времен .Net 1.1 и 2001 года, и MS в .Net 4.0 убрал его, по тем же причинам что гугл убрал из хрома NPAPI....

вы много чего не видели потому как в наколенных поделках такие вещи не используются. а в реальных проектах используется много чего. Проект писался давно (начинал не я) , писался для госпиталя где десятки и сотни компов и надо было работать с DICOM изображениями из централизованого архива.
а поскольку голанцы народ жмотистый то вместо платить эникейщику, у них стоит некое Citrix кружение и все компы апдейтятся автоматом со всеми вытекающими последствиями (поскольку политика майкрософта не обеспечивать совместимсть а драть бабло за следуюшие версии ПО)
и это далеко не первая проблема была — как только новый дотнет или версия браузера так и танцы с бубном. Например там еще используются либы Leadtools (известный вендор всяких примочек по работе с изображениями)
так вотихние либы и кодеки написаные под .NET2 нормально шли на .NET4 но отвалились как только обновилось до .NET4.5 — еще один пример «совместимости» дотнета — а Leadtools серьезный вендор — быдлокод не пишет — люди деньги платят.
Так вот, если вернутся к началу спора — некоторые мои проги написаные еще на 5 делфи для w2k у заказчиков бегают до сих пор. переставили винду новой версии перекопировали прогу и все дела. .
В этом и преимущество нативных програм и делфи как RAD для таких програм. Я не говорю что надо писать все на делфи просто школота без году неделя как возомнившая себя програмистом берется рассуждать на тему «делфи мертв» потому как не не написала ни одного реального проекта для реального закачика со всеми вытекающими реальными проблемами при саппрте.

Неужели нужно было до такого доходить и не было другого варианта?
Судячи із контексту, потрібно було всього-навсього запустити існуючу (чужу!) програму після оновлення .Net. Рідко який замовник буде інвестувати ХХХ кіло-баксів, щоб переробляти красиво те, що і так працює правильно з точки зору кінцевого користувача (всередині може бути “індуський код”, але це проблеми кодерів).

На торентах можна скачть что висту, что семерку без дотнетов.

десь там вище по тексту було про «чисті дистрибутиви» та «дефолтну поставку/інсталяцію», тому звері та інші збочення трохи не туди.... та й так, ставити не МСДН/РТМ образ -це знущатись над компом і його юзерами...

Пошел пост ненависти>
Как же задолбали головожопые кодеры «нативных» мордочек к драйверам на дотнетах, от которых 100кб драйвер идет только в инсталлере с 200 метровой глючно-тормозной мордой на 3 кнопочки и 2 слайдера.
Особенно это окуенно, когда драйвер сетевухи и нормальный инет не заработает пока его не поставишь, а качать всю эту х-ню приходится по медленному беспроводному каналу...

Пошел пост ненависти>
зазвичай че значить що далі сенсу і логіку можна не чекати :(
кодеры “нативных” мордочек к драйверам на дотнетах
о.0
якщо ви про красиві ланчери і апдейтери — то величезна кількість з них, особливо тормозні, наваяні на екс-веб технологіях в бравзерних контролах — QT та AIR. до дотнету відношення не має ні одне ні інше, та і розміри екзешника таких порядків йому не властиві.
драйвер сетевухи и нормальный инет не заработает
ем .... може час вже з ХР злізти? як не як генерік драйвери на більшість сучасного хардвару в останніх осях давно в комплекті...

“Стой на своем до конца!”

якщо ви про красиві ланчери і апдейтери
Нет, я про драйвера. И только про драйвера.
И да — я морду на QT или Адобе в состоянии отличить. Я не вчера родился.
генерік драйвери на більшість сучасного хардвару
Кроме ноутбучков с предустановленой виндой что-то в жизни видели?
Например — риалтековские звуковые карты:
www.realtek.com.tw/...ownTypeID=3&GetDown=false

До недавнего времени той же херней страдал и интел, сейчас они жестко “оптимизировались” до 30Мб.
downloadcenter.intel.com/...ter-Driver-for-Windows-7

И да — я морду на QT или Адобе в состоянии отличить
та? і як цікаво ? :))
дофіга гіфок, малюнків, етс — це власне наслідки використання веб рендера, а ВПФ це все робить векторною графікою і без вагончика ресурсів.
та? і як цікаво ? :))
Учитесь, развивайтесь, набирайтесь опыта, работайте с разными технологиями. И, глядишь, лет через 10 и вы сможете.
И не забывайте, что кроме стека MS и гетзефактс существует очень большой мир и этот стек всего лишь небольшой его кусочек. Причем далеко не самый лучший применительно к 90% задач большого мира.
Учитесь, развивайтесь, набирайтесь опыта, работайте с разными технологиями
АКА «не знаю, але так як я не люблю і вінду і дотнет, то все що на вінді мені не подобається — має бути дотнетом!!!»
Основной минус делфи что он платный.

Ну, тогда не удивительно, что Delphi слил конкуренцию.
Visual Studio имеет бесплатную версию, в мире Java тоже основная масса инструментов бесплатная.

когда он слил бесплатной еще не было, если я ничего не путаю.

и вообще мне кажется, что все эти разговоры о том, что делфи слил дот нету по какой-то объективной причине (застой и недостаточная доступность среды разработки) — это какие-то урбанистические легенды, которые базируются на неправильном видении мира.
это всё-равно, что говорить, что опера слила browsername или icq слил messengername.
не было никакого слива. на ключевом рынке (США) делфи никогда не был популярным (опять же мои догадки, которые базируются на наблюдениях, которых недостаточно). Вот весь легаси код, с которым мне приходилось работать в аутсорсинге — это были кресты, вижуал бейсик. да что угодно, только не делфи. дот нет не пришел в США на смену делфи. он пришел в США на смену другим майкрософтовским решениям и так получилось, что в какой-то момент рынок стал еще более глобальным и пришествие этих компаний выкинуло на рынках вроде нашего локального, где делфи был по настоящему популярным просто выкинуло делфи на помойку времени

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

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

Думаю, что вы оба правы.
Борланд так и не стал стандартом среды разработки в штатах при плотной конкуренции там со стороны VS, Gupta etc. и эпично прохлопал переход архитектуры с 2-уровневой на 3-уровневую. Не то, чтобы не пытался дергаться, но получалось крайне неубедительно и криво.

Панове, дякую за широку дискусію!
Тепер думаю над чим концентруватися в першу чергу: Python, R, Java, JavaScript, SQL .NET ?
Перші дві вже почав штудіювати.

Даже не знаю теперь чем ДжС вам может пригодится в рамках поставленных целей. Разве что, как говорили ниже, визуализацией данных при помощи d3.js
Так что его я бы поставил во вторую/третью очередь.

значить ставимо порядок: Python, R, Java, SQL, .NET, JavaScript

Але він же платний, якось влом платити ...

The Octave language is quite similar to Matlab so that most programs are easily portable.
хммм

Есть еще Julia — learnxinyminutes.com/docs/ru-ru/julia-ru :)

И насколько я знаю он опенсорсный)

План хороший. Удачи)
ИМХО
Я бы поменял местами SQL и Java. А вместо .NET и JS поставил бы какую-нибудь Scala или Haskell.

Update: Python, R, SQL, Java, (.NET, JavaScript) || (Scala || Haskell)

Какой смысл учить джаву когда есть скала? Это же та же джава, только с нормальным современным синтаксисом и функциональными плюшками из коробки. Причем не обязательно учить фунциональщину чтобы писать на ней, можно продолжать писать в императивном стиле, с той же скоростью что и на джава и при этом генерить значительно меньше кода, который при этом более выразителен. У джавы я вижу только одно существенное преимущество — куча проектов на ней написано и соответственно больше работы.

А .NET пусть будет, тем более что майкрософт раздуплились и опять начали шевелиться. C# прекрасный и современный язык который на несколько лет опережает джаву. Я бы сказал что по возможностям он гораздо ближе к скале, чем к джаве. Более того, в 7-ой версии планируют ввести еще больше функциональных плюшек, включая patterm matching, что практически поставит его в одну весовую категорию со скалой. Единственный открытый вопрос это кроссплатформенность, но учитывая последние шаги майкрософта, это скоро не будет проблемой.

Скала прекрасен и всё такое, но спроса него нет.

Правда? Давно подумывал уйти на Скалу. Это без знания Джавовских фреймвёрков реально?

Что и как именно в Скале, я не знаю, и за это говорить не буду, но у меня есть опыт разработки на другом альтернативном фронтенде для managed runtime.

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

То на неправильный биндинг к стандартной функции наткнешся, то в компиляторе косяк, а то и просто поведение скомпилированного кода кажется странным без видимых причин. Но при этом миллиона советов, как по «материнскому» языку, в интернете нету, комьюнити по размерам весьма далеко от того, что ожидал. В результате сидишь, трахаешься непонятно с чем, и задумываешься, а стоил ли сахарок всего этого геморроя...

Скала — идея хорошая, но какое то Г вылезает в мелочах. А джава just good enough, стабильна, и надежна как молоток.

Зачем надстройка скала когда и джава уже нормальная?

1. Скала не надстройка, а независимый язык на JVM как и джава
2. Джава, как язык, была нормальная лет 10 назад. Но с тех пор ее конкуренты продвинулись вперед, а она топчиться на месте. Только в недавно выпущеной Java 8 лед вроде как тронулся. Но все-равно, тот же ненавистный джавистами C# на порядок функциональнее и современнее.

тот же ненавистный джавистами C# на порядок функциональнее и современнее.
Чем именно?

На вскидку хотя бы те же делегаты, var-ы, async-и, linq (спустя 5 лет наконец-то добавили в джаву в виде стримов, но все-равно до linq не дотягивает), куча синтаксического сахара который позволяет писать короче код. Короче джава где-то на уровне третьего C# (2007 год).

Делегаты — это спорное не ООПшное решение, вары пытались добавить несколько раз, в том числе Гослинг отсылал патч, но в конце решили что они делают код менее читабельным, и я с этим согласен, на тему linq в джаве есть 100500 либ, непонятно зачем это в язык пихать.
Индустриальный язык должен иметь хороший баланс между читабельностью и выразительностью с помощью синтаксического сахара, если преобладает второе, то тяжело разбираться в гавнопомойках гавнокода.

Да, асинки в джаве 100500 лет уже есть в виде ExecutorService

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

Ну так и в джаве с лямбдами будет что то типa: executor.execute(() -> myFunc()); вполне локанично.

Вы не поняли фишку асынков. Это не просто запустить задачу на выполнение асинхронно. Они еще позволяют дождаться результата не блокируя текущий поток и продолжить выполнения как будто бы весь код выполняется линейно:

public async Task<twit[]> GetTweetsAsync()
try
{
var response = await GetResponseAsync("twitter.com");
var twits = await ParseTwitsAsync(response);

return twits;
}
catch (WebException ex)
{
// handle
}
catch (ParseException ex)
{
// handle
}

Ну так и executor возвращает Future, и на джаве твой код будет как то так выглядеть:
Future<long> result = executor.execute(() -> myFunc());
some other code
System.out.println(result.get()); // waits for async task completion

Это не то, на «result.get()» он заблочит текущий поток пока не придет результат. Короче что-то на подобии тасков в .NET, только таски еще можно насетапить выполнять другой код (в вашем случае это вывод на консоль) после завершения работы не блокируя текущий поток. Только выглядит это все уродливо, поэтому асынки тут очень спасают.

Ну так а как в C# дожидаются результата выполнения асинхронной операции?

Ну как в примере выше, когда мы говорим await. Только в данном случае он не блокирует текущий поток. То есть когда текущий поток попадает на await, он запускает асинхронную операцию, тут же выходит из функции, и отдает управление. То есть этот поток возвращается в систему. Остаток же функции выполнится уже в другом потоке как только завершиться асинхронная операция. (или в контексте текущего потока, там через опции можно настраивать). Тот кто вызовет эту функцию, тоже вызовет ее с await-ом, и остаток его функции будет дожидаться результата нашей функции. Блин, сложно объяснять )

В джаве если все делается в fork join pool-e все будет как то так как ты описал.

Не то. Это все примитивы которых и в .NET полно и которые уродуют код как только количество асинхронных вызовов начинает расти. async/await же позволяют писать красивый линейный код, как будто ты работаешь с синхронными вызовами. Короче почитай лучше про async/await и про то, как они работают.

Та нет, лучше ты почитай про fork join pool-ы и научись нормально выражать свои мысли и подбирать примеры

Ну или просто кто-то тугодум. Вполне показательный и простой пример. Покажи как он будет выглядеть в случае fork join pool.

Я уже все описал, если есть конкретные вопросы — задавай.

По-моему описываю тут только я, а ты только фразами бросаешься что в джаве «так же само», без каких либо примеров. Все понятно короче.

Лол, ну если так же само значит так же само, и код я тебе вполне привел.

Я сказал что в твоем коде ты блокируешь поток и по-большему счету он не многим лучше чем если бы myFunc() вызвали синхронно. Единственное что «some other code» параллельно выполнится. А так, пока асинхронный код не выполнится, текущий поток будет висеть на get. С асынками же, ничего не блокируется, а ты говоришь «то же самое»...

Я же написал, в fork join pool все будет работать как с async, на Future.get() поток вернется в пул если результат не готов и блокироваться не будет.

ну так приведи кусок примера с fork join pool и посмотрим, в чем проблема?

где? нет там твоего fork join pool

какая разница какой там executer когда он возвращает Future который на get будет:

Waits if necessary for the computation to complete, and then retrieves its result.

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

Future в джаве я так понял это Task в .NET. Только вот в случае с таском: var task = TaskFactory.New<int>(() => return MyFunc());

это:
Console.WriteLine(task.Result)

не равно этому:
Console.WriteLine(await task)

В первом случае вызывающий поток блокируется, во втором — нет.

Это ты нафантазировал все, там имплементация Future называется ForkJoinTask, у нее метод get() замаплен на метод join() который возвращает поток в пул пока результат не станет доступен.

В отличие от пулов явы, async/await все в одном пуле, не так ли? И этот пул элементарно забить задачами одного типа так, чтобы парализовать прохождение остальных.

То крошечное преимущество, что компилятор может сам вставлять код переключения вокруг await, а в случае Java это делается, когда код явно зовёт ожидание, и отрабатывается уже рантаймом — на практике даёт почти нулевой выигрыш. Зато отсутствие внутреннего QoS приводит к потере управляемости.

async/await это просто синтаксический сахар, не более. Он позволяет лаконично и линейно записать цепочку асинхронных вызовов. Вполне себе популярный юзеркейс который обычными средствами вылился бы в спагети код с трехкратной вложенностью.

Для однотипных вычислительных задач в .NET есть Task Parallel Library. Вот она то и оптимизирует вычисления раскидывая его на процессоры/ядра. То есть никто не будет забивать пулы такими задачами, если конечно не сделать этого специально, вручную.

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

Почему-то обычно он «обычными средствами» не выливается ни в какое спагетти. Кто это Вас так напугал, извините?

Для однотипных вычислительных задач в .NET есть Task Parallel Library.

И внутри неё работают async/await?

OK, а почему Вы думаете именно про вычислительные задачи? Вот, например, у меня есть задача внутренней генерации сообщений (хочу отдать ей гарантированно 20% процессора и 2/5 превышения), релеинга уже принятого (2/5 и гарантия 50%) и приём нового от клиентов (1/5 и гарантия 20%). Никакая из этих задач не вычислительная, все — короткие отработки новых сообщений из очереди/сокета, общение с БД, в общем, типичная асинхронщина с коллбэками. Но её дофига. Под реальной загрузкой всё забивается нафиг, ибо клиенты всегда стараются впихнуть больше, чем позволяет система.

В случае управляемых мной пулов эта задача решается, да, немного небанально (внедрение и правильная настройка hierarchical token bucket). В случае async/await я не смогу этого сделать; но это не проблема, а проблема то, что «лёгкость» их неявного применения приводит к тому, что все библиотеки начинают писаться с ними, и я не могу обратиться стандартным клиентом БД, чтобы не попасть под общий неуправляемый переполненный пул! Async/await даже не даёт мне возможности установить управляемый мной контекст — конкретный пул для треда и его потомков. Это однопользовательская технология, и для серверной нагрузки она не пригодна.

Почему-то обычно он «обычными средствами» не выливается ни в какое спагетти. Кто это Вас так напугал, извините?

Практика. Представьте что надо отправить запрос, потом в зависимости от результата отправить еще один запрос или пару запросов, потом полученные ответы ассинхронно обработать и в конце куда-то ассинхронно отправить или сохранить. А еще возможны ошибки на каждом из этапов и их надо обрабатывать...

И внутри неё работают async/await?

Не, она там довольно низкоуровневая, создает свои пулы потоков (по дефолту по пулу на ядро, но там вроде можно настраивать) и управляет ими чтобы максимально утилизировать процессорные ресурсы.

OK, а почему Вы думаете именно про вычислительные задачи?

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

Вот, например, у меня есть задача внутренней генерации сообщений

Ну тут скорее по старинке, ивенты, коллбеки, IO complettion ports, thredpool-ы. Можно модель акторов попробовать замутить ). Асынки это больше для десктоп приложений, для UI.

Практика. Представьте что надо отправить запрос, потом в зависимости от результата отправить еще один запрос или пару запросов, потом полученные ответы ассинхронно обработать и в конце куда-то ассинхронно отправить или сохранить.

Слова типа «асинхронно обработать», «асинхронно отправить» тут это туман, за которым скрывается истинная суть происходящего.

«Асинхронно обработать» это означает «задержаться до получения всех ответов, обрабатывая каждый в порядке поступления»? Тогда у вас это не получится await’ами хотя бы потому, что порядок следования их между собой жёстко задан в коде. Нужно что-то вроде языковой конструкции

parallel { { process1(await(task1)); } { process2(await(task2)); } ... }

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

OK, асинхронный старт, но обработка в порядке, указанном в коде? Тогда это ничуть не лучше «future» AKA «promise» из кучи остальных реализаций.

OK, параллельный старт и продолжение только когда получены все ответы? Сразу вспоминается эрланговый gen_server:multi_call, он это делает без всяких await.

Что там дальше? «Асинхронно отправить»? А при чём тут вообще async/await? Отправьте в сокет, в очередь, куда-то ещё, а кто-то другой будет вытаскивать их. Или вы даже пихнуть порцию данных в сокет делаете через async? а зачем?

А еще возможны ошибки на каждом из этапов и их надо обрабатывать...

Согласен, надо обрабатывать. Релеинг исключения, сгенерированного в асинхронном обработчике, в точку приёма результата это банальщина, которая создаётся в первую неделю реального проекта на таком языке. И снова тут языковая поддержка нафиг не сдалась (ну разве что позволить подложить свой stacktrace генерации исключения).

Не, она там довольно низкоуровневая,
[...]

Значит, не имеет отношения к вопросу.

Асынки это больше для десктоп приложений, для UI.

Ну вот я где-то о том же. Применение их для UI я ещё поверю. Но тогда утверждать их превосходство бессмысленно просто потому, что для ниши Java они в таком виде нафиг не подходят...

Для тех кто хочет понять, что здесь написано вот документация. Основное преимущество в том что компилятор сам генерирует таск из кода после await и подписывает его как продолжение ожидаемого таска. То же самое происходит с вызывающим кодом.

Главный недоказанный момент здесь в том, что разрезание компилятором методом на куски вокруг await оказывается выгоднее, чем переключение рантаймом после опознания ожидания в (условном) theFuture.sleepUntilResult().

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

в реальносты await удобнее потому что там меньше кода.
//кстати, фича оказалось такой удачной, что ее адаптировали даже C++ и Python

в реальносты await удобнее потому что там меньше кода.

По сравнению с порождением внутри себя объекта типа future — вместо async, и вызова у него wait() вместо await — ровно столько же для программиста.

//кстати, фича оказалось такой удачной, что ее адаптировали даже C++ и Python

В случае Python ты имеешь в виду yield? Если да, то это совсем не то — yield останавливает работу своего генератора.

yield появился в питоне в 2001 году — hg.python.org/...n/raw-file/v2.2/Misc/NEWS
так что это наверное не yield...

1

    while(!somethins.isFinished())  {
         if (lastCode!=skip) {
             lastCode = await something.read
         } else {
             lastCode = constant
         }
     }

2.

В случае Python ты имеешь в виду yield?
Нет, я имею в виду недавное принятие pep-0492 : www.python.org/dev/peps/pep-0492

Прикольно, учтём. Тем не менее в реализации это классический future, поддержка «разрезания» в стиле C# компилятора ему не нужна и не используется (хотя в каком-то будущем и может быть включена). А учитывая неустранимый GIL текущего питона и не имеет смысл...

Но все-равно, тот же ненавистный джавистами C# на порядок функциональнее и современнее.

«На порядок» это в 10 раз. Прошу в качестве обоснования показать
1) списки пунктов функциональности, не пропуская ничего начиная от самых основ языка, сравнимого уровня подробности и ценности каждого пункта, чтобы в C# их было как минимум в 5 раз больше (дадим тут поблажку по сравнению с 10); пункты должны иметь ценность, независимую от специфики и технологий Microsoft, чтобы сравнение имело смысл в контексте Java;
альтернативно, прошу показать, как C# способствует выражению задания минимум в 5 раз на широком классе задач, опять-таки, не связанным с Microsoft;
2) аналогично, по пункту «современнее», уточнить предыдущий пункт с распределением характерных решаемых задач по времени их массовой актуализации или, наоборот, выхода из актуальности.

При отсутствии ответа буду считать, что Вы выдали кусок пустого никчёмного трёпа, с соответствующими выводами по отношению к автору (претендующему, согласно подписи, на звание «Software Developer»).

(Да, я сейчас злой. Всё в рамках правил и норм.)

По-моему очевидно что «на порядок» в данном случае (как и в любом неисчисляемом контексте) это образное выражение, но нет же, находятся те, кто не может ничего возразить и начинает цепляться к словам.

По-моему очевидно что «на порядок» в данном случае (как и в любом неисчисляемом контексте) это образное выражение,

По-моему, очевидно, что в серьёзном технологическом споре такие «образные выражения» должны быть не образными, а полностью конкретными и измеряющими количественные характеристики с точностью, которой достаточно с запасом. Образность можете применять на поэтическом вечере, а не в сравнении технологий, или только как вспомогательное средство для иллюстрации уже показанного.

не может ничего возразить

Необоснованный домысел, который только подчёркивает предыдущие зачатки Вашей характеристики.

Спасибо, у меня больше нет вопросов.

“На порядок” это в 10 раз.
на порядок, в межах ДОУ це від 2х до 16ти раз ;)

OK, хай доведе спочатку про 2 рази :)

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

Для того, чтобы кроссплатформенность не была проблемой, нужно, чтобы сотрудники Microsoft вообще были удалены от проектирования как можно дальше, и не имели влияния на процесс. Никакие их собственные усилия не дадут этого. Показательных примеров достаточно, чтобы говорить о тенденции.
(И не надо рассказывать про Mono и хвастать отдельными достижениями, страшно далеки они от народа.)

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

Разница между скалой и джавой, как между манаджед си++ и сишарп.
Это два разный языка.

Python + JavaScript, ИМХО. Тем более если уже начал изучать питон)

я якби з фундаментальної i академічної науки йду out.

знание JS, ИМХО, никогда не помешает, особенно учитывая то, что он сейчас используется практически везде (есть даже платформа для использования JavaScript как языка для программирования всяких умных часов/холодильников/телевизоров, raspberry pi и т.п.).

«Есть платформа» даже для использования /bin/sh в этой роли, и что с того? Чтобы её имело смысл использовать, должны быть какие-то существенные технологические преимущества у такой платформы.
Для Javascript есть одно существенное преимущество в браузере — его там какие-то мороны стандартизовали, не дав себе подумать даже 5 минут над последствиями с технической стороны (или, наоборот, целенаправленно организовавшими диверсию), и есть преимущество для асинхронной событийной среды в виде предельной лёгкости организации коллбэков-замыканий (хотя это преимущество тут же нивелируется граблями организации кода).
А без технологического преимущества никакое засилье JS-программистов и возможность скупать их по пучку за пятачок не даст долговременного тренда.

Якщо ми про інструменти для Data Science:
Python, R, Java (+ Hadoop).
JavaScript — опціонально (наприклад, заради D3.js для візуалізації даних).
.NET тут взагалі зайвий.

Delphi начал загибаться с развитием .NET’а. Вот и все. Компания-разработчик туда-сюда, как бутерброд Навального — уже давно не Borland, а то CodeGear, сегодня — Embarcadero, кто завтра — черт знает. Был еще проект Kylix для линукса (нет, это не Лазарус), но он умер окончательно.

П.С. Такие темы в 2005 году обсуждались.

Lazarus нещодавно встановив, написав один редактор заради цікавості.

Бета для работы с изображениями, для пакета инструментов для разработки игр.

Почему умирает? вполне себе живет среди его фанатов...
А так ИМХО основная причина — это то, что паскаль в основном разрабатывался для изучения школьниками/студентами. И вроде как некоторое время назад таки активно изучался в универах не-IT направлености. А так счас его место по-моему заняла Java. По крайней мере в моем универе (где я учился) сейчас джаву изучают (когда я учился — делали лабораторки на турбо паскале) на компьютерном факультете, как мне рассказывали....

Язык Паскаль был создан Никлаусом Виртом в 1968–1969 годах после его участия в работе комитета разработки стандарта языка Алгол-68. Язык назван в честь французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа.

И что?

паскаль в основном разрабатывался для изучения школьниками/
rly ?? O_o

ну я не настолько знаток паскаля, просто помню в универе на турбо паскале лабораторки делали,. поэтому предположил, что он в основном предполагался создателем, как учебный язык. Хотя в принципе, т.к. язык тьюринго-полный его нельзя назвать «учебным» и можно смело использовать в продакшене при желании и прямых руках программера.

Вот например знаю есть такая ИМХО крутая программулина для создания фрактальной графики Apophysis, которая вроде как на дельфях написана так что... (это я к тому, что я к дельфи никаких претенхий не имею)

Я могу назвать несколько тьюнинг-полных и показательно ущербных языков. Начиная с Брейнфака.

я тоже знаю много страшных языков, самым крутым из которых считаю Whitespace)))

rly ?? O_o
Исторический факт:
Initially, Pascal was largely, but not exclusively, intended to teach students structured programming.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

В 2015 году Delphi вышел на 11 позицию в рейтинге ЯП
www.tiobe.com/...paperinfo/tpci/index.html

Ги-ги, чому Visual Basic так рванув? Це той самий, що я в 2000 бачив?

Не знаю, я его не видел... Может 1 глазом

Бо юзається всередині MS Office.

Чел математик. А для этого есть тот же МАТЛАБ или люто бешено подымающийся чистяково математический «R» (с 40 до 19 и рядом с Руби стоит).

Сейчас я на Делфи, 3 я версия exeшника (то есть заново с 0 написанного) ПО, крутится все это уже 10 ток лет , новое на С#, но пока самое тяжеловесное — складской учет интерфейсом на делфях. Следующей версии скорее всего не будет, просто больше не найдется программистов.

Ну как сказать, к примеру, сколько Вы знаете программистов, помнящих что такое RxLib, фастрепорт 2, Delphi 5 (да 5, да строка 256 символов, да на Хе перейти не возможно) и одновременно, к примеру DevExpress.

А Вы в этом смысле... Я уже не представляю работу без XE...

Delphi 5 (да 5, да строка 256 символов...
wat?
дружище, ты серьезно на delphi пишешь?

не не, я про Delphi 5 ничего не говорил.

ну так вопрос был к Oleg Androshchuk
динамические строки с ограничением 2 Гб появились в delphi еще в версии 2, вместе с переходом на win32

так что сентенции вида

да 5, да строка 256 символов
ввызывают простую реакцию «wat?»

ну тама ShortString или String[256]? Не? Или Array [0..255] of char?

ShortString даже в delphi 2 был никому не нужен, поскольку есть просто String
ну разве что для каких то бинарных записей, которые целиком сохраняются в файл

поэтому выпячивать «тяжелое детство, бетонные игрушки, строки по 256 символов» в delphi 5 — моветон

Если читать по байтно и в Ansi то самое оно))) А вообще да. Почти не пользовался)

Попробуйте сохранить в базе поле varchar(2000) в Д5. Буду благодарен, если есть решение без разбиения поля на строки по 256. Тоесть что то элементарное SomeField.Value := BigString;

Если я ничего не путаю, String может быть до 2 Гбайт, разве что SomeFiel.Value — Value типа ShortString, ну тогда звыняйте бабанов нет. Переходите все же на последние версии...

каждая строка трактуется как одномерный массив символов, количество символов в котором может меняться в работающей программе: для string [n] длина строки меняется от 0 до n, для string и pchar — от 0 до 2 Гбайт. В стандартном Паскале используются только короткие строки String [n]. В памяти такой строке выделяется n+i байт, первый байт содержит текущую длину строки, а сами символы располагаются начиная со 2-го по счету байта. Поскольку для длины строки в этом случае отводится один байт, максимальная длина короткой строки не может превышать 255 символов. Для объявления короткой строки максимальной длины предназначен стандартный тип ShortString (эквивалент String[255]). В Windows широко используются нуль-терминальные строки, представляющие собой цепочки символов, ограниченные символом #0. Максимальная длина такой строки лимитируется только доступной памятью и может быть очень большой. В 32-разрядных версиях Delphi введен новый тип string, сочетающий в себе полезные свойства обоих типов. При работе с этим типом память выделяется по мере надобности динамически) и ограничена имеющейся в распоряжении программы доступной памятью. Замечу, что в Delphi 1 тип string эквивалентен String [2 55], т. е. определяет короткую строку максимально возможной длины.

Мне не надо теоретических выкладок, я их Вам без гугла и копипаста могу пару часов без остановки читать, тем более, что спутано вместе несколько версий да и ошибки. Я практик с 1-й версии Делфи и писал конкретно о Д5 и varchar(2000). Стандартно такая длина не пихуемая, хоть и есть pChar.

Ну я практик начиная с Delphi 7. Таких проблем не было... Но подобное часто слышал от коллег. Тут много вопросов и нюансов, что за БД и т.п. можно попытаться написать dll на более новых версиях Delphi и применить конкретно для вашего случая. Ну скажем отдельную dll для работы с БД по принципу шаблона GOF фасад. Вся работа с СУБД через dll

не надо там нового длл, такого никто не пропустит, решается проще
update t set LongField = :part1 +:part2+..+ :partN
part1-N передается параметром как строка[256]

Но это же ужасно. Я имею введу такой код :(

А жизнь такая. Приведите лучший, мне реально интересно знать иную реализацию, впихнуть надо 500 (какой то там примечание в документе). Строка в Д5 ограничена 256 символами, параметром передать больше нельзя. Типа параметра pChar не существует. Гуглили, думали отделом. Все, что додумались. Думаю, что фичи подобные этой, так же способствовали уходу продукта с мейнстрима. В той же джаве этих ограничений нет, но когда писали на Д5 то и джавы еще небыло.

Я где-то Вас не понимаю. Как я понял в SomeField.Value тип String?
S : String;
SetLength(s,500);
s := ’...... ’;
SF.Value := s;
Какой фреймворк по работе с БД, dbExpress, BDE?
SF.AsString ?

Посмотрите в cторону dbExpress, ZeosLib, Devart UDAC,AnyDac etc.

Конечно не понимаете, Ваш код даст «String literals may have at most 255 elements». Смена фреймворка (АДО)это полное перетестирование всего фнукционала. Даже если заставить наши 20-30 тестировщиков перестать тестировать другие задачи, это где то на год работы. Не говоря уж о том, что все это надо повторно оттестировать уже на пилоте (отвлечь бизнес, аналитиков, нагрузить работой реальные магазины сети, распределительные центры) :) Вы слабо представляете это ПО и сколько денег и людей на нем завязано. Смена поля в печатной форме это последовательно бизнес-аналитик-дев-тестеры-пилот-бизнес-продуктив. А тут возьми да поменяй фреймворк.

Риторический вопрос? Новые проекты, новые возможности...

Это перепись динозавров? Запишите меня тогда :)

Это малая часть того, с чем приходится стыкаться попадая на вакансию Делфи.

Тому що, ця мова программування не затребувана на ринку праці, як уже писали.
Так лишень для «швидкої обкатки» певної ідеї

Чому б не «обкатати» ідею на C# або Java?

Наша академическая среда — она оччень неповоротливая.

Сенс палити с гармати по горобцям, коли масштаб задачі невеликий за обсягом)

Сенс палити с гармати по горобцям,
у випадку шарпу — халявна найкраща ІДЕ, дофіга інфи в неті, легкість старту у він формах, легкі і безпроблемні екзешки. гармата, та ще й в часи танків і автоматів — це все ж дельфа.

Delphi вже де-факто мертвий (((

А вообще, вот здесь прекрасно описаны причины непопулярность Дельфина:
lurkmore.to/...B8_.D0.BA_Delphi.2FPascal
/thread

C# и Java кормят. Паскаль/Делфи не кормят. Все просто.

Будет кормить будешь программировать?

Тренды как-то пошли так.

Почему умирает? Каждый ЯП решает определенный круг задач. Нет еще универсального ЯП для всего. Это спор не о чем. Как кто-то сказал: «много программистов напишет программу понятную для компьютера, но вот программу которая была бы понятная и компьютеру и человеку, мало». На самом же деле. ЯП должен позволять писать программисту понятный код. В это и есть своя фишка Delphi. Сематика ЯП понятна и проста.

Так в цьому Паскаль і підкупляє, легко реалізувати будь які математичні трюки.
Все що я розумію з математики я можу реалізувати на Паскалі. Проблема в моєму розумінні математики, а не в обмеженнях мови Паскаль. Але кооперативна політика вимагає переходу, тому зараз пишу на С++.

Математику можна реалізувати хоч на C++, хоч навіть на JavaScript. А якщо потрібні обчислення і лише обчислення — то є MATLAB.

Я с ним много лет назад работал, когда писал диплом по физике. На тот момент мне нравилось — и пользоваться удобно было, и рассчёты были довлльно быстрые и точные (выбор был на тот момент между Delphi и Matlab, если что)

MATLAB набагато повільніший ніж Pascal чи C++. Обчислення можуть йти днями, тому швидкість виконання — принципова.

я не дуже в кусі справ, але хіба матлаб не дьоргає С++ модулі для всіх критичних обчислень? як він може бути повільнішим, ніж С++, якщо він по суті і є той же С++?

значить якщо писати векторно, то оверхед тільки на маршалінг С++ виклику?
я трохи загуглив, але народ пише, що оптимізований С++ все одно на порядки швидше оптимізованого матлабу. пруфів правда не знайшов, тому не знаю, наскільки правда. але чисто з диванної точки зору, не розумію звідки може бути оверхед «в рази»

Я в 2005 пробував запускати одинакові алгоритми на Матлабі і Паскалі, різниця була відчутною, на користь Паскаля, може тому що комп був застарілий, але з того часу на Матлаб не дивився.

Це було просте зчитування великої ASCII таблиці і тригонометричні операція над її елементами.

Конкретно де, не розбирався, але загальний час виконання програми був більший ніж на Паскалі.

На Python можно намного легче реализовать любые математических «трюки». И существущет огроменное количество прекрасных готовых инструментов для много чего — начиная от работы с комплексными числами, до статистической обработки больших таблиц, Big Data, инструментов финасовых аналитиков и т.д. Забудьте уже паскаль, как страшный сон.

www.amazon.com/...numerical modeling python — я так понимаю, вы каким-то численным моделированием занимаетесь?

так-так, я якраз на Python переходжу.


В матике и стате щас “тренд” из языков програмирования “R” и “Python” (причем Питон начал нифигово проигрывать в последнее время). Хотя и комерческие продукты тоже не отстают типа того же SAS и SPSS (хоть и стоят немеряно бабла) может даже из за того, что они “понимают” код на вышеприведенных языках. Вруби пару новых статей по стате и посмотри на чем к ним код прилагается. “Паскаля” и “Делфи” там не будет, так что советую забыть про них :)

Все що я розумію з математики я можу реалізувати на Паскал
А на каком языке нельзя что то математическое реализовать ? Да хоть на “БрейнФаке”...Да и зачем придумывать велосипед ? Теже симуляции методами Монте-Карло (потипу какого-то ресемплинга и т.д.), реализуются в 2-3х строчках кода R. (хотя они будут помедленее чем “Плюсы”, но можно “потрахать мозги” с многопоточностью)
А на каком языке нельзя что то математическое реализовать ? Да хоть на “БрейнФаке”...Да и зачем придумывать велосипед ?

Так в тому й діло, для чого вчити наступну нову мову якщо всю математику можна реалізувати на тій яку вже знаєш. В науці все одно на чому рахувати, хоч на калькуляторі, головне результат.

В матике и стате щас “тренд” из языков програмирования “R” и “Python” (причем Питон начал нифигово проигрывать в последнее время). Хотя и комерческие продукты тоже не отстают типа того же SAS и SPSS (хоть и стоят немеряно бабла) может даже из за того, что они “понимают” код на вышеприведенных языках.
R я почав вчити, прикольна штучка. ПОставив PSPP, він позиціунується як безкоштовний SPSS. Але в чому його фішка не зрозмів, він нагадує дуже обрізаний віндовський Origin.

Просто просмотрите вакансии, например тут : www.kaggle.com/jobs
«Делфи и Паскаля» вы там не найдете, это не серьезно :)) Подтяните «R» и счастливого пути в заморские страны:) У вас вроде ж инглиш в порядке, чего же ждать :)

З.Ы. Я вот пошел на курсы инглиша ( как по мне это единственные курсы которые нужны, остальное можно нарыть в интернетах, а разговаривать так просто не начнешь. И мне странно читать в как кто то хочет платить бабло за курсы «КуА» или какой то язык программирования:))) ... Долбаный английский, мозги от него хуже чем от матики парятся раз в 100... :)

привык пользовать логическое мышление
Тпк я и строю предложение чисто логически — продумываю как его сконструировать, какие подобрать слова, потом все это связываю в уме и что то пытаюсь потом сказать. Тупо не могу норм говоритьь :(((А если чел со мной быстро говорит (еще и с акцентом), то я теряю нить и ппц — ниче не понимаю. Долбаные времена выучил за день, а говорить — 12 лет школы, 2 года в универе — все безтолку. Щас вот на курсах мучаюсь, наверно у них такие учебники веселые, что б такие как я не вздернулись к ипиням. И это только разговорный ! А переписка ? Я по русски в каждом посте по 10 ошибок делаю, на английском по 10 ошибок в каждом слове. Это тупо АдЪ. И чего без него никуда ? :(((

Ясно, вам треба вчитися так як цуценят плавати вчать, просто кидають у воду, і вони самі випливють якось. Вам треба в середовище, поїдьте десь в Європу самі, і без карти походіть по вулиці, попитайте дорогу, поговоріть, побухайте з місцевими. А на курси йдіть тільки на розмовні, де викладач — носій мови: американець чи британецб. У вас все вже є в пасиві, треба ПРАКТИКА.

І ще мій шеф говорив, хочеш вивчити іноземну, знайди собі гьорл-френду тієї нації. Він так польську вивчив :)) Так шо вперед!

Больше практики.
Отказаться смотреть любое русско\украино язычное видео, в пользу англоязычного. ЧЕрез несколько месяцев мозги сами начнут работать в нужную сторону.
З.Ы, я и сам делаю по 10 ошибок в каждом слове, но по работе это не особо мешает.

Подтяните “R” и счастливого пути в заморские страны:) У вас вроде ж инглиш в порядке, чего же ждать :)

Так я підтягую R.
Не можу вирішити над чим концентруватися в першу чергу: Python, R, Java, JavaScript, SQL ?

Я бы советовал R. (но как известно из древней нецензурной пословицы «каждая шлю*а свою пи*ду хвалит» :) так что я ж не истина в последней инстанции)
Ты говорил по «писать алгоритмы», а там более 9000 дополнительных пакетов — уже все готовое. И все новые методы тоже пишутся на R. Например не хочешь ли взять Делфи и запрогать что то относительно новенькое типа :
r-forge.r-project.org/...on=18&root=gbm&pathrev=18
Его еще называют типа «язык для статистической обработки данных», но это бред :) Полноценный язык :))) На нем можно и на веб анализ фигачить : shiny.rstudio.com
+ Пакеты для почти всех языков потипу rJava, RHadoop, h2o, RCPP ...Тыщи их....Его понимает SPSS... Да и сам видел рейтинг что вверху тебе написали — R c 40 прыгнул на 19 место :))
+ можно обратить внимание на всякую биг-датовскую хрень типа Хадупа хз.
З,Ы, Но как говорится — смотри пословицу :)
З,Ы,2 Джава скрипт это какая-то ересь для анализа данных:)

Недостаток R в том что это очень узкоспециализированный инструмент. А выучив петончик можно пойти в кучу других тем.
Ну и пакетов под питон тоже вроде хватает.

Ну я писал что для «извращенцев» из R можно вызывать любые методы любого языка (хоть джавы, хоть с++, хоть...) типа того же :
rpython.r-forge.r-project.org
Понятно что это дипилизм :) Если чел серьезно занялся статой/матикой и подался в анализ данных, то R это то что доктор прописал. В принципе, конечно, можно и питона+NumPy+scipy и что то типа библиотечки scikit-learn, но все равно против R это не конкуренция :) Все новинки выходят в R... И динамика библиотек поражает :
r4stats.files.wordpress.com/2012/04/fig_8_cran.png

можно и питона+NumPy+scipy и что то типа библиотечки scikit-learn, но все равно против R это не конкуренция :) Все новинки выходят в R..
Это очень неочевидные утверждения

Ну время покажет :)

Вот рейтинг языков (не плохо для «очень узкоспециализированного инструмента»):
www.tiobe.com/...paperinfo/tpci/index.html

Вот другой рейтинг (скала матлаб го хаскель вижуал бейсик все они не такие популярные, как Р :О )

redmonk.com/...4/language-rankings-1-15
Вот недавнее преобретение микросорта :

blogs.technet.com/...revolution-analytics.aspx

Вот несколько статеек :

www.kdnuggets.com/...-science-python-vs-r.html
www.kdnuggets.com/...-mining-data-science.html

То что Украина банановая республика, так что до нас тенденции дойдут через 10 лет..

Не понял твой посыл, по всем рейтингам Р у питона сильно посасывает.

Посыл тут один. Надо учить и R и Python...

ЯП должен позволять писать программисту понятный код. В это и есть своя фишка Delphi. Сематика ЯП понятна и проста.

По-моему, фишка дельфи (по-крайней мере старой делфи), как и у 6-го вижуал бейсика — набрасать интерфейс в гуе, а потом к каждому элементу прописать нужный код. Преимущество дельфи перед вижуал бейсиком — более продвинутый и универсальный язык и инструментарий.

Думаю фишка дельфи заключалась именно в этом, а не в семантике языка. Ну мне так кажется) (правда сам на дельфи никогда не писал, но видел-пролистывал пару книжек по ней)

Сематика ЯП понятна и проста.
А семантика джавы сложна и запутана?

Ну, опыт показывает, что программисты Delphi почти легко перешли на Java, C#, хотя на Java не кодил, но смотря на примеры, некоторые конструкции очень похожи.

Ок, т.е. паскаль таки не нужен, и джава его закопала.

А че дружить нельзя? Серверную часть на Java, UI на Delphi. Так же как и со Skype. UI был на Delphi... Чтобы забить гвоздь, мне не нужен «супер-молоток». Каждой задаче свой инструмент.

А так ли очевидно что делфи круче джавы для УИ?

Не хватает контролеров, да и с кроссплатформенностью не все айс. Друг рассказывал что он решал свою проблему UI в Delphi.

А, друг бетховена напел, старая история.

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

Ну друг же тоже не абсолютно обьективный человек и может ошибаться.

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

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

А вообще, и впредь, уважайте мнение оппонента, даже если он не прав. Тогда и общение будет в радость. Спасибо

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

в 2003му пора було починати переходити на джаву/c#, максимум в 2004му.

на секундочку, сьогодні 2015й

мені в 2001 настирливо порадили Делфі, і в універі був Паскаль. А для наукових задач цього було достатньо.

В багатьох банках використовується Delphi 6 — 7 до цієї пори. Знайти спеціалістів все складніше. Величезний багаж напрацювань. Перейти на іншу платформу — немає ні бажання, ні часу, ні ресурсів.

А що гарного у Java/C#, окрім трендовості?

А що у Делфі є крім формочок?

Хз, в 2000-х я сравнивал наборы фич что в делфи что в джаве. Что в самом языке, что в экосистеме какихто особых преимуществ небыло, даже наоборот...
В наших краях джава взлетела благодоря а) кросплатформенности (сервак мона как на винде так и на юнихах запускать) б) пресловутым аплетам, аналоги которых на делфи с применением эктивИкс — были уж совсем ущербны.

Джава взлетела потому что конторы вроде IBM, Sum, Oracle, БЕА сильно вложились в маркетинг втюхивая J2EE большим корпорациям.

Это тоже. Я смотрю со стороны контор помельче, которым ЖЕЕ ненужен был, и проги можна было и на дельфи писать, но они почемуто предпочли жабу.

Ну эти конторы не вытянули бы жабу на пик популярности. Случилось бы тоже самое что и с флешем и делфи в конце концов.
А всякие жирные банки и т.д. — вытянули.

відмирає Delphi
опа а где то в 2004 уже мертвячиной пахло по полной, я удивлен что про это кто то еще помнит

Пфф, я еще в 2010 на нем поделки творил
*ушел посыпать себе голову пеплом*

лучше жрать его — там минералы и микроелементы

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

— Embarcadero зажралась и творила глюкалово первые версии Delphi XE
XE for desktop впринципе ничего, а вот iOS/Android писец полный по-моему до XE5 или 6.

Коментар порушує правила спільноти і видалений модераторами.

На самом деле Delphi очень даже живой. Лично я на нем до сих пор достаточно много пишу а также на FreePascal, на базе которого построен Lazarus. Но Java/.NET конечно намного популярней. Будет интересно могу написать статью о том, как писать на Паскале кроссплатформенный код для Win/Linux/OSX/iOS/Java/Android/.NET/WP etc. :)

Будет интересно могу написать статью о том, как писать на Паскале кроссплатформенный код для Win/Linux/OSX/iOS/Java/Android/.NET/WP etc. :)
Фраза звучит странно.
Но вы все равно пишите.

Ничего странного. На самом деле Паскаль по кроссплатформенности круче Си :) Просто из-за провтыков в маркетинге на него многие забили и переключились на другие языки.

Во времена Kylix там рантайм был одним сплошным провтыком.

С другой стороны, а какие современники Delphi выжили?
Только MS VS, наверное, и там был переход на .NET.

Kylix был УГ. А вот «классический» виндовый Delphi просто прекрасен для многих задач.

Ничего странного.
Ну например как язык в котором есть «указатели» и возможность прямой работы с памятью будет работать на JVM.
...
Хотя вот прочитал ваше сообщение еще раз, и хочу уточнить: вы говорите про переносимость (готовых) программ/библиотек или про то что есть некоторое подмножество языка которое компилируемая в выполняемый код всех этих платформ?
Ну например как язык в котором есть «указатели» и возможность прямой работы с памятью будет работать на JVM.
есть Delphi.NET.
не уверен, но, думаю, просто отказались от этого, если хочешь получить кроссплатформенность

Его уже нет :) Есть Oxygene,

Это сильно разные вещи.
Delphi.NET — попытка со скрипом и за уши перетянуть VCL на .NET и интегрироваться в RAD Studio. Естественно, провалилась. Я в свое время лазил декомпилятором по этому VCL.NET. Тихий ужас.
Oxygene — просто компилятор паскалеобразного языка под .NET, снабженный кучей современных плюшек (это здорово) и как-то интегрируемый в VS. Какую нишу хотели занять — мне не понятно.

Я бы так сказал: есть несколько подмножеств языка. Oxygene — для .NET, FreePascal — для Java/Android/Linux/iOS. Синтаксис в 90% случаев одинаковый, но есть минимальные различия в деталях.

Компиляторы на данный момент вполне себе живы. А вот инструментарий — согласен. Notepad++ наше все :)

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

Звичайний програш на ринку схожих продуктів. Від тих хто на ньому чув що він досить непоганий. Але Delphi особисто я просто... забув.

Найвірогідніше технологія не набере критичної маси і не зможе конкурувати на ринку фреймворків. Проте може так статися, що своєчасно зорієнтуються на якусь спеціалізовану нішу та створять критичну масу саме в ній.

Так відбувалося з усіма технологіями. Ніхто не захоплював увесь світ одразу. Наприклад, PHP був виключно для односторінкових сайтів. Він так і зветься Personal Home Page. JavaScript — лише для маленьких шматочків коду, більшість з яких в один рядок. Java — цяцька для веб-аплетів у власній пісочниці.

Наприклад, С був мейнстрімом. Він і зараз мейнстрім, але у вузькій ніші — для мікроконтролерів з невеликими ресурсами.

Тому не треба особливо сумувати. Мови народжуються та вмирають, поширюються та звужують коло. В ідеалі була б взагалі одна мова. Тому, що більше мов зникне — то краще.

Ясно, це як з есперанто, ніби і логічніша і простіша за живі мови, але за нею не стоять уряди, і вона в упадку.
В науці для чисельних моделювань по швидкодії немає різниці Pascal, Fortran чи C/C++. Колись мейнстрімом був Fortran і трішки Pascal, зараз C/C++ і трішки Fortran.

але за нею не стоять уряди, і вона в упадку.
Правительства тут не причем. За эсперанто за ней не стоят __люди__, люди которые на ней разговаривают, воспитывают детей (новых людей), люди которые пишут сочинения (новый мега крутой фреймворк) или газетные статьи (прикладные приложения).
відмирає Delphi, а про Lazarus мало хто в курсі?
його літаюча багатоформенна ЮІ була як торговим знаком, так і пеклом для користувачів..

Во!!! Ось це я й хотів почути!

Python вже дивлюся.
Серед java, net, javascript кому надавати перевагу?

Джаваскрипту конечно же. Это ж современная лингва франка ИТ.

Он ищет работу Data scientist и уже учит Python. Зачем ему Джаваскрип

Data scientist? В вопросе речь об этом не шла.

Я читав цю стаття, але там більше для Programmer a не Data scientist.

С++, Python, Matlab, R и PhD астрофизики. Можно такими вещами заниматься, но.. не
в Украине.

Ходят слухи, что в США на собеседовании Data scientist иногда просят показать аккаунт на www.kaggle.com

Маю там аккаунт, але ще не брався за завдання. Там по затратах на виконання вони, як стаття в peer-review journal з астрофізики :)

Та там по приколу играть, я вот недавно зарегался... Но большинство закрытых учебных соревнований, только несколько открытых. Недавно резался с крутым чуваком с ДОУ, было интересно...
inclass.kaggle.com/...l-spring-2015/leaderboard
А если не учебные, а за бабло — мой комп наглушняк убивает — оперативы не хватает, бо старый (всего 2 гб из которых не занято метров 500 :) ), если поковырятся то все равно счетает очень долго... А без того же отбора оптимальных предикторов — фигня : сетуха на всех переменных ночь обучалась, походу в локалке застряла и результат говвно. Какие то крутые методы — фиг тоже старье потянет :( А ж зло берет, когда думаешь, что буржуи с какой-то «Теслой» терабайтной сидят и супер алгоритмы херячат на крутых компетишонах :(

Розкажіть детальніше як грати. Ви просто забиваєте дані для mashine learning і запускаєте? Який попередній аналіз робите?

Смотря в каком направлении хочется развиваться и какими проектами заниматься.

Если интересует Data Science, то Java + Python. Про Delphi — просто забудьте навсегда.

См. Delphi XE — рекламируют аж бегом, но уже поздно чтобы Java/.NET перескакать.

Кроме паршивости языка (как там размещенение трёхмерного массива в куче, до сих пор геморрой?) и среды (до сих пор евент-драйвен?)? Они просто никому не нужны при наличии дотНета и Джавы.

ак там размещенение трёхмерного массива в куче, до сих пор геморрой?
масиви як масиви, хоть 4-мірні array [-10..40,10..67,-7..8,-34..11] of real;
евент-драйвен
Так. Але подійно-орієнтоване програмування себе вичерпало?
масиви як масиви, хоть 4-мірні array [-10..40,10..67,-7..8,-34..11] of real;
в куче
Так. Але подійно-орієнтоване програмування себе вичерпало?
Оно ущербно по сути своей: это же высокотехнологичный Goto. В топку эвент драйвен.

Для статистики big data це щось міняє?

Почём я знаю, что там у вас за статистика и какая у приложения архитектура. По работе с коллекциями и распаралеливанием, которое бы пригодилось в биг дата, Дельфи тоже вчистую сливает Шарпу.

Вы спросили почему издох Дельфи — я ответил: язык — паршивый, среда — паршивая, конкурентов — целых два.

Якщо розпаралелювання то все є:
the MPI bindings for Free Pascal / Lazarus
wiki.lazarus.freepascal.org/...r_Free_Pascal_.2F_Lazarus
Для кореляцій подійно-орієнтоване працює на відмінно по швидкодії.

Ага, есть. Просто в плане удобства это не сравнится с Шарпом. А время программиста стоит дороже лишнего сервера.

А время программиста стоит дороже лишнего сервера.
у випадках відмінних від data science та high load це може і правда, але там за годину можна спалити(на клауд сервісах) всю ЗП програміста і з того сильно радіти....
(как там размещенение трёхмерного массива в куче, до сих пор геморрой?)
речь о том, что именно массивы сложнее в описании, чем С-style арифметика на указателях?
и среды (до сих пор евент-драйвен?)
ээээ...а чем отличается от VisualStudio?
речь о том, что именно массивы сложнее в описании, чем С-style арифметика на указателях?
Нет, там была операция для создания одномерного массива в куче, двумерного массива в куче и собсно всё. Как создать трёхмерный я так и не узнал.
ээээ...а чем отличается от VisualStudio?
Вы про Винформс? Ничем, Винформс тоже сдохли. А в ВПФ события хоть и присутствуют, но по уму там используется MVVM.
Нет, там была операция для создания одномерного массива в куче, двумерного массива в куче и собсно всё. Как создать трёхмерный я так и не узнал.
що означає в кучі?
хоть 10-мірний масив утворюєте таким способом
array [-10..40,10..67,-7..8,-34..11] of real;

Это создание массива в стеке, ядрён батон. А я говорю про динамическое выделение памяти.

В Pascal ні, а в Delphi ніби можна і >2D.

В седьмом Дельфи было нельзя. Может в новых версиях и можно, не знаю. Это мало что меняет.

Бред полнейший. Лишний раз показывает компетентность дотнетных делфихейтеров.

type
TArr = array[-30..30, 0..10, −10..0] of Double;
var
Arr: ^TArr;
begin
New(Arr); // трехмерный массив в хипе, поддерживается со времен Turbo Pascal

Очень мило. А теперь с динамической длиной.

Ваши слова?

Нет, там была операция для создания одномерного массива в куче, двумерного массива в куче и собсно всё. Как создать трёхмерный я так и не узнал.
Опровергнуто. Pascal — достаточно логически сбалансированный язык, чтобы отличия в декларации 2-мерного и N-мерного массива отличались лишь количественно, но никак не качественно.

Что касается динамических массивов, которые по сути и не массивы вовсе, а динамические списки со специальным синтаксисом, то вот так:
var
Arr: array of array of array of Int64;
begin
Arr:= [[[0, 1], [2, 3]], [[4, 5], [6, 7]], [[8, 9], [10, 11]]];

И вот это вот получится динамический массив в куче? У меня нет среды, что бы проверить, но чёй то SetLength я тут не наблюдаю.

И вот это вот получится динамический массив в куче?
Вы себе как-то представляете динамический массив в стеке? Любопытно было бы узнать детали.
но чёй то SetLength я тут не наблюдаю
Ну, я ж говорил выше про компетентность...

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

За аллоку в коде я бы ручки-то укорачивал бы.
Иногда приходится. При прямом программировании железа бывает нужно выделить область в стеке при вызове куска кода, не являющегося функцией в прямом смысле слова. Тогда или так, или кучей ассемблерных push-ов. овнокод еще тот выходит, но что делать?
получится динамический массив в куче?
Вы себе как-то представляете динамический массив в стеке?
у меня, наверное, деградация из-за javascript’a наступила.
разве куча и стек это одно и то же?

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

Хотя, при желании, можно обойтись как без первого, так и без второго, зависит от реализации виртуальной машины.

Это совершенно разные области памяти и работа с ними сильно разная.
Да ну :)
Но читать лекцию не буду
Так и не нужно.

Это шутка была :)
Я почти 15 лет уже нэйтивом профессионально занимаюсь, от ASM до сабжа.

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

Словит пару эксепшнов, а дальше одно из двух: или разберется почему так, и узнает как надо; или пойдет более безопасным путем, запомнив на будущее, что эта возможность — минное поле. И то и другое только на пользу, имхо.

На alloca, или динамическом массиве из С99?
Нет, я более общий случай имею в виду. Попробует, например, джун-дотнетчик напрямую обратиться к функции ядра, получит ошибку, а потом погуглит, и либо один вариант, либо другой.

Маловероятно, что джун дотнетчик сможет это сделать. Кода не так уж и много, но в книгах этому не учат.

Сможет. Вопрос в том, не заочкует ли он это делать.

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

За alloca без контроля размера — согласен. С контролем под разумные ограничения — почему бы и нет?
Особенно когда не хватает времени на толковую работу с кучей (malloc на входе, free на выходе).
Housekeeping кода (как это перевести?) должен не забываться, и требуемые проработки — срабатывать сразу.

Вы себе как-то представляете динамический массив в стеке? Любопытно было бы узнать детали.
Ну, я ж говорил выше про компетентность...
Ну, кто бы говорил про компетентность: alloca(). И у меня сильное подозрение, что ваш код сделает то же самое.

Но если нет, то с какой версии это появилось? Потому что в седьмой Дельфе я такого не помню.

Я не говорю, что это хорошо, я говорю, что это — возможно.

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

Он построен по устаревшим принципам. Старенький он уже.

И что же в нем устаревшего по сравнению с другими ходовыми native-языками?

Но если нет, то с какой версии это появилось? Потому что в седьмой Дельфе я такого не помню.
Потому что в седьмой этого и не было. Это, кстати, к вопросу об отсутствии развития.

Я ушёл с Делфи с седьмой версии.

Что, однако, не мешает вам говорить о ее недостатках спустя 13 лет.

Я изначально писал: «до сих пор». Ну хорошо, как в Дельфи обстоит дело с лямбдами?

Ну ей-богу, первая же ссылка из гугеля:

var
A: TArray<double>;
begin
A := [1, 2, 3];
A.ForEach(procedure(X: Double; I: Integer; var Done: Boolean)
begin
A[I] := X * 2;
if I = 1 then
Done := True;
end);
WriteLn(A.ToString);
end;

Тьфу это же делегат, или анонимный метод, или как его там у вас называют.

Это анонимный метод, который согласно определению и является лямбда-выражением в данном контексте. Вы определитесь с терминологией, что вам надо?

Лямбды обычно имеют характерный синтаксис.

В рамках которого из языков? Тут пол форума от жабаскрипта тащится и на полном серьезе считает, что он лучше всех остальных языков вместе взятых, покажите мне «характерность» тамошних лямбд и их отличие от анонимных методов. Особенно для 1.7- интересно.

В принципе. И я ДжаваСкрипт защищать не буду, там тоже анонимные методы. Учитывая, как часто они используются — давно могли бы сделать полноценные лямбды.

Наличие специального синтаксиса без операторных скобок — это не то, что обычно отличает нормальный язык от ненормального.

Нет, просто один из факторов. И возвращаясь к теме, положим дельфи научился в нормальные динамические массивы. В каком году он это сделал? Шарп, Джава, даже кресты умеют это от рождения.

Динамические массивы появились в Delphi 4, это 1998 год. Не подскажите, где тогда был шарп?

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

Джава только на сановских рекламных проспектах была, в живой природе не встречалась принципиально. Я тогда как раз начинал программировать и прекрасно помню, где была эта ваша джава и как она тормозила на тогдашнем железе. В крестах же полноценный динамический массив std::vector был стандартизирован, сюрпрайз, в 1998 году.

Последняя версия Javascript поддерживает «характерный синтаксис»

Кроме того школота поздабыла, что совсем недавно характерным синтаксисом лямбд был
(lambda (x) (= x 10))
но аноны не забывают

lambda — это стандартный для некоторых языков формат записи анонимного блока кода. Он не всегда так называется; может вместо этого оформляться через: function(args){body} (например, Javascript); {|args|body} (Ruby, Clipper); [](args){body} (C++) — суть остаётся той же.

Вы себе как-то представляете динамический массив в стеке? Любопытно было бы узнать детали.

Если размер задаётся один раз при работе функции — (в треде уже обсуждено, не будем повторяться).

В Паскале/Дельфи не видел, но я с ними после ~97-го и не общался.

Ваше мнение про необходимость реаллокации считаю чрезмерным — это нужно далеко не всегда, особенно, когда мы говорим про массив. Обычно под этим словом подразумевают что-то не меняющееся в размере.

Ваше мнение про необходимость реаллокации считаю чрезмерным — это нужно далеко не всегда, особенно, когда мы говорим про массив. Обычно под этим словом подразумевают что-то не меняющееся в размере.
В первую очередь мы говорим о динамическом массиве, что накладывает некоторые требования.

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

Arr:= [[[0, 1], [2, 3]], [[4, 5], [6, 7]], [[8, 9], [10, 11]]];
оу, то есть, они-таки сделали неявную работу с setLength?
отлично, а то в 7-ке это натурально бесило.
безо всякой необходимости создавать в куче — самими рекурсивными setLength.
а с какой версии так можно, не скажете?
а с какой версии так можно, не скажете?
Точно не знаю, не слежу уже за каждой новостью. В описании новшеств одной из XE-версий видел.

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

Как создать трёхмерный я так и не узнал.
рекурсивно ходить и ставить setLength :(
впрочем, может там ограничение самого языка на array of array of array...
но точно можно было бы сделать
type Matrix = array of array of integer; var arr: array of Matrix;
но согласен заранее, что боль, и «троллейбус из буханки хлеба»
А в ВПФ события хоть и присутствуют, но по уму там используется MVVM.
по давнему опыту с Delphi 7:
был класс Event — можно было вполне строить виджеты и генерировать логические события. То есть, для внедрения MVVM не вижу ограничений.
То, что только один хендлер(вместо шарповского += или джаваскриптового addEventListener/attachEvent) привязывался — напрягало, да.
был класс Event — можно было вполне строить виджеты и генерировать логические события. То есть, для внедрения MVVM не вижу ограничений.
Ага, читал когда то на Хабре про похожую схему. Теоретически внедрить МВВМ пожалуй можно, проблема в том, что Дельфи к этом не располагают, а ВПФ из коробки имеет заточенную под МВВМ архитектуру.
Pascal, Delphi, Lazarus
Мертвы

ТС просил «почему»

смотря куда и на кого вы подаете резюме
UPD.Увидел ваше резюме. Data scientist, programmer analyst
1)Ничего не убирайте. Вы PhD. В научной среде Pascal все еще используется. Поэтому никаких вопросов не возникнет.
2)Будете подавать резюме в банк, к примеру, на аналитика — добавьте Delphi. А так не стоит.
И не слушайте тех, кто говорит:

Мертвы
У них кроме PHP и Java все мертво или умирает.

Ок, дякую.
А не краще світити відкритим Lazarus замість Delphi?

А не краще світити відкритим Lazarus замість Delphi?
смотря, с какой позиции.
если есть реальные проекты, то гораздо важнее — что именно и как вы в рамках проекта(не важно, промышленное ли или в рамках диссертации) делали.
если задел на позицию разработчика в какой-то конторе, то HR может и отсеить ваше резюме, так как не сопоставит Lazarus == Delphi.
так что, даже не вижу смысла. можно указывать Lazarus/Delphi — и то, и то.
и выпендрился, и не рискуешь :)
Lazarus

Я про него вообще в этом топике впервые прочитал. :-)

2)Будете подавать резюме в банк, к примеру, на аналитика — добавьте Delphi.

Утончённый мазохизм. :-)

Не модно

А це єдиний реальний аргумент.

На лазарусі не напишеш стоп’ятсоту корпоративну WEB-програму для іноземного замовника.

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

Підписатись на коментарі