Динамично vs статично типизиране

Всичко за програмирането на игри - архитектура, графика, звук, изкуствен интелект, мрежи.
ikolev
модератор
модератор
Мнения: 1657
Регистриран: 20 ное 2003 22:39
Местоположение: София
Контакти:

Динамично vs статично типизиране

Мнение от ikolev » 06 дек 2011 10:49

(отцепено от деца, не си губете времето с XNA)
Zammy написа:Но... за мен Lua е по-добре от C# поради много пречини.
Уви, не.
Същото важи и за С++ vs C#.
Най-бързата за разработване среда, която съм използвал досега, е .NET/C#. Освен това и най-стимулираща създаването на качествен дизайн и код. Но на С++ все още трябва да се оставят чувствителните към бързодействие модули.
Отдавна се надявам някоя голяма компания да купи Digital Mars, за да направи D достатъчно професионално средство. Тогава ще имаме едно средство за високото и ниското ниво.

Потребителски аватар
haho
Power User
Power User
Мнения: 999
Регистриран: 07 дек 2003 21:52
Местоположение: България
Контакти:

Динамично vs статично типизиране

Мнение от haho » 06 дек 2011 11:48

ikolev написа:Най-бързата за разработване среда, която съм използвал досега, е .NET/C#.
Съгласен! Много е пипнато като среда и платформа.

Zammy
Power User
Power User
Мнения: 170
Регистриран: 17 фев 2008 05:47
Местоположение: София/Пловдив

Динамично vs статично типизиране

Мнение от Zammy » 07 дек 2011 12:16

ikolev написа:
Zammy написа:Но... за мен Lua е по-добре от C# поради много пречини.
Уви, не.
Същото важи и за С++ vs C#.
Най-бързата за разработване среда, която съм използвал досега, е .NET/C#. Освен това и най-стимулираща създаването на качествен дизайн и код. Но на С++ все още трябва да се оставят чувствителните към бързодействие модули.
Отдавна се надявам някоя голяма компания да купи Digital Mars, за да направи D достатъчно професионално средство. Тогава ще имаме едно средство за високото и ниското ниво.
Аз работя над C# проект в момента. Или по-скоро ми се налага да бъркам от време на време. Има места в кода който изглеждат по-зле от C++. Толкова може се усложни. Има над 100 проекта и около 5 файла на 50 реда истински код. Минава се през уникални горящи обрачи за да се преодолее проблема с типовете.

Луа -> за игри. C# -> за банки.

Stilgar
Power User
Power User
Мнения: 824
Регистриран: 12 яну 2006 22:15
Контакти:

Динамично vs статично типизиране

Мнение от Stilgar » 07 дек 2011 13:57

И що динамичното типизиране да е добре за игри пък да не е добре за банки?

Потребителски аватар
KosSiO
Power User
Power User
Мнения: 316
Регистриран: 20 окт 2008 19:29
Местоположение: Targovishte,Sofia

Динамично vs статично типизиране

Мнение от KosSiO » 07 дек 2011 18:06

Изцяло ЗА строгото типизиране!!!

ikolev
модератор
модератор
Мнения: 1657
Регистриран: 20 ное 2003 22:39
Местоположение: София
Контакти:

Re: Динамично vs статично типизиране

Мнение от ikolev » 07 дек 2011 23:39

Не казвам че на С# не можеш да пишеш лошо. Лошо може да се пише на всичко. Казвам че С# досега най-много ме е предразполагал и ми е помагал да пиша качествено (да, и огромният набор от помощни средства към него).
Ако ти се налага да заобикаляш системата от типове, значи задачата ти не е за силно типизиран език. Аз обаче досега не съм виждал задача за която динамичното типизиране да е по-добро от статичното. Да, има *отделни класове* които имат нужда от свободно съдържание (тип таблица в Lua), но цял, голям проект - не. А когато ти потрябва, една хештаблица лесно можеш да вкараш във всеки език със силна типизация.
Преди няколко години и аз мислех че С++/Lua е най-силното дев-комбо (или любим native език + любим динамичен скрипт език). Вече не.

pdimov
gosu
gosu
Мнения: 871
Регистриран: 02 дек 2003 01:04

Re: Динамично vs статично типизиране

Мнение от pdimov » 08 дек 2011 01:51

C++/Python има предимството, че автоматично си scriptable от крайния потребител. (Крайният потребител като правило не счита Lua поддръжка за "scriptable".) Освен това работим на Mac и Linux.

Потребителски аватар
themean
Power User
Power User
Мнения: 860
Регистриран: 02 дек 2010 22:51

Re: Динамично vs статично типизиране

Мнение от themean » 08 дек 2011 10:39

Я дайте малко информация за неуките какво е динамично и статично типизиране
Имам нещо на ум ама се съмнявам, че е вярно

ikolev
модератор
модератор
Мнения: 1657
Регистриран: 20 ное 2003 22:39
Местоположение: София
Контакти:

Re: Динамично vs статично типизиране

Мнение от ikolev » 08 дек 2011 10:51

pdimov написа:C++/Python има предимството, че автоматично си scriptable от крайния потребител. (Крайният потребител като правило не счита Lua поддръжка за "scriptable".) Освен това работим на Mac и Linux.
За Mac и Linux - Моно.
Там както и при MS, компилаторът е достъпен. Т.е. имаш и крайния потребител.
themean написа:Я дайте малко информация за неуките какво е динамично и статично типизиране
Имам нещо на ум ама се съмнявам, че е вярно
http://en.wikipedia.org/wiki/Type_system

gemicha
Site Admin
Site Admin
Мнения: 2930
Регистриран: 20 ное 2003 22:20
Местоположение: USA

Re: Динамично vs статично типизиране

Мнение от gemicha » 08 дек 2011 11:15

Моя опит с C# показа, че няма такова нещо като C#. Има C# 2, C# 3.5, C# 4, и следващи версии. Всеки един от тези изици си има различни инструменти за решаване на един и същи проблем. Аз лично не съм голям почитател на нито един от тези езици, но трябва да се съглася, че средата за програмиране на C# е много добра. Много приятно впечатление ми прави F#, но това е друга тема за дискусия.

pdimov
gosu
gosu
Мнения: 871
Регистриран: 02 дек 2003 01:04

Re: Динамично vs статично типизиране

Мнение от pdimov » 08 дек 2011 15:59

ikolev написа:
pdimov написа:C++/Python има предимството, че автоматично си scriptable от крайния потребител. (Крайният потребител като правило не счита Lua поддръжка за "scriptable".) Освен това работим на Mac и Linux.
За Mac и Linux - Моно.
Там както и при MS, компилаторът е достъпен. Т.е. имаш и крайния потребител.
Scripting на C#, който си компилираш вътрешно? Това има ли го правено в някой реален софтуер?

Zammy
Power User
Power User
Мнения: 170
Регистриран: 17 фев 2008 05:47
Местоположение: София/Пловдив

Re: Динамично vs статично типизиране

Мнение от Zammy » 08 дек 2011 16:55

По-лесно се пише код със динамични типове, но е по-малко четим ако не се прави добре.

Проблема на C#3 C#4 е че вече едно нещо може се направи по прекалено много начини, което води до това че ако не си тотален факир
на C# може да е много трудно да разбереш какво става. Също така статично типизиране води до огромно количество кастване на обекти за да работиш с тях.
Всичките тези хиляди интерфейса, който се използват за да се намали къплинга (coupling) в скриптове език няма да ги има.

Това което липсва е интел сенс със скриптов език. Обаче... примерно в хеми имаше интелисенс в конзолата. Ако пишеш игра с Луа ти рялно не трябва да спираш гейм симулацията а само да се презареждаш луа файловете. По този начин можеш да получиш някакъв вид интелисенс от гейм стате-а. Също така в дебъгера може да се бреакне и да се направи така че да има интелисенс докато си бреакнал и така малко по-малко да сглобиш каквото искаш.

Ако има добър инструмент за Луа писане мога смело да твърдя че писането на Луа няма да е по-лошо от това на .NET.

Stilgar
Power User
Power User
Мнения: 824
Регистриран: 12 яну 2006 22:15
Контакти:

Re: Динамично vs статично типизиране

Мнение от Stilgar » 08 дек 2011 18:45

Че к'во има в C# 4.0, бе другари? Ако говорите за dynamic то спорът почти се обезсмисля. Айде C# 3.0 как да е (въпреки че не виждам к'ви са тия много начини да правиш едно и също нещо дето са дошли точно в C# 3.0), но 4.0 е доста скромна работа.

Потребителски аватар
Kerberos
Power User
Power User
Мнения: 234
Регистриран: 24 фев 2005 16:08
Местоположение: София
Контакти:

Re: Динамично vs статично типизиране

Мнение от Kerberos » 08 дек 2011 20:02

"If it looks like a duck and quacks like a duck, it must be a duck."

http://en.wikipedia.org/wiki/Duck_typing

ikolev
модератор
модератор
Мнения: 1657
Регистриран: 20 ное 2003 22:39
Местоположение: София
Контакти:

Re: Динамично vs статично типизиране

Мнение от ikolev » 08 дек 2011 23:02

pdimov написа:
ikolev написа:Там както и при MS, компилаторът е достъпен. Т.е. имаш и крайния потребител.
Scripting на C#, който си компилираш вътрешно? Това има ли го правено в някой реален софтуер?
Публичен май не знам. Знам един който още е далеч от публикуване и за който не мога да говоря.
Принципно погледнато, нищо не пречи. Компилаторът е доста бърз.
Zammy написа:По-лесно се пише код със динамични типове, но е по-малко четим ако не се прави добре.
Освен това по-лесно се правят грешки. Нищо не пречи да напишеш window.Widht = 100, което дори ще мине тихичко, а ти после се чуди що не става това което искаш. В Lua можеш да защитаваш таблици от добавяне на нови полета, та поне да не мине тихичко, но тръгнеш ли да го правиш значи признаваш нуждата от статично типизиране - по-добре да смениш езика.

Навремето бях чел цитат от автора на Python - "предпочитам силно тестване вместо силни типове". Добре звучи, само дето за силно тестване трябват доста повече усилия, плюс това самите тестове отнемат време.
Zammy написа:Проблема на C#3 C#4 е че вече едно нещо може се направи по прекалено много начини, което води до това че ако не си тотален факир на C# може да е много трудно да разбереш какво става.
Ами аз за една година със сигурност не съм станал тотален факир, но не се оплаквам. Може би печеля от това че съм почнал направо със С# 4.0. И може би затова не виждам много начини. Освен това ако говорим за много начини за едно нещо, Lua (да не говорим за C++) също има какво да каже.
Zammy написа:Също така статично типизиране води до огромно количество кастване на обекти за да работиш с тях.
Всичките тези хиляди интерфейса, който се използват за да се намали къплинга (coupling) в скриптове език няма да ги има.
Кастване има във всеки обектноориентиран език. В динамичния език също е добре да провериш дали обектът има даден метод преди да го извикаш. Или изобщо да провериш дали може да прави разни неща преди да тръгнеш да ги правиш. Интерфейсите ти позволяват с един каст да разбереш много неща наведнъж за даден обект. Освен това ОО-езиците имат начини за намаляване на кастването (примерно ковариантните типове на връщане, дето точно тях С# ги няма, но могат да се симулират).
Zammy написа:Това което липсва е интел сенс със скриптов език. Обаче... примерно в хеми имаше интелисенс в конзолата. Ако пишеш игра с Луа ти рялно не трябва да спираш гейм симулацията а само да се презареждаш луа файловете. По този начин можеш да получиш някакъв вид интелисенс от гейм стате-а. Също така в дебъгера може да се бреакне и да се направи така че да има интелисенс докато си бреакнал и така малко по-малко да сглобиш каквото искаш.
Това важи само докато програмата е активна в паметта. На сух сорс код не става.
Zammy написа:Ако има добър инструмент за Луа писане мога смело да твърдя че писането на Луа няма да е по-лошо от това на .NET.
Стигаме до най-важното - добрите инструменти. Силната типизация тук се оказва съществено предимство, защото усилието което правим за да опишем данните и функциите си е от огромна полза за всички средства за автоматична обработка на кода. Дори само това да кажеш "Find all references" и да си сигурен че ще получиш точен резултат за мен беше удоволствие (като човек който почти не беше писал на Java преди това). За автоматичните рефакторирания да не говорим.
А после като се намесят и инструменти като StyleCop, NDepend, Code Contracts, NUnit... с които можеш да автоматизираш купища дейности по организацията на проекта (примерно да избереш кой от споменатите по-горе "много начини" ще се ползва), разбираш че си попаднал в друга ера на понятието software engineering. И всичко това става благодарение на силната типизация и другите подходи за "проактивна спецификация" на кода.

Разбира се, всичко това важи за големи проекти. За скриптове по 2-3 екрана динамичното типизиране работи. Не че статичното не работи и там.

Отговори