Автор Гілка: Майбутнє за динамічними мовами програмування  (Прочитано 4356 раз)

Відсутній Олександр Кравчук

  • Кореспондент
  • ***
  • дописів: 131
  • Карма: +0/-0
  • Rivne's LUG
Чесно кажучи, я просто в шоці: не був в тенеті всього одну нічку, а тут така дискусія, хоч не зовсім по тема, та все ж погодьтеся, доволі цікава. Там хтось запитував мою думку.. ну, я лиш простий Рівненський студент, але все ж: ну, щодо поділу програмістів на прогрмістів, та системних програмістів - це вже дійсно гон, але щось я його ні в чийому пості не помітив; там щось говорили про кваліфікацію, знання і т.д. - ну от, кваліфікації і знань це дійсно вимагає різних! У якості прикладу навед цитату з однієї книги дуже відомого асемблерщика: "є певна частина програмістів, яким у свій час не вистачило сміливості і/або мізків вїхати в машинні коди, переривання та іншу низькорівневу фігню". Тобто, це вимагає не на стільки різних, скільки більших зі сторони системних програмістів знань в області заліза, його більш глибоких принцепів роботи і т.д. Власне, я знаю, парочку дійсно не поганих C# програмістів, які пишуть чудове корпоративне ПЗ, але не можуть написати простієї програмки на с++, чи асмі, яка б просто вантажилася без наявності ОС, і писала: "Я тебе люблю... Україно!", але не знаю жодного, хорошого асемблерщика, який пише софт на рівні ядра, суперові алгоритми і т.д., але не зможе узяти гідну учаснь в якось потужному win32 проекті на з базами, серйозним ставленням до юзабіліті... на C#, Delphi... ну це так, між іншим, бо я не можна ж усім писати ос, тре комусь писати й софт для них.

Відсутній iip))

  • Графоман
  • ****
  • дописів: 277
  • Карма: +0/-0
  • Перекладач KDE, openSUSE...

RTFA (Read The F****** Article) (c) :)
Не ображайтесь, а Ви статтю читали? Там все написано:
Так що це скоріше калька з англійської... ;)
Така назва досить обґрунтована. У таки мовaх, наприклад, при введенні змінної не вимагається явно задавати її тип, і у процесі роботи програми, цій змінній можуть бути присвоєні данні різних типів. Java (доречі, інтерпретована мова, але не скриптова), наприклад, цього не дозволяє та видає помилку при компіляції. Це і є "compile-time type checking".
Моє запитання було: чи це є усталеною українською термінологією? Ні! Тому що і в англійській термін "dynamic languages" не є загальноприйнятим, його просто пробують пропхати у вжиток деякі "євангелісти" (доказуючи повноцінність або перевагу цих мов): "One of the reasons we focus on calling them "dynamic" instead of "scripting" languages now is to try and garner the respect they rightly deserve".
А Ваш приклад мови Java є зовсім недоречним, тому що в цій мові сирці спочатку компілюються у bytecodes, а потім виконуються ("інтерпретуються") на віртуальній машині. Java не є скриптовою мовою.
А "dynamic typing" є радше недоліком, ніж перевагою скриптових мов.
"You should not be satisfied with being a victim, nor with being a survivor. You should aim to be a conqueror." "Now, go do the right thing!" Dr. Laura

Відсутній Олександр Кравчук

  • Кореспондент
  • ***
  • дописів: 131
  • Карма: +0/-0
  • Rivne's LUG
А "dynamic typing" є радше недоліком, ніж перевагою скриптових мов.

Поясніть, будь ласка!

Відсутній iip))

  • Графоман
  • ****
  • дописів: 277
  • Карма: +0/-0
  • Перекладач KDE, openSUSE...
Я просто погодився з Hobbs, який каже: "... many tasks done with a dynamic language will be slower than a well-coded equivalent in a systems language.
Another drawback is again rooted in a key feature of dynamic languages: the dynamic typing".

В компільованих мовах більшість помилок з типами виловлюються під час компіляції, а в скриптових мовах -- під час виконання програми. Вам судити що є гірше: програма, яка не компілюється чи програма, яка викидає коники під час користування. Крім того, використання динамічних типів впливає негативно на швидкість виконання програм.
"You should not be satisfied with being a victim, nor with being a survivor. You should aim to be a conqueror." "Now, go do the right thing!" Dr. Laura

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3739
  • Карма: +9/-0
  • Програміст
Це теж ще нічого не означає.

Зустрічне питання. В цьому контексті ця людина - системний, чи "несистемний" програміст? :-)

Ну це ще треба подивитися на результат - з чого ви взяли, що вона взагалі програміст? Можливо вона тільки вчиться... ;-)
[Fedora Linux]

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3739
  • Карма: +9/-0
  • Програміст
Така назва досить обґрунтована. У таки мовaх, наприклад, при введенні змінної не вимагається явно задавати її тип, і у процесі роботи програми, цій змінній можуть бути присвоєні данні різних типів. Java (доречі, інтерпретована мова, але не скриптова), наприклад, цього не дозволяє та видає помилку при компіляції. Це і є "compile-time type checking".

На рахунок Яви - ви помиляєтесь - вона підтримує як статичну типізацію так і динамічну типізацію. У Яві можна все описувати як Object, а методи викликати через reflection чи через приведення до потрібного типу - ось вам і динамічна типізація.

Object o= .....;
o.getClass().getMethod("method").invoke(o,new Object[]{param1,param2});

Компілятор тут нічого не вдіє. :-(
[Fedora Linux]

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3739
  • Карма: +9/-0
  • Програміст
Я просто погодився з Hobbs, який каже: "... many tasks done with a dynamic language will be slower than a well-coded equivalent in a systems language.
Another drawback is again rooted in a key feature of dynamic languages: the dynamic typing".

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

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

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

Дуже важко буде писати складні програми, якщо не буде можливості динамічного приведення типів (хоча генерики частково вирішують цю проблему). Без динамічного аналізу коду та не вдасться писати плагіни та інші динамічні штучки.

[Fedora Linux]

Відсутній Andy Borovy

  • Кореспондент
  • ***
  • дописів: 139
  • Карма: +0/-0
  • Працюю там, де цікаво
А від коників жодна програма не застрахована :)
Хто ж знає, що саме вирішить зробити користувач... І тоді виявляється, що твоя програма вміє таке, чого ти не програмував до неї.
Без уст я іронічний жах,
Що упирем ікластим став би
З очима ніжними кульбаби,
Якби не очі в дзеркалах.

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3739
  • Карма: +9/-0
  • Програміст
Досить непогана підбірка матеріалів на цю тему:

http://citeseer.ist.psu.edu/abadi89dynamic.html
[Fedora Linux]

Відсутній nickat

  • Письменник
  • *****
  • дописів: 587
  • Карма: +0/-0
  • Debian user
Моє запитання було: чи це є усталеною українською термінологією?

Пробачте, виходить я не зовсім зрозумів питання.

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

термін "dynamic languages" не є загальноприйнятим, його просто пробують пропхати у вжиток деякі "євангелісти" (доказуючи повноцінність або перевагу цих мов)

На мою думку ніхто нічого доказувати не збирається. Мова - це інструмент. Є певні задчі, а до них інструменти, більш чи меньш пригодні.

А Ваш приклад мови Java є зовсім недоречним, тому що в цій мові сирці спочатку компілюються у bytecodes, а потім виконуються ("інтерпретуються") на віртуальній машині. Java не є скриптовою мовою.

Нічого іншого я і не стверджував. А доречність прикладу з Java була у тому, щоб проілюструвати "compile-time type checking". Який відсутній у мовах, що підтримують "dynamic typing".

А "dynamic typing" є радше недоліком, ніж перевагою скриптових мов.

"dynamic typing" це як раз одна з причин, чому такі мови як Perl, Python та інш. так широко використовуються для вирішення певних задач.
Best regards,
nickat

Відсутній nickat

  • Письменник
  • *****
  • дописів: 587
  • Карма: +0/-0
  • Debian user

На рахунок Яви - ви помиляєтесь - вона підтримує як статичну типізацію так і динамічну типізацію.


тут я не помиляюсь:

1) "The Java programming language is a strongly typed language, which means that every variable and every expression has a type that is known at compile time."
http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#48440

Як можна побачити з контексту "strongly typed" тут використовується у значенні "statically typed":
"A language is strongly typed if the type of its data objects is fixed and does not vary over the lifetime of the object. [...] (This property is often, and less ambiguously, called "static typing.")"
http://en.wikipedia.org/wiki/Strong_typing

2) "Java is a statically typed language. The types of variables are fixed at compile time, or more precisely are constrained to some set of types."
http://mindprod.com/jgloss/statictyping.html

3) "C, Java, ML, and Haskell are statically typed..."
http://en.wikipedia.org/wiki/Static_typing#Static_and_dynamic_typing
Best regards,
nickat

Відсутній nickat

  • Письменник
  • *****
  • дописів: 587
  • Карма: +0/-0
  • Debian user

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


Може ви маєте на увазі не статичну типізацію а "static binding". Саме "static binding" робить програму "спаяною намертво".

Якщо знов повернутися до Java, то ця мова підтримує тільки статичну типізацію, але це не заважає їй підтримувати також "dynamic binding", та проводити "динамічний аналіз коду".
Best regards,
nickat

Відсутній rangel

  • Графоман
  • ****
  • дописів: 281
  • Карма: +0/-0
  • Python programmer
Цікавий факт (нажаль не пам'ятаю де бачив) ефективність роботи програміста (а отже і швидість розробки) на Python в 4,5 рази вища ніж на С.

Інша сторона медалі - швидкість роботи самої програми.

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

Roman Suprotkin